Статьи

Android O: проверка номера телефона с помощью SMS-токенов

В этом руководстве вы узнаете о новой замечательной функции SMS-токена в Android O. Вы узнаете, как сгенерировать токен для конкретного приложения, который будет запускать ожидающее намерение, когда устройство впервые получает сообщение, содержащее этот токен, таким образом, чтобы проверить номер телефона.

Пожалуйста, обратите внимание, что на момент написания этой статьи API-интерфейсы Android O все еще находятся на третьем предварительном просмотре для разработчиков, хотя и являются окончательными. (Мы до сих пор не знаем, что означает O!)

SMS-токен или одноразовый пароль — это механизм безопасности, используемый для аутентификации или проверки пользователя. Пользователь вводит свой номер телефона, и специально для этого пользователя создается токен ограниченной продолжительности жизни. Затем пользователь получает токен в виде SMS на свой телефон. В случае Android O на момент написания этой статьи токен конкретного приложения не истекает, а становится недействительным при создании другого.

Одна из основных причин, по которой вы можете рассмотреть возможность использования механизма SMS-токенов Android O, заключается в том, что он улучшает взаимодействие с пользователем приложения. Пользователю не нужно копировать и вставлять токен из SMS-клиента для проверки. Вместо этого устройство Android автоматически обнаруживает токен, отправленный на устройство пользователя, а затем запускает компонент приложения в намерении, связанном с вашим приложением (мы вскоре к этому вернемся).

Более того, эта функция не требует разрешения READ_SMS или каких-либо других. Этот механизм также повышает безопасность пользователя вашего приложения, потому что никакое другое приложение не может прочитать сообщение, содержащее токен на устройстве.

В этом руководстве вы узнаете, как использовать эту новую функцию в SMS API Android O. Вы узнаете, как создать SMS-токен специально для вашего приложения и отправить его на устройство. Мы будем использовать эмулятор Android Studio для симуляции этого процесса.

Чтобы следовать этому руководству, убедитесь, что вы загрузили платформу Android 8.0 (O) SDK на свой компьютер и уже настроили эмулятор для этой версии.

Для начала я покажу вам, как создать токен для приложения, который уникален для вашего приложения на устройстве пользователя.

MainActivity Android Studio и создайте новый проект с пустым действием MainActivity .

Внесите следующие изменения в сборку модуля приложения . Gradle файл.

1
2
3
compileSdkVersion ‘android-O’
minSdkVersion ‘o’
targetSdkVersion ‘o’

В приведенном ниже фрагменте кода мы получаем класс 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.

Запуск приложения на данный момент

Далее мы создадим действие, которое будет запущено, когда наше устройство получит сообщение, содержащее токен 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.

Вы можете использовать свой эмулятор для имитации получения SMS-сообщения, но вам нужно будет немного настроить. Откройте эмулятор, нажмите последнюю кнопку на правой панели навигации, чтобы открыть расширенное диалоговое окно управления, а затем выберите кнопку управления телефоном.

Показывает, как использовать эмулятор для симуляции отправки SMS-сообщения

С помощью этого интерфейса вы можете смоделировать ваше устройство, получающее телефонный звонок или SMS с другого телефона.

Убедитесь, что вы настроили свой эмулятор для Android 8.0 (O). Создайте токен и введите текстовое сообщение, которое содержит его. Затем нажмите кнопку « Отправить сообщение» .

Отправка сообщения с помощью эмулятора

Наконец, действие, которое мы указали в ожидаемом намерении, запускается немедленно! Попробуйте отправить сообщение еще раз и убедитесь, что на этот раз оно отобразится в клиенте SMS устройства, поскольку оно больше не является действующим токеном.

Результат действия токена

Для производственного приложения SMS-токен обычно отправляется внутренним сервером. Поэтому при использовании сервера клиент (ваше приложение) должен сделать запрос к серверу, включая сгенерированный токен приложения и номер телефона. Ваш сервер получит этот запрос и отправит немодифицированный токен обратно в виде текстового сообщения на телефон пользователя. Ваше приложение получит этот токен и запустит компонент, зарегистрированный в ожидающем намерении. Затем этот компонент может сообщить серверу, что проверка номера телефона или аутентификация пользователя прошла успешно.

В этом руководстве вы узнали о потрясающей функции SMS-токена, представленной в Android O: что это такое, ее преимущества и как использовать ее в приложении для Android.

Чтобы узнать больше об Android SMS и API-интерфейсах для телефонов, в том числе о том, как совершать звонки из вашего приложения, ознакомьтесь с соответствующим учебным пособием Envato Tuts + здесь.

  • Android SDK
    Как звонить и использовать SMS в приложениях для Android

И ознакомьтесь с некоторыми другими нашими курсами и учебными пособиями по разработке приложений для Android!

  • Android SDK
    Android O: как использовать каналы уведомлений
  • Android
    Как решить 13 самых распространенных сообщений об ошибках Android
    Джессика Торнсби
  • Android SDK
    Создайте интеллектуальное приложение с Google Cloud Speech и API на естественном языке
    Ашраф Хатхибелагал