Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 广播接收器未从Google SMS retriever API接收SMS_Android_Broadcastreceiver_Sms - Fatal编程技术网

Android 广播接收器未从Google SMS retriever API接收SMS

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

我正在尝试从谷歌短信检索器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.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.myapp
cat
| 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
        // ...
    }
}