SmsRetriever可以在Android模拟器上运行吗?

时间:2018-03-18 23:11:33

标签: android android-emulator sms google-play-services

我正在尝试使用SMS Retriever API as described here实现自动短信验证。

为了初步测试这个我计划使用Android模拟器并使用其GUI界面手动发送短信:

enter image description here

但是,我的BroadcastReceiver回调永远不会被调用:

@Override
public void onReceive(Context context, Intent intent) {
    if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
        Bundle extras = intent.getExtras();
        Status status = (Status) extras.get(SmsRetriever.EXTRA_STATUS);

        switch(status.getStatusCode()) {
            case CommonStatusCodes.SUCCESS:
                // Get SMS message contents
                String message = (String) extras.get(SmsRetriever.EXTRA_SMS_MESSAGE);
                Log.i(TAG, "Got message: " + message);
                // Extract one-time code from the message and complete verification
                // by sending the code back to your server.
                break;
            case CommonStatusCodes.TIMEOUT:
                // Waiting for SMS timed out (5 minutes)
                // Handle the error ...
                break;
        }
    }
 }

SmsRetriever班级是否适用于Android emulator

1 个答案:

答案 0 :(得分:2)

我没有正确计算我的应用程序的哈希字符串:

https://developers.google.com/identity/sms-retriever/verify#computing_your_apps_hash_string

这是一个分为六个步骤的过程:

  1. 将您应用的公钥证书作为小写十六进制字符串。 例如,要从密钥库中获取十六进制字符串,请键入 以下命令:

    keytool -alias MyAndroidKey -exportcert -keystore MyProduction.keystore | xxd -p | tr -d "[:space:]"

  2. 附加十六进制 字符串到您应用的包名称,以单个空格分隔。

  3. 计算组合字符串的SHA-256总和。一定要删除 计算之前字符串中的任何前导或尾随空格 SHA-256总和。

  4. Base64-编码SHA-256总和的二进制值。 您可能需要从其输出格式解码SHA-256总和 第一。
  5. 你的应用程序的哈希字符串是该字符串的前11个字符 base64编码的哈希。
  6. 计算完成后,您必须以<#>开头并以此应用程序哈希字符串结尾向您的设备发送特制的SMS消息;只是任何旧的短信都不会。

    请注意,使用上面keytool提取我的应用程序哈希字符串的命令行步骤从未对我有用;我不得不使用helper class Google provided