如何在Firebase电话身份验证Android中重新发送SMS验证?

问题描述:

根据Firebase文档(https://firebase.google.com/docs/auth/android/phone-auth#send-a-verification-code-to-the-users-phone),有callback用于处理电话号码身份验证。如何在Firebase电话身份验证Android中重新发送SMS验证?

mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { 

    @Override 
    public void onVerificationCompleted(PhoneAuthCredential credential) { 

     Log.d(TAG, "onVerificationCompleted:" + credential); 
     signInWithPhoneAuthCredential(credential); 
    } 

    @Override 
    public void onVerificationFailed(FirebaseException e) { 

     Log.w(TAG, "onVerificationFailed", e); 
    } 

    @Override 
    public void onCodeSent(String verificationId, 
          PhoneAuthProvider.ForceResendingToken token) { 

     Log.d(TAG, "onCodeSent:" + verificationId); 

     // Save verification ID and resending token so we can use them later 
     mVerificationId = verificationId; 
     mResendToken = token; 
    } 
}; 

我的问题是在onCodeSent方法。它对这里的文档说(https://firebase.google.com/docs/reference/android/com/google/firebase/auth/PhoneAuthProvider.ForceResendingToken

表示token可以用来强制重发一个短信验证码。但是,在对文档进行一些研究之后,我仍然不知道如何。

我想问一下如何用这个token来重新发送短信验证?

+0

当然感谢。 :) –

来源:Github

这是用于重新发送SMS考证的方法。

private void resendVerificationCode(String phoneNumber, 
            PhoneAuthProvider.ForceResendingToken token) { 
    PhoneAuthProvider.getInstance().verifyPhoneNumber(
      phoneNumber,  // Phone number to verify 
      60,     // Timeout duration 
      TimeUnit.SECONDS, // Unit of timeout 
      this,    // Activity (for callback binding) 
      mCallbacks,   // OnVerificationStateChangedCallbacks 
      token);    // ForceResendingToken from callbacks 
} 

可以使用火力地堡的方法重新发送验证码的说,持久性和拦截短信代码来自动检查,例如同时运行一个进程对话框,并且对用户透明,只要其

// [START resend_verification] 
public void resendVerificationCode(String phoneNumber, 
            PhoneAuthProvider.ForceResendingToken token) { 
    PhoneAuthProvider.getInstance().verifyPhoneNumber(
      phoneNumber,  // Phone number to verify 
      60,     // Timeout duration 
      TimeUnit.SECONDS, // Unit of timeout 
      activity,   //a reference to an activity if this method is in a custom service 
      mCallbacks);  // resending 
    // [END start_phone_auth] 
} 

检查与广播接收短信的片段,帮助

private BroadcastReceiver smsBroadcastReceiver; 
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); 
public static final String SMS_BUNDLE = "pdus"; 

@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    smsBroadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.e("smsBroadcastReceiver", "onReceive"); 
      Bundle pudsBundle = intent.getExtras(); 
      Object[] pdus = (Object[]) pudsBundle.get(SMS_BUNDLE); 
      SmsMessage messages = SmsMessage.createFromPdu((byte[]) pdus[0]); 
      Log.i(TAG, messages.getMessageBody()); 

      firebaseVerificationCode = messages.getMessageBody().trim().split(" ")[0];//only a number code 
      Toast.makeText(getContext(), firebaseVerificationCode,Toast.LENGTH_SHORT).show(); 
      String token = firebaseAutenticationService.getVerificationCode();//your service 
     firebaseAutenticationService.verifyPhoneNumberWithCode(token,verificationCode); 
     } 
    }; 
}