Ali*_*min 5 android firebase firebase-authentication
我正在处理firebase电话身份验证,在我的电话号码上收到代码后,代码跳转到verifysignincode()方法,但无法创建phoneAuthCredentials. 程序捕获的例外是“不能在没有、、临时证明或注册 ID 的PhoneAuthCredential情况下创建”。verificationProofsessionInfo
这是我的发送代码方法:
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
);}
Run Code Online (Sandbox Code Playgroud)
这是我的验证登录方法:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我使用电话凭据登录的方法:
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());
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
错误:
无法在没有 verifyProof、sessionInfo、临时证明或注册 ID 的情况下创建 PhoneAuthCredential。
小智 3
问题:这让我很恼火,经过研究,我发现这种情况的发生是由于手机内存不足或网络连接较低造成的。当您使用验证ID(即log.d(TAG,verificationId))维护日志时,它会在verificationId中显示null,并且根据错误,它说无法在没有验证证明的情况下创建PhoneAuthCredential,并且verificationId是我们的验证证明。
解决方案:
- 清除手机缓存并再次尝试签名。转到应用程序信息并清除缓存。
- 恢复实例状态
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);
}
Run Code Online (Sandbox Code Playgroud)
发生的情况是,verificationId 存储在本地,有时会由于内存不足而丢失。因此,为了解决这种情况,我们必须恢复实例状态,这不会让verificationId丢失。
| 归档时间: |
|
| 查看次数: |
5125 次 |
| 最近记录: |