2

I am using Facebook AccountKit for OTP verification and it is working absolutely fine.

Requirement: To set OTP code on OTP verification screen automatically by reading incoming SMS.

Looking for: Is there any way that I can set text to OTP verification screen programmatically?

I didn't find any answer while searching for same whether Facebook gives customization on OTP verification screen as they give same on first screen where user can put country code and mobile number.

4

4 回答 4

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: 检查是否授予上述权限。

更新:

正如@markus 建议的那样,请查看短信权限更新

于 2016-12-16T09:22:31.423 回答
0

尝试使用运行时权限

只需添加依赖项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" />

然后在你的Activity中调用这个方法:

  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();
                }
            });
于 2018-10-17T12:08:59.700 回答
0
AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
                new AccountKitConfiguration.AccountKitConfigurationBuilder(LoginType.PHONE
                        , AccountKitActivity.ResponseType.TOKEN);

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

然后在manifyt.xml中你应该添加

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

那么对于运行 android M 或更高版本的设备,您应该在运行时请求这些权限:您只需要请求android.permission.RECEIVE_SMS

于 2018-10-05T21:50:08.963 回答
0

将这两行添加到清单标记中的 Android Manifest.xml 文件中:

<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;

定义一个名为 getSmsPermission(){} 的新私有 void 方法

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

于 2019-01-30T20:42:39.477 回答