Google SMS Retriever API无法检索SMS消息

问题描述 投票:2回答:5

我正在尝试使用Google的SMS Retriever API进行自动短信验证。我按照指示here但我的应用程序没有收到任何短信。这就是我所做的:

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

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

    retriever.addOnFailureListener {
        //Problem to start listener
    }

从日志中,我看到这成功启动。然后我用这个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 -> {

            }
    }
}

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

最后,我在Manifest中注册了接收器:

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

在短信方面,我发给自己这条短信:“<#>你的代码是:123456验证哈希:”

知道我做错了什么吗?

android kotlin sms
5个回答
4
投票

也许您的消息有错误的构造,请检查此链接:SMS Retriever API。在第一点,您的短信必须以[或]开头。在第4点,您的短信必须是“以标识您的应用的11个字符的哈希字符串结束”

我有同样的问题,点是我的意识,通过在开头添加<#>和最后的哈希字符串来解决。


0
投票

到目前为止你做了什么是完美的,只是小事在你的活动中添加以下内容,它对我有用...........

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction(SmsRetriever.SMS_RETRIEVED_ACTION);

getApplicationContext()。registerReceiver(smsBroadcast,intentFilter);


0
投票

我做了同样的事情,这对我来说非常有用。您的应用程序哈希很可能是错误的。


0
投票

我最近遇到了同样的问题。

我发现问题是我在调试模式下使用生产密钥库散列进行测试。

如果您在调试模式下运行,请确保使用用于签署调试apk的默认密钥库。

默认的调试密钥库位置是$HOME/.android/debug.keystore

根据app-sign documentation

从IDE运行或调试项目时,Android Studio会自动使用Android SDK工具生成的调试证书对您的应用进行签名。第一次在Android Studio中运行或调试项目时,IDE会自动在$ HOME / .android / debug.keystore中创建调试密钥库和证书,并设置密钥库和密钥密码。

我最近写了一篇关于这个的博客文章,check it out for more details


0
投票

在SmsRetrievers中注册BroadcastReceiver addOnSuccessListener回调方法,不要在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
        }

监听器接口是。

 interface Listener {
        fun onSMSReceived(otp: String)
        fun onTimeOut()
    }
© www.soinside.com 2019 - 2024. All rights reserved.