Как повторно отправить проверку SMS в Firebase Phone Authentication Android?
Согласно документации Firebase (https://firebase.google.com/docs/auth/android/phone-auth#send-a-verification-code-to-the-users-phone), существует callback
для обработки аутентификации по номеру телефона.
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
можно использовать для принудительной повторной отправки кода подтверждения SMS. Однако, после некоторого исследования документа, я все еще не знаю, как.
Я хотел бы спросить, как использовать этот token
для повторной отправки SMS-подтверждения?
Ответы
Ответ 1
Источник: 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
}
Ответ 2
Вы можете использовать метод Firebase для повторной отправки кода проверки, например, PERSISTENCE и перехвата кода SMS для автоматической регистрации, например, во время запуска диалогового окна прогресса, и прозрачного для пользователя, который просто
// [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,
token); // resending with token got at previous call 'callbacks' method 'onCodeSent'
// [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);
}
};
}