Комплект учетной записи Facebook - автоматическая вставка OTP-кода в экранный интерфейс OTP, Android

Я использую Facebook AccountKit для проверки OTP, и он работает абсолютно нормально.

Требование: автоматически установить код OTP на экране проверки OTP, прочитав входящее SMS.

Ищите: есть ли способ, которым я могу программно установить текст для экрана проверки OTP?

Я не нашел никакого ответа при поиске того же, дает ли Facebook настройку на экране проверки OTP, поскольку они дают то же самое на первом экране, где пользователь может ввести код страны и номер мобильного телефона.

3 ответа

Facebook обеспечивает два boolean для автоматического чтения OTP-сообщения.

AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
                new AccountKitConfiguration.AccountKitConfigurationBuilder(LoginType.PHONE
                        , AccountKitActivity.ResponseType.TOKEN);

 // Add these code
 configurationBuilder.setReadPhoneStateEnabled(true);
 configurationBuilder.setReceiveSMS(true);

Вам также нужно добавить эти два разрешения в AndroidManifest.xml файл:

<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

Для API >= 23: проверьте, предоставлены ли вышеуказанные разрешения или нет.

Попробуйте использовать Runtime Permission.

Просто добавьте зависимости в build.gradle

implementation 'com.github.florent37:runtime-permission:(lastest version)'

Затем Вам необходимо добавить эти два разрешения в файл AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

затем вызовите этот метод в yourActivity:

  askPermission(this, Manifest.permission.READ_CONTACTS, Manifest.permission.READ_SMS)
            .ask(new PermissionListener() {

                @Override
                public void onAccepted(RuntimePermission runtimePermission, List<String> accepted) {

                }

                @Override
                public void onDenied(RuntimePermission runtimePermission, List<String> denied, List<String> foreverDenied) {
                    //the list of denied permissions
                    for (String permission : denied) {

                    }
                    //permission denied, but you can ask again, eg:

            /*
            new AlertDialog.Builder(MainActivity.this)
                    .setMessage("Please accept our permissions")
                    .setPositiveButton("yes", (dialog, which) -> { result.askAgain(); })
                    .setNegativeButton("no", (dialog, which) -> { dialog.dismiss(); })
                    .show();
            */

                    //the list of forever denied permissions, user has check 'never ask again'
                    for (String permission : foreverDenied) {

                    }
                    // you need to open setting manually if you really need it
                    //runtimePermission.goToSettings();
                }
            });
AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
                new AccountKitConfiguration.AccountKitConfigurationBuilder(LoginType.PHONE
                        , AccountKitActivity.ResponseType.TOKEN);

 // Add these two lines of code
 configurationBuilder.setReadPhoneStateEnabled(true);
 configurationBuilder.setReceiveSMS(true);

тогда в manifiest.xml вы должны добавить

<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

тогда для устройств под управлением Android M или выше вы должны запросить эти разрешения во время выполнения: вам нужно только запросить android.permission.RECEIVE_SMS

Добавьте эти 2 строки в файл Android Manifest.xml в теге manifest:

<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

Определите новые переменные в вашей MainActivity AppCompatActivity:

private static final String TAG = "MapActivity";
private static final String mREAD_SMS = Manifest.permission.READ_SMS;
private static final String mRECEIVE_SMS = Manifest.permission.RECEIVE_SMS;
private static final int SMS_PERMISSION_REQUEST_CODE = 1234;

Определите новый частный метод void с именем getSmsPermission(){}

private void getSmsPermission(){
    Log.d(TAG, "getSmsPermission: getting sms permissions");
    String[] permissions = {Manifest.permission.READ_SMS,
            Manifest.permission.RECEIVE_SMS};

    if(ContextCompat.checkSelfPermission(this.getApplicationContext(),
            mREAD_SMS) == PackageManager.PERMISSION_GRANTED){
        if(ContextCompat.checkSelfPermission(this.getApplicationContext(),
                mRECEIVE_SMS) == PackageManager.PERMISSION_GRANTED){
            //onActivityResult();
        }else{
            ActivityCompat.requestPermissions(this,
                    permissions,
                    SMS_PERMISSION_REQUEST_CODE);
        }
    }else{
        ActivityCompat.requestPermissions(this,
                permissions,
                SMS_PERMISSION_REQUEST_CODE);
    }
}

вызовите getSmsPermission(); метод в методе с именем startLoginSystem(){} или где вы настроили свой комплект учетных записей.

private void startLoginSystem() {

    Intent intent = new Intent(MainActivity.this,AccountKitActivity.class);
    AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
            new AccountKitConfiguration.AccountKitConfigurationBuilder(LoginType.PHONE,
                    AccountKitActivity.ResponseType.TOKEN);

    intent.putExtra(AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,configurationBuilder.build());
    startActivityForResult(intent,REQUEST_CODE);

    //Asks for Sms Permission
    getSmsPermission();

    configurationBuilder.setReadPhoneStateEnabled(true);
    configurationBuilder.setReceiveSMS(true);
}

Это будет выглядеть так: https://drive.google.com/open?id=120sQ-pc4x1X1termHxkd7IKKRhQVI916

Другие вопросы по тегам