【发布时间】:2019-05-20 19:34:56
【问题描述】:
我已经实现了SMS Retriever API,就像在 google 教程中一样,并且在我的调试 Build Variant 中工作正常。我可以阅读短信并将代码发送给用户可以登录。
我的问题是,当我在 release Build Variant 中运行应用程序时,短信无法正常工作。我收到了短信,但我无法读取登录代码。
我在发布模式下更改了AppSignatureHelper 生成的哈希,这与调试模式不同。在调试工作和发布号中。
一些帮助将不胜感激
代码:
清单:
<receiver android:name=".app.receivers.SmsReceiver">
<intent-filter>
<action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
</intent-filter>
</receiver>
在我的课堂上:(在发布和调试模式下,代码会抛出 onSucess 方法)该方法在 onCreate 中调用。
private void startSMSListening(){
SmsRetrieverClient client = SmsRetriever.getClient(this);
Task<Void> task = client.startSmsRetriever();
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Successfully started retriever, expect broadcast intent
Log.e("startSMSListening", "listening sms");
sendCode();
showHideLoadingView(false);
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Failed to start retriever, inspect Exception for more details
Log.e("startSMSListening", "failure listening sms");
showHideLoadingView(false);
}
});
}
我的接收者:
public class SmsReceiver extends BroadcastReceiver {
//interface
private static SmsListener mListener;
@Override
public void onReceive(Context context, Intent intent) {
if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
Bundle extras = intent.getExtras();
if(extras != null) {
Status status = (Status) extras.get(SmsRetriever.EXTRA_STATUS);
if(status != null) {
switch (status.getStatusCode()) {
case CommonStatusCodes.SUCCESS:
// Get SMS message contents
String message = (String) extras.get(SmsRetriever.EXTRA_SMS_MESSAGE);
//Pass the message text to interface
if (mListener != null && !StringUtil.isNull(message)) {
mListener.messageReceived(message);
}
break;
case CommonStatusCodes.TIMEOUT:
Log.d("SMSReceiver", "timed out (5 minutes)");
break;
}
}
}
}
}
public static void bindListener(SmsListener listener) {
mListener = listener;
}
}
我的 smsReceiver 方法:
private void smsReceiver(){
SmsReceiver.bindListener(new SmsListener() {
@Override
public void messageReceived(String messageText) {
//From the received text string you may do string operations to get the required OTP
//It depends on your SMS format
Log.e("Message",messageText);
// If your OTP is six digits number, you may use the below code
Pattern pattern = Pattern.compile(OTP_REGEX);
Matcher matcher = pattern.matcher(messageText);
String otp = null;
while (matcher.find()) {
otp = matcher.group();
}
if(otp != null && et_code != null) {
et_code.setText(otp);
}
}
});
}
【问题讨论】:
-
确保您使用了正确的别名和密钥库文件,用于签署您的 apk。
-
我已经在发布模式下测试了我的应用,它运行良好。
-
@taranjeetsapra 我的应用程序仅在调试模式下工作。一旦签署了 APK,则不会检测到消息。我也成功创建了哈希。
-
嘿,你找到解决办法了吗?我也面临同样的问题。
-
是的,问题出在后面,短信的语法正确
标签: android android-intent android-broadcast android-broadcastreceiver android-sms