我正在尝试使用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分钟后发送超时事件时触发。它永远不会触发短信。
最后,我在清单中注册了接收者:
<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验证散列:“
知道我做错了什么吗?
发布于 2019-03-06 15:04:21
也许你的消息有错误的结构,请检查此链接:SMS Retriever API。在第一点,您的文本消息必须以<#>或#开头。在第4点,你的文本消息必须是-“以11个字符的散列字符串结束,以识别你的应用程序”
我也有同样的问题,这一点是我的意识,通过在开头添加<#>和在结尾添加散列字符串来解决。
发布于 2019-03-27 18:18:19
在SmsRetrievers addOnSuccessListener回调方法中注册BroadcastReceiver,不要在清单文件中注册。
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()
}发布于 2019-12-17 17:31:08
当我试图让它工作时,我遇到了两个问题:
1)短信需要格式规范。你可能会想‘好的,我知道了’,但在我的例子中,在SMS的第一行和签名散列密钥之间有不止一个换行符。确保严格遵循以下模式:
<#> Your xy verification code is 123456
FA+9qCX9VSu2)确保使用正确的哈希键。安卓不会调用onReceive方法,除非你在短信中的签名散列与正在运行的应用程序中的签名散列匹配。我为什么这么说?您的本地调试版本和存储区中部署的版本将具有不同的哈希。这里要提到的一点是,一旦你将apk上传到谷歌控制台,谷歌就可以接管你的签名部分。
希望这能帮到你。我的两天已经浪费了。
https://stackoverflow.com/questions/53908267
复制相似问题