firebase 没有verificationProof、sessionInfo、临时证明或注册ID,无法创建PhoneAuthCredential

hts6caw3  于 2023-02-25  发布在  其他
关注(0)|答案(7)|浏览(138)

我正在进行firebase电话身份验证,收到我电话号码上的代码后,代码跳转到verifysignincode()方法,无法创建phoneAuthCredentials。程序捕获的异常是"没有verificationProofsessionInfo、临时证明或注册ID,无法创建PhoneAuthCredential"。
这是我的发送代码方法:

public void send_code(){
    mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
        @Override
        public void onCodeSent(@NonNull String s, @NonNull PhoneAuthProvider.ForceResendingToken forceResendingToken) {
            super.onCodeSent(s, forceResendingToken);
            Log.d("code", "onCodeSent:" + s);
            verificationID=s;
        }
        @Override
        public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {

        }
        @Override
        public void onVerificationFailed(@NonNull FirebaseException e) {
            Toast.makeText(PhoneAuthentication.this, e.getMessage(), Toast.LENGTH_SHORT);
        }
    };
    mPhoneAuthProvider.verifyPhoneNumber(
            user_contact , 60, TimeUnit.SECONDS, PhoneAuthentication.this, mCallbacks
    );}

这是我的验证登录方法:

public void verifySignInCode(String code){
    try {
        PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationID, code);
        signInWithPhoneAuthCredential(credential);
    }catch (Exception e){
        Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();

    }
}

这是我使用电话凭据的登录方法:

private  void signInWithPhoneAuthCredential(PhoneAuthCredential credential){
    mFirebaseAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if(task.isSuccessful()){

                        startActivity(new Intent(PhoneAuthentication.this, UserHome.class));
                    }
                    else {
                        Log.d("error:", task.getException().getMessage());

                    }
                }
            });
}

错误:
没有verificationProof、sessionInfo、临时证明或注册ID,无法创建PhoneAuthCredential。

kuuvgm7e

kuuvgm7e1#

问题:这已经烧了我很长一段时间,经过研究,我知道这是由于手机内存不足或网络连接不足。当您使用验证ID即log. d(TAG,verificationId)维护日志时,它将在verificationId中显示null,根据错误,它说没有验证证明无法创建PhoneAuthCredential,verificationId是我们的验证证明。
解决方案:
1.清除手机缓存,然后重试签名。转到应用信息并清除缓存。
1.还原示例状态

private String verificationId;
private static final String KEY_VERIFICATION_ID = "key_verification_id";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_otp);

    // Restore instance state
    // put this code after starting phone number verification
    if (verificationId == null && savedInstanceState != null) {
        onRestoreInstanceState(savedInstanceState);
    }
}//end of onCreate

@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString(KEY_VERIFICATION_ID,verificationId);
}

@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    verificationId = savedInstanceState.getString(KEY_VERIFICATION_ID);
}

发生的情况是verificationId存储在本地,有时会由于内存不足而丢失。因此,为了解决这种情况,我们必须恢复不会让verificationId丢失的示例状态。

htzpubme

htzpubme2#

Firebase Crashlytics和Play Store发布前测试中也报告了同样的问题,我也在纠结这个问题,但似乎只有当我在Google Play Store上启动应用程序时才会发生,而且它会自动尝试在许多不同的设备上测试应用程序。所以我认为这更多的是测试过程中的问题。这种情况似乎不会发生在任何真实的的用户身上。不过我可能错了。我只是在启动应用程序并通过测试阶段时才注意到这些错误的峰值,其余时间,没有报告此类错误。

nzkunb0c

nzkunb0c3#

将此添加到依赖项

implementation 'androidx.browser:browser:1.2.0'
webghufk

webghufk4#

在我的情况下,一些其他设备工作正常,所以当我创建日志。我得到'verificationId'是空的,没有verificationId或令牌,我们得到这个问题。所以首先我浪费了这么多时间寻找解决方案。我读了完整的官方文档。最后当我改变我的网络从wifi到移动的数据然后它工作。

svujldwt

svujldwt5#

我有同样的问题,一些电话号码和其他号码工作正常。

要解决此问题,请删除应用数据和缓存,然后重新启动手机。

yzxexxkh

yzxexxkh6#

添加你的SHA代码到你的项目中。如果已经完成了,用最近的一个再做一次。它对我很有效。

e0bqpujr

e0bqpujr7#

错误应来自此行(在验证登录方法中):
电话验证凭证凭证=电话验证提供者.getCredential(验证ID,代码);
如果“verificationID”是全局变量,请尝试将其设为静态。

相关问题