Комплект учетной записи 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