我正在尝试使用SMS Retriever API as described here实现自动短信验证。
为了初步测试这个我计划使用Android模拟器并使用其GUI界面手动发送短信:
但是,我的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?
答案 0 :(得分:2)
我没有正确计算我的应用程序的哈希字符串:
https://developers.google.com/identity/sms-retriever/verify#computing_your_apps_hash_string
这是一个分为六个步骤的过程:
将您应用的公钥证书作为小写十六进制字符串。 例如,要从密钥库中获取十六进制字符串,请键入 以下命令:
keytool -alias MyAndroidKey -exportcert -keystore MyProduction.keystore | xxd -p | tr -d "[:space:]"
附加十六进制 字符串到您应用的包名称,以单个空格分隔。
计算组合字符串的SHA-256总和。一定要删除 计算之前字符串中的任何前导或尾随空格 SHA-256总和。
计算完成后,您必须以<#>
开头并以此应用程序哈希字符串结尾向您的设备发送特制的SMS消息;只是任何旧的短信都不会。
请注意,使用上面keytool
提取我的应用程序哈希字符串的命令行步骤从未对我有用;我不得不使用helper class Google provided。