Android 广播接收器未从Google SMS retriever API接收SMS
我正在尝试从谷歌短信检索器API自动获取OTP,但我的广播接收器中没有任何OTP。详情如下: build.gradle:Android 广播接收器未从Google SMS retriever API接收SMS,android,broadcastreceiver,sms,Android,Broadcastreceiver,Sms,我正在尝试从谷歌短信检索器API自动获取OTP,但我的广播接收器中没有任何OTP。详情如下: build.gradle: implementation "com.google.android.gms:play-services-auth-api-phone:17.3.0" implementation 'com.google.android.gms:play-services-auth:17.0.0' implementation 'com.google.android.gm
implementation "com.google.android.gms:play-services-auth-api-phone:17.3.0"
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-gcm:17.0.0'
implementation 'com.google.android.gms:play-services-base:17.0.0'
清单文件:
<receiver android:name=".reciver.MySMSBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
</intent-filter>
</receiver>
以下是启动的方法:
private fun startSMSRetrievingProcess(){
val client = SmsRetriever.getClient(this)
val task = client.startSmsRetriever()
task.addOnSuccessListener {
Log.e(TAG,"SMS received")
// Successfully started retriever, expect broadcast intent
// ...
}
task.addOnFailureListener {
Log.e(TAG,"SMS received failure")
// Failed to start retriever, inspect Exception for more details
// ...
}
}
OTP格式:123456是您申请的OTP。
我正在打印task.addOnSuccessListener内的日志,但未在广播接收器内。请帮帮我。
我正在牛轧糖上尝试此程序,但希望兼容所有版本。根据,SMS必须包含应用程序的哈希,该哈希由应用程序的包名和用于签名的公共证书生成。描述了哈希生成,该站点的摘要:
以下命令从应用程序的生产密钥库计算哈希字符串:
keytool-exportcert-alias PlayDeploymentCert-keystore MyProductionKeys.keystore | xxd-p | tr-d“[:space:”| echo-n com.example.myappcat
| sha256sum | tr-d“[:space:”| xxd-r-p | base64 | cut-c1-11
因此,SMS消息应该是这样的:123456是应用程序FA+9qCX9VSu的OTP但是如何告诉服务器我的应用程序哈希代码?服务器端应该知道该应用程序。他们可能将其存储(甚至硬编码)在数据库中的某个位置。根据您的应用程序与服务器的通信方式,它可以在执行此OTP操作之前将其哈希发送到服务器。
val mSmsBroadcastReceiver = MySMSBroadcastReceiver()
val intentFilter = IntentFilter()
intentFilter.addAction(SmsRetriever.SMS_RETRIEVED_ACTION)
applicationContext.registerReceiver(mSmsBroadcastReceiver, intentFilter)
private fun startSMSRetrievingProcess(){
val client = SmsRetriever.getClient(this)
val task = client.startSmsRetriever()
task.addOnSuccessListener {
Log.e(TAG,"SMS received")
// Successfully started retriever, expect broadcast intent
// ...
}
task.addOnFailureListener {
Log.e(TAG,"SMS received failure")
// Failed to start retriever, inspect Exception for more details
// ...
}
}