Android SMS Verification API 结果码始终为 0

Posted

技术标签:

【中文标题】Android SMS Verification API 结果码始终为 0【英文标题】:Android SMS Verification API result code is always 0 【发布时间】:2020-10-17 20:58:49 【问题描述】:

我在同一个项目的活动和片段上实现了 android SMS 验证 API,并且运行良好。我的问题是标签中的片段。无论我做什么,当按下“允许”时,onActivityResult 总是返回结果代码 0。这是我的大量代码,它们也被实现和测试以处理活动和片段。

override fun onStart() 
    super.onStart()
    registerToSmsBroadcastReceiver()


override fun onStop() 
    myActivity.unregisterReceiver(smsBroadcastReceiver)
    super.onStop()


private fun startSmsUserConsent() 
    SmsRetriever.getClient(myActivity).also 
        it.startSmsUserConsent(null)
                .addOnSuccessListener 
                    Log.d("LISTENING", "SUCCESS")
                
                .addOnFailureListener 
                    Log.d("LISTENING", "FAIL")
                
    


private fun registerToSmsBroadcastReceiver() 
    smsBroadcastReceiver = SmsBroadcastReceiver().also 
        it.smsBroadcastReceiverListener =
                object : SmsBroadcastReceiver.SmsBroadcastReceiverListener 
                    override fun onSuccess(intent: Intent?) 
                        intent?.let  context -> startActivityForResult(context, REQ_USER_CONSENT) 
                    

                    override fun onFailure() 
                    
                
    

    val intentFilter = IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION)
    myActivity.registerReceiver(smsBroadcastReceiver, intentFilter)


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) 
    super.onActivityResult(requestCode, resultCode, data)
    when (requestCode) 
        REQ_USER_CONSENT -> 
            if ((resultCode == Activity.RESULT_OK) && (data != null)) 
                val message = data.getStringExtra(SmsRetriever.EXTRA_SMS_MESSAGE)
                val code = message?.let  fetchVerificationCode(it) 
                otpField.setText(code)
            
        
    


private fun fetchVerificationCode(message: String): String 
    return Regex("(\\d6)").find(message)?.value ?: ""

哦,每当我调用 API 发送 OTP 时,都会调用 startSmsUserConsent()。我错过了什么?

谢谢。

【问题讨论】:

【参考方案1】:

我通过在活动而不是片段上处理 OTP SMS 检索解决了这个问题,然后在需要时传递片段。

【讨论】:

以上是关于Android SMS Verification API 结果码始终为 0的主要内容,如果未能解决你的问题,请参考以下文章

Android - 查询 SMS ContentProvider?

Android 短信内容 (content://sms/sent)

xml 示例如何使用Unity3D和SMS Manager在Android中发送SMS。 (无需打开SMS Composer)

在 Android 中发送和接收 SMS 和 MMS(Kit Kat Android 4.4 之前)

使用 SMS Retriever API Android 的 OTP/SMS 自动获取问题

在 Android 4.4.2 上更改 SMS 应用默认值