我不知道这个问题是否重复,但这两天我尝试了一些解决方案,但没有白费。
我的问题是关于通过用户的电话号码登录。
这是过程
像任何应用程序一样,我有一个用户界面,用户可以在按下登录按钮后输入他的有效电话号码,SMS OTP 代码将被接收。
一旦用户收到 OTP 代码(从 SmsrReceiver.java 读取代码),其他意图就会自动打开以验证该代码(自动填充)。
所有这些步骤都运行良好,但在 Play 商店发布后,此过程无法按预期工作。
问题是;在收到 SMS OTP 代码后,验证代码的第二个意图没有打开,我检查了我的源代码,我发现 onVerificationCompleted 没有被触发来执行 SmsReceiver 类。
这是 create 方法的回调:
callbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {
System.out.println("onVerificationCompleted called");
authenicationUser(phoneAuthCredential);
}
@Override
public void onVerificationFailed(@NonNull FirebaseException e) {
progressBar.setVisibility(View.GONE);
loginbutton.setVisibility(View.VISIBLE);
System.out.println("onVerificationFailed called");
Toast toast = Toast.makeText(LoginActivity.this, "Authentication failed - "+e.getMessage(), Toast.LENGTH_LONG);
toast.getView().setBackgroundColor(Color.parseColor("#565656"));
toast.show();
}
@Override
public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
super.onCodeSent(s, forceResendingToken);
verificaionId = s;
authToken = forceResendingToken;
System.out.println("onCodeSent called");
}
@Override
public void onCodeAutoRetrievalTimeOut(@NonNull String s) {
super.onCodeAutoRetrievalTimeOut(s);
progressBar.setVisibility(View.GONE);
login.setVisibility(View.VISIBLE);
Toast toast = Toast.makeText(LoginActivity.this, "Authentication failed", Toast.LENGTH_LONG);
toast.getView().setBackgroundColor(Color.parseColor("#565656"));
toast.show();
System.out.println("onCodeAutoRetrievalTimeOut called");
}
};
implementation 'com.google.android.gms:play-services-auth:20.1.0'
implementation "com.google.android.gms:play-services-auth-api-phone:18.0.1"
implementation 'com.google.firebase:firebase-auth'
implementation 'com.google.firebase:firebase-bom:29.0.4'
输出:
onCodeSent 调用。
onReceive 调用 getStatusCode() = 15 <--- 在进入开关之前在 SmsrReceiver.java 中打印
onReceive TIMEOUT <--- 在 SmsrReceiver.java 中打印并进入切换到 CommonStatusCodes.TIMEOUT 的情况。
笔记
在我将它发布到游戏商店之前,发送的短信是这样的:284017 是您的验证码。BGkoAnpR3Rs
现在发送的短信是这样的: 601358 是您对 myAppName 的验证码
我不知道这 11 个哈希码是否会导致这个问题。
如果您有任何误解,请告诉我