0

我不知道这个问题是否重复,但这两天我尝试了一些解决方案,但没有白费。

我的问题是关于通过用户的电话号码登录。

这是过程

像任何应用程序一样,我有一个用户界面,用户可以在按下登录按钮后输入他的有效电话号码,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 个哈希码是否会导致这个问题。

如果您有任何误解,请告诉我

4

0 回答 0