web-dev-qa-db-fra.com

Comment renvoyer SMS vérification dans Firebase Phone Authentication Android?

Selon la documentation de Firebase ( https://firebase.google.com/docs/auth/Android/phone-auth#send-a-verification-code-to-the-users-phone ), il existe callback pour gérer l'authentification du numéro de téléphone.

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;
    }
};

Ma question concerne la méthode onCodeSent. C'est écrit ici sur la doc ( https://firebase.google.com/docs/reference/Android/com/google/firebase/auth/PhoneAuthProvider.ForceResendingToken

que token peut être utilisé pour forcer le renvoi d’un code de vérification SMS. Cependant, après quelques recherches sur la doc, je ne sais toujours pas comment.

Je voudrais demander comment utiliser cette token pour renvoyer la vérification SMS?

6
Boonya Kitpitak

Source: Github

C'est la méthode utilisée pour renvoyer les SMS vérifications.

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
}
14
GGWP

vous pouvez utiliser une méthode Firebase pour renvoyer le code de vérification sous la forme PERSISTENCE par exemple et intercepter le code sms pour l'archivage automatique, par exemple lors de l'exécution d'une boîte de dialogue de progression, et transparente pour l'utilisateur.

// [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]
}

vérifier le sms avec le récepteur de diffusion dans un fragment

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);
        }
    };
}
0
chry