我正在尝试使用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验证哈希:”
知道我做错了什么吗?
也许您的消息有错误的构造,请检查此链接:SMS Retriever API。在第一点,您的短信必须以[或]开头。在第4点,您的短信必须是“以标识您的应用的11个字符的哈希字符串结束”
我有同样的问题,点是我的意识,通过在开头添加<#>和最后的哈希字符串来解决。
到目前为止你做了什么是完美的,只是小事在你的活动中添加以下内容,它对我有用...........
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(SmsRetriever.SMS_RETRIEVED_ACTION);
getApplicationContext()。registerReceiver(smsBroadcast,intentFilter);
我做了同样的事情,这对我来说非常有用。您的应用程序哈希很可能是错误的。
我最近遇到了同样的问题。
我发现问题是我在调试模式下使用生产密钥库散列进行测试。
如果您在调试模式下运行,请确保使用用于签署调试apk的默认密钥库。
默认的调试密钥库位置是$HOME/.android/debug.keystore
从IDE运行或调试项目时,Android Studio会自动使用Android SDK工具生成的调试证书对您的应用进行签名。第一次在Android Studio中运行或调试项目时,IDE会自动在$ HOME / .android / debug.keystore中创建调试密钥库和证书,并设置密钥库和密钥密码。
我最近写了一篇关于这个的博客文章,check it out for more details。
在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()
}