web-dev-qa-db-fra.com

SMS La demande de code de vérification a échoué lors de l'authentification à l'aide de FireBase Auth.

Lors de l'authentification à l'aide de FireBase Auth, je souhaite entrer automatiquement le code reçu via SMS. Je suis capable de recevoir SMS et passez à travers le processus d'authentification manuellement, mais lorsque j'utilise Smsretriever, l'application se bloque puis la boîte de dialogue de la feuille inférieure apparaît. C'est tout ce qui apparaît dans LogCat:

E/Firebaseauth: [Smsretrieverhelper] SMS Demande de codes de vérification a échoué: Code d'état inconnu: 17010 NULL

Code en fragment où l'utilisateur entrait son numéro de téléphone:

private val SMS_CONSENT_REQUEST = 2  // Set to an unused request code

    private val smsVerificationReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context, intent: Intent) {
            if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
                val extras = intent.extras
                val smsRetrieverStatus = extras?.get(SmsRetriever.EXTRA_STATUS) as Status

                when (smsRetrieverStatus.statusCode) {
                    CommonStatusCodes.SUCCESS -> {
                        // Get consent intent
                        val consentIntent = extras.getParcelable<Intent>(SmsRetriever.EXTRA_CONSENT_INTENT)
                        try {
                            // Start activity to show consent dialog to user, activity must be started in
                            // 5 minutes, otherwise you'll receive another TIMEOUT intent
                            startActivityForResult(consentIntent, SMS_CONSENT_REQUEST)
                        } catch (e: ActivityNotFoundException) {
                            // Handle the exception ...
                        }
                    }
                    CommonStatusCodes.TIMEOUT -> {
                        // Time out occurred, handle the error.
                    }
                }
            }
        }
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val task = SmsRetriever.getClient(requireActivity()).startSmsUserConsent(null)
        val intentFilter = IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION)
        requireActivity().registerReceiver(smsVerificationReceiver, intentFilter)
    }
    
    override fun sendSms() {
        showProgressBar(true)
        SmsRetriever.getClient(requireActivity()).startSmsUserConsent(presenter.getNumber())
        val options = PhoneAuthOptions.newBuilder(auth)
            .setPhoneNumber(presenter.getNumber())
            .setTimeout(58L, TimeUnit.SECONDS)
            .setActivity(requireActivity())
            .setCallbacks(callbacks)
            .build()
        PhoneAuthProvider.verifyPhoneNumber(options)
    }

    override fun onDestroy() {
        super.onDestroy()
        requireContext().unregisterReceiver(smsVerificationReceiver)
    }

Ceci est le code dans le fragment où l'utilisateur doit saisir le code:

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when (requestCode) {
            // ...
            SMS_CONSENT_REQUEST ->
                // Obtain the phone number from the result
                if (resultCode == Activity.RESULT_OK && data != null) {
                    // Get SMS message content
                    val message = data.getStringExtra(SmsRetriever.EXTRA_SMS_MESSAGE)
                    // Extract one-time code from the message and complete verification
                    // `message` contains the entire text of the SMS message, so you will need
                    // to parse the string.
                    message?.let { presenter.parseSms(it) }
                    // send one time code to the server
                } else {
                    // Consent denied. User can type OTC manually.
                }
        }
    }
6
DaniiarR

essayez d'imprimer une exception dans OnFailure comme -> {p0.message} Imprimer cette ligne logcat et il montrera certainement montrer -> E/Exception dans FireBase: Nous avons bloqué toutes les demandes de cet appareil en raison d'une activité inhabituelle. Réessayez plus tard. C'est pourquoi, parce que nous utilisons ce numéro de téléphone plusieurs fois pour la connexion

1
Puneet kumar