gpt4 book ai didi

android - 为什么 SMS Retriever API 在 Release模式下不起作用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:24 28 4
gpt4 key购买 nike

我已经像谷歌教程中那样实现了 SMS Retriever API,并且在我的调试 Build Variant 中工作正常。我可以阅读短信并获取用户可以登录的代码。

我的问题是,当我在版本 Build Variant 中运行应用程序时,短信不起作用。我收到了短信,但我无法读取登录代码。

我更改了用 AppSignatureHelper 生成的哈希值在与 Debug模式不同的 Release模式下。在调试工作和版本号中。

一些帮助将不胜感激

代码:

list :

   <receiver android:name=".app.receivers.SmsReceiver">
<intent-filter>
<action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
</intent-filter>
</receiver>

在我的类(class)中:(在发布和 Debug模式下,代码会抛出 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);
}
}
});
}

最佳答案

首先下载您的应用程序签名证书.der 文件,然后通过此命令转换为.jks 文件

keytool -import -alias your_alias -keystore file_name_created -file certificate.der

然后创建了新的 .jks 文件

然后使用此命令为您的发布生成哈希

keytool -exportcert -alias your_alias -keystore certificate.jks | xxd -p | tr -d "[:space:]" | echo -n  app_package_name `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11

然后创建哈希字符串,它将在 Play 商店应用程序上运行。

关于android - 为什么 SMS Retriever API 在 Release模式下不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53865978/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com