📜  使用 SMS User Consent API 在 Android 中进行 SMS 验证

📅  最后修改于: 2022-05-13 01:58:44.677000             🧑  作者: Mango

使用 SMS User Consent API 在 Android 中进行 SMS 验证

如今,SMS 验证是移动应用程序用于登录目的的最佳方式。您想要尝试做的只是输入您的手机号码,获得一次性奥秘,并最终在您的应用程序中输入该 OTP 并进行验证。但是,这里出现的问题是,要拥有应用程序的 OTP,您需要查看所有消息,此外,您还需要自己输入 OTP。毫无疑问,Github 上有一些库可以为您自动完成代码,但这里我们倾向于使用 SMS User Consent API,这可能会使我们的任务变得非常容易。在本文中,我们将学习我们的 SMS User Consent API,并了解它可能仅用于 SMS 验证。那么,让我们开始吧。

什么是 SMS 客户端同意 API?

SMS 客户端同意 API 用于通过向客户端显示允许获取单个 SMS 消息的内容来恢复 SMS。当客户同意时,应用程序将检查整个消息,然后在想要的 put 中填写 OTP 或 SMS 确认代码。之后是 SMS Client Assent API 的流。在这里,如果客户按下许可按钮,那么短信确认码自然会被填满。

SMS 用户同意 API 的流程

SMS User Consent API 的操作可以分为三个步骤:

  • 第 1 步:开始:要使用 SMS 用户同意 API,您必须首先开始。但是,有一个规定:必须在将消息或 OTP 传递到服务器之前启动 API。
  • 第 2 步:提示:当您启动 API 时,Google Play 服务将读取消息并提示您的用户授权接收包含 OTP 或验证码的消息的权限。用户可以选择接受或拒绝阅读消息的请求。
  • 第三步:最后,如果你的应用有查看消息的权限,它会通过API自动为你输入One Time Code。

消息标准

在使用 SMS User Consent API 之前,您必须满足以下要求:

  1. 包含一个时间代码:您的消息必须包含某种时间代码。
  2. 一次代码的长度应为 4-10 位,其中至少一位为数字。
  3. 联系人:您不应该从您的任何联系人那里收到包含一次性代码的邮件。
  4. 计时:最多 5 分钟,API 将寻找 One Time Code。

在 Android 中,使用 SMS 用户同意 API

我们将按照上面列出的三个步骤使用 SMS User Consent API,但首先,我们将在我们的应用程序中安装该库。将以下行添加到应用级 build.gradle 文件中:

implementation "com.google.android.gms:play-services-auth:LATESST_VER"
implementation "com.google.android.gms:play-services-auth-api-phone:LATEST_VER"
Kotlin
private val SOME_RANDOM_REQUEST = 123
private fun getHint() {
    val solReq = HintRequest.Builder()
        .setPhoneNumberIdentifierSupported(true)
        .build()
    val hinterHint = Credentials.getClient(this)
    val intent = credentialsClient.getHintPickerIntent(hintRequest)
    startIntentSenderForResult(
        intent.intentSender,
        CREDENTIAL_PICKER_REQUEST,
        null, 0, 0, 0
}


Kotlin
val someRandomTask = gfgSMSRetriver.getClient(context).startSmsUserConsent(goerNumber)


Kotlin
// Set to an unused request code
private val GFG_REQUEST = 2  
private val smsVerificationReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
            val extras = intent.extras
            val gfgRetrieverSMS = extras?.get(SmsRetriever.EXTRA_STATUS) as Status
  
            when (gfgRetrieverSMS.statusCode) {
                FamousgfgCodes.SUCCESS -> {
                    val consentIntent = extras.getParcelable(SmsRetriever.EXTRA_CONSENT_INTENT)
                    try {
                        startActivityForResult(consentIntent, GFG_REQUEST)
                    } catch (e: ActivityNotFoundException) {                    }
                }
                FamousgfgCodes.TIMEOUT -> {                }
            }
        }
    }
}
  
override fun onCreate(savedInstanceState: Bundle?) {
    val intentFilter = IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION)
    registerReceiver(smsVerificationReceiver, intentFilter)
}


下一步是收听已经到达的通信。您可以使用 smartSmsUserConsent() 方法开始侦听入站消息。发送短信验证的发件人号码如果知道可以在方法中传入,不知道的可以传NULL。

科特林

val someRandomTask = gfgSMSRetriver.getClient(context).startSmsUserConsent(goerNumber)

至此,我们已经完成了第一阶段,即我们已经启动了 SMS User Consent API,接下来的任务就是发送 SMS 验证码。您可以使用您的验证码发送器将一次性代码从此处发送到用户的电话号码。因此,如果您的 SMS 满足 API 的所有四个消息标准,则会向用户显示提示。因此,您需要一个响应 SMS RECEIVED ACTION 意图的广播接收器来处理这些广播。

科特林

// Set to an unused request code
private val GFG_REQUEST = 2  
private val smsVerificationReceiver = object : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {
        if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
            val extras = intent.extras
            val gfgRetrieverSMS = extras?.get(SmsRetriever.EXTRA_STATUS) as Status
  
            when (gfgRetrieverSMS.statusCode) {
                FamousgfgCodes.SUCCESS -> {
                    val consentIntent = extras.getParcelable(SmsRetriever.EXTRA_CONSENT_INTENT)
                    try {
                        startActivityForResult(consentIntent, GFG_REQUEST)
                    } catch (e: ActivityNotFoundException) {                    }
                }
                FamousgfgCodes.TIMEOUT -> {                }
            }
        }
    }
}
  
override fun onCreate(savedInstanceState: Bundle?) {
    val intentFilter = IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION)
    registerReceiver(smsVerificationReceiver, intentFilter)
}

您还可以选择手动输入短信验证码以获得更好的用户体验,因为如果在另一台设备上收到验证码,用户可以在您的应用中手动输入验证码。

结论

我们在本文中学习了如何在我们的 Android 应用程序中使用 SMS User Consent API。所以,一般来说,有三个步骤:开始、提示和阅读消息。在发送代码之前,我们首先启动 API,然后提示用户授予从消息中读取代码的权限,最后,如果授予权限,API 从您的消息中提取代码,您可以使用它。