В этом руководстве вы узнаете о новой замечательной функции SMS-токена в Android O. Вы узнаете, как сгенерировать токен для конкретного приложения, который будет запускать ожидающее намерение, когда устройство впервые получает сообщение, содержащее этот токен, таким образом, чтобы проверить номер телефона.
Пожалуйста, обратите внимание, что на момент написания этой статьи API-интерфейсы Android O все еще находятся на третьем предварительном просмотре для разработчиков, хотя и являются окончательными. (Мы до сих пор не знаем, что означает O!)
Что такое SMS-токен?
SMS-токен или одноразовый пароль — это механизм безопасности, используемый для аутентификации или проверки пользователя. Пользователь вводит свой номер телефона, и специально для этого пользователя создается токен ограниченной продолжительности жизни. Затем пользователь получает токен в виде SMS на свой телефон. В случае Android O на момент написания этой статьи токен конкретного приложения не истекает, а становится недействительным при создании другого.
Зачем использовать SMS-токен Android O?
Одна из основных причин, по которой вы можете рассмотреть возможность использования механизма SMS-токенов Android O, заключается в том, что он улучшает взаимодействие с пользователем приложения. Пользователю не нужно копировать и вставлять токен из SMS-клиента для проверки. Вместо этого устройство Android автоматически обнаруживает токен, отправленный на устройство пользователя, а затем запускает компонент приложения в намерении, связанном с вашим приложением (мы вскоре к этому вернемся).
Более того, эта функция не требует разрешения READ_SMS или каких-либо других. Этот механизм также повышает безопасность пользователя вашего приложения, потому что никакое другое приложение не может прочитать сообщение, содержащее токен на устройстве.
В этом руководстве вы узнаете, как использовать эту новую функцию в SMS API Android O. Вы узнаете, как создать SMS-токен специально для вашего приложения и отправить его на устройство. Мы будем использовать эмулятор Android Studio для симуляции этого процесса.
Предпосылки
Чтобы следовать этому руководству, убедитесь, что вы загрузили платформу Android 8.0 (O) SDK на свой компьютер и уже настроили эмулятор для этой версии.
1. Создайте токен для приложения
Для начала я покажу вам, как создать токен для приложения, который уникален для вашего приложения на устройстве пользователя.
Создать новый проект Android Studio
MainActivity
Android Studio и создайте новый проект с пустым действием MainActivity
.
Изменить файл build.gradle
Внесите следующие изменения в сборку модуля приложения . Gradle файл.
1
2
3
|
compileSdkVersion ‘android-O’
minSdkVersion ‘o’
targetSdkVersion ‘o’
|
Изменить класс MainActivity
В приведенном ниже фрагменте кода мы получаем класс SMSManager
и затем вызываем метод createAppSpecificSmsToken()
. Он делает то, что говорит, — создает SMS-токен для приложения. Этот метод требует PendingIntent
который содержит Activity, при получении устройством SMS-сообщения с этим токеном (строка длиной 11 символов).
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.telephony.SmsManager;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = (TextView) findViewById(R.id.tv_token);
SmsManager smsManager = SmsManager.getDefault();
String appSmsToken = smsManager.createAppSpecificSmsToken(createSmsTokenPendingIntent());
textView.setText(appSmsToken);
Log.i(«MainActivity», «sms token » + appSmsToken);
}
private PendingIntent createSmsTokenPendingIntent() {
return PendingIntent.getActivity(this, 1234,
new Intent(this, SmsTokenResultVerificationActivity.class), 0);
}
}
|
Помните, что, как указывалось ранее, сгенерированный токен является уникальным для вашего приложения на устройстве пользователя. Если вы создадите еще один SMS-токен, второй будет действительным, а первый будет игнорироваться.
Выложить экран
Вот MainActivity
макета MainActivity
настроенный для отображения созданного токена SMS:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?xml version=»1.0″ encoding=»utf-8″?>
<LinearLayout
xmlns:android=»https://schemas.android.com/apk/res/android»
xmlns:tools=»http://schemas.android.com/tools»
android:layout_width=»match_parent»
android:layout_height=»match_parent»
tools:context=»com.chikeandroid.tutsplusandroidosmstoken.MainActivity»
android:orientation=»vertical»
android:gravity=»center_horizontal|center_vertical»>
<TextView
android:text=»APP SMS TOKEN GENERATED»
android:layout_width=»wrap_content»
android:layout_height=»wrap_content»
android:textColor=»@android:color/black»/>
<TextView
android:id=»@+id/tv_token»
android:layout_marginTop=»12dp»
android:layout_width=»wrap_content»
android:layout_height=»wrap_content»
android:textAppearance=»?android:textAppearanceLarge»
android:textColor=»@android:color/holo_red_dark»/>
</LinearLayout>
|
Запустив приложение в этот момент, вы увидите сгенерированный токен SMS.
2. Получить смс-токен
Далее мы создадим действие, которое будет запущено, когда наше устройство получит сообщение, содержащее токен SMS. Ничего специфического для SMS-токенов здесь не происходит.
01
02
03
04
05
06
07
08
09
10
11
|
import android.app.Activity;
import android.os.Bundle;
public class SmsTokenResultVerificationActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms_token_result);
}
}
|
Выложить экран
Здесь мы создаем макет для действия, которое мы создали выше, который содержит только один TextView
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
<?xml version=»1.0″ encoding=»utf-8″?>
<LinearLayout xmlns:android=»http://schemas.android.com/apk/res/android»
android:orientation=»vertical»
android:layout_width=»match_parent»
android:layout_height=»match_parent»
android:gravity=»center_horizontal|center_vertical»>
<TextView
android:layout_width=»wrap_content»
android:layout_height=»wrap_content»
android:text=»Token Result Activity»
android:textColor=»@android:color/holo_purple»
android:textAppearance=»?android:textAppearanceLarge» />
</LinearLayout>
|
Далее мы протестируем эту функциональность с помощью эмулятора Android Studio.
3. Проверьте SMS-токен
Настройте эмулятор для отправки SMS-сообщений
Вы можете использовать свой эмулятор для имитации получения SMS-сообщения, но вам нужно будет немного настроить. Откройте эмулятор, нажмите последнюю кнопку на правой панели навигации, чтобы открыть расширенное диалоговое окно управления, а затем выберите кнопку управления телефоном.
С помощью этого интерфейса вы можете смоделировать ваше устройство, получающее телефонный звонок или SMS с другого телефона.
Отправить токен
Убедитесь, что вы настроили свой эмулятор для Android 8.0 (O). Создайте токен и введите текстовое сообщение, которое содержит его. Затем нажмите кнопку « Отправить сообщение» .
Наконец, действие, которое мы указали в ожидаемом намерении, запускается немедленно! Попробуйте отправить сообщение еще раз и убедитесь, что на этот раз оно отобразится в клиенте SMS устройства, поскольку оно больше не является действующим токеном.
Использование сервера
Для производственного приложения SMS-токен обычно отправляется внутренним сервером. Поэтому при использовании сервера клиент (ваше приложение) должен сделать запрос к серверу, включая сгенерированный токен приложения и номер телефона. Ваш сервер получит этот запрос и отправит немодифицированный токен обратно в виде текстового сообщения на телефон пользователя. Ваше приложение получит этот токен и запустит компонент, зарегистрированный в ожидающем намерении. Затем этот компонент может сообщить серверу, что проверка номера телефона или аутентификация пользователя прошла успешно.
Вывод
В этом руководстве вы узнали о потрясающей функции SMS-токена, представленной в Android O: что это такое, ее преимущества и как использовать ее в приложении для Android.
Чтобы узнать больше об Android SMS и API-интерфейсах для телефонов, в том числе о том, как совершать звонки из вашего приложения, ознакомьтесь с соответствующим учебным пособием Envato Tuts + здесь.
И ознакомьтесь с некоторыми другими нашими курсами и учебными пособиями по разработке приложений для Android!