2017-06-22 255 views
1

根據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

當然感謝。 :) –

回答

6

來源: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 
} 
0

可以使用火力地堡的方法重新發送驗證碼的說,持久性和攔截短信代碼來自動檢查,例如同時運行一個進程對話框,並且對用戶透明,只要其

// [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); 
     } 
    }; 
}