Google SMS检索API不检索SMS消息

sad*_*rid 4 sms android kotlin

我正在尝试使用Google的SMS检索器API进行自动SMS验证。我已按照此处的指示进行操作但我的应用未收到任何短信。这是我所做的:

我在活动中添加了代码以启动SMS检索器客户端:

    val client = SmsRetriever.getClient(this)
    val retriever = client.startSmsRetriever()
    retriever.addOnSuccessListener {
        Log.i("loginActivity", "started smsretriever")
    }

    retriever.addOnFailureListener {
        //Problem to start listener
    }
Run Code Online (Sandbox Code Playgroud)

从日志中,我看到这成功启动。然后,将广播接收器与此onReceive一起添加:

override fun onReceive(context: Context, intent: Intent) {
    if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
        val extras = intent.extras
        val status = extras.get(SmsRetriever.EXTRA_STATUS) as Status

        when (status.statusCode) {
            CommonStatusCodes.SUCCESS -> {

            }
            CommonStatusCodes.TIMEOUT -> {

            }
    }
}
Run Code Online (Sandbox Code Playgroud)

仅在SMS检索器客户端启动后5分钟发送超时事件时才触发。它永远不会触发SMS消息。

最后,我已经在清单中注册了接收器:

<receiver android:name=".receiver.SMSReceiver" android:exported="true">
        <intent-filter>
            <action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
        </intent-filter>
    </receiver>
Run Code Online (Sandbox Code Playgroud)

就文本消息而言,我正在向自己发送此SMS消息:“ <#>您的代码是:123456验证哈希:”

知道我在做什么错吗?

dee*_*raj 7

在SmsRetrievers addOnSuccessListener回调方法中注册BroadcastReceiver ,不要在Manifest文件中注册。

val client = SmsRetriever.getClient(this)
        val retriever = client.startSmsRetriever()
        retriever.addOnSuccessListener {
            val listener = object : SMSBroadcastReceiver.Listener {
                override fun onSMSReceived(otp: String) {
                    Log.d("AppSignatureHelper",otp)
                    Toast.makeText(context, otp, Toast.LENGTH_SHORT).show()
                }

                override fun onTimeOut() {
                    Log.d("AppSignatureHelper","Timed Out.")
                }
            }
            smsBroadcastReceiver.injectListener(listener)
            registerReceiver(smsBroadcastReceiver, IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION))
        }
        retriever.addOnFailureListener {
            Log.d("AppSignatureHelper","Problem to start listener")
            //Problem to start listener
        }
Run Code Online (Sandbox Code Playgroud)

监听器接口是。

 interface Listener {
        fun onSMSReceived(otp: String)
        fun onTimeOut()
    }
Run Code Online (Sandbox Code Playgroud)


Kur*_*tyo 5

也许您的消息的结构错误,请检查此链接:SMS Retriever API。首先,您的短信必须以<#>或[#]开头。在第4点,您的短信必须为-“以11个字符的哈希字符串结尾,以标识您的应用”

我有同样的问题,这就是我的意识,可以通过在开头添加<#>并在末尾添加哈希字符串来解决。


小智 -1

到目前为止你所做的一切都是完美的,只是在你的活动中添加以下小事,它对我有用......

IntentFilterintentFilter = new IntentFilter();

intentFilter.addAction(SmsRetriever.SMS_RETRIEVED_ACTION);

getApplicationContext().registerReceiver(smsBroadcast,intentFilter);