web-dev-qa-db-fra.com

Authentification de téléphone Android Firebase INVALID_APP_CREDENTIAL: La validation de l'application a échoué

Je suis vraiment nouveau sur Android firebase et j'ai implémenté les bibliothèques nécessaires pour Firebase Auth. J'essaie de mettre un numéro valide, mais le journal dit:

W/JEJE: onVerificationFailed
com.google.firebase.FirebaseException: An internal error has occurred. [ INVALID_APP_CREDENTIAL:App validation failed ]
at com.google.Android.gms.internal.nf.zzK(Unknown Source)
at com.google.Android.gms.internal.og.zza(Unknown Source)
at com.google.Android.gms.internal.oh.run(Unknown Source)
at Android.os.Handler.handleCallback(Handler.Java:751)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:154)
at Android.app.ActivityThread.main(ActivityThread.Java:6176)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:888)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:778)

Voici mon code:

public class MainActivity extends AppCompatActivity {

    private static String mVerificationId;
    private static PhoneAuthProvider.ForceResendingToken mResendToken;
    private static FirebaseAuth mAuth;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText editText = (EditText) findViewById(R.id.phone);
        Button submit = (Button) findViewById(R.id.submit);

        final PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallBacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
            @Override
            public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
                Log.d("JEJE", "onVerificationCompleted:" + phoneAuthCredential);

                signInWithPhoneAuthCredential(phoneAuthCredential);
            }

            @Override
            public void onVerificationFailed(FirebaseException e) {
                Log.w("JEJE", "onVerificationFailed", e);

                if (e instanceof FirebaseAuthInvalidCredentialsException) {
                    Log.d("JEJE", "INVALID REQUEST");
                } else if (e instanceof FirebaseTooManyRequestsException) {
                    Log.d("JEJE", "Too many Request");
                }
            }

            @Override
            public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) {
                super.onCodeSent(s, forceResendingToken);
                Log.d("JEJE", "onCodeSent:" + s);

                mVerificationId = s;
                mResendToken = forceResendingToken;

            }
        };

        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String phoneNum = editText.getText().toString();
                Toast.makeText(MainActivity.this, phoneNum, Toast.LENGTH_SHORT).show();
                verifyPhone(phoneNum,mCallBacks);
            }

        });
    }

    private void signInWithPhoneAuthCredential(PhoneAuthCredential phoneAuthCredential) {
        mAuth.signInWithCredential(phoneAuthCredential).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()){
                    FirebaseUser user = task.getResult().getUser();
                }else {
                    if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
                        // The verification code entered was invalid
                    }
                }
            }
        });
    }

    public void verifyPhone(String phoneNumber, PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks){
        PhoneAuthProvider.getInstance().verifyPhoneNumber(
                "+639952874699",        // Phone number to verify
                60,                 // Timeout duration
                TimeUnit.SECONDS,   // Unit of timeout
                this,               // Activity (for callback binding)
                mCallbacks);        // OnVerificationStateChangedCallback
    }

}

s'il vous plaît dites-moi ce qui ne va pas merci ..

10
Coozgan

Ajouter SHA Empreinte de certificat résout mon problème. Eh bien, je suis assez nouveau pour cela, mais j'ai réussi à montrer la sortie et j'ai été en mesure de recevoir une vérification par SMS.

Pour référence, voici mes codes: https://github.com/coozgan/TestingPhoneAuth

14
Coozgan

J'ai eu exactement le même problème que le vôtre. Même si j'ai téléchargé les deux SHA1, l'invite "Erreur de connexion du téléphone" est toujours affichée.

Vous devez associer le projet Firebase à Google Play. 

Allez sur https://console.firebase.google.com/u/0/project/you-project-name/settings/accountlinking et cliquez en bas à droite sur "Lien vers Google Play".

4
Lawrence Taur

Au bout d’un moment, je vais résumer tout ce que j’ai découvert sur la vérification par téléphone. Il y a quelques choses que vous devez faire et dont vous devez vous souvenir pour que cela fonctionne.

Voici la liste des tâches à accomplir pour que cela fonctionne:

  1. Créez une application et connectez-la à la vôtre avec le fichier google-services.json fourni par firebase. Mettez-le dans le bon dossier et assurez-vous de l'avoir ajouté dans le compile 'com.google.firebase:firebase-auth:11.0.4' de Gradle.
  2. Dans votre application sur Firebase, accédez à Authentication dans le menu. Ensuite, allez à Sign-in Method et assurez-vous d'activer le fournisseur de téléphone. 
  3. Ajoutez un Sha-1 à votre application. Lorsque vous accédez aux paramètres du projet dans votre projet, allez au bas de la section de votre application et vous verrez un endroit où placer le Sha-1 . Pour obtenir le Sha-1, vous devez exécuter cette commande. 

keytool -exportcert -list -v -alias androiddebugkey -keystore % USERPROFILE% \. Android\debug.keystore

comme mentionné dans le guide firebase pour cela. Notez que cette commande est en ligne, alors exécutez-la tous ensemble. Elle cherchera votre fichier debug.keystore sur votre utilisateur dans un dossier caché appelé .Android. L'alias par défaut du magasin de clés est androiddebugkey, ne le modifiez pas. Le mot de passe par défaut est Android. Ainsi, lorsqu'il vous demande un mot de passe, utilisez simplement "Android" . Sha-1. Mettez-le dans votre projet.

  1. Si rien ne fonctionne toujours, cela n’est pas toujours nécessaire, mais assurez-vous que votre application est liée à un compte Google. Dans les paramètres de votre projet-> Liaison au compte-> Google Play.

Notez également que ceci est écrit du 16 août 2017, vous ne pouvez pas vérifier le téléphone sur un émulateur, utilisez donc un vrai périphérique.

J'espère que ça aide.

Merci saurabh Yadav pour la barre oblique manquante;) Apparemment, je dois mettre 2 barres obliques ici pour qu'elle soit visible. 

3
Shai

J'ai aussi le même problème.

Après avoir lu du contenu, j'ai trouvé un autre problème et après avoir exécuté mon application.

Problème 1: this link dit que,

Notez également que la connexion au numéro de téléphone nécessite un périphérique physique et ne fonctionne pas sur un émulateur.

Alors pouvez-vous tester et exécuter uniquement sur le périphérique réel, pas n'importe quel émulateur.

Si vous pouvez utiliser l'émulateur, la même erreur se produit.

Vous pouvez vous référer à mon github this link pour l'exemple de connexion de téléphone Firebase

1
Sagar Pithiya

Si vous optez pour une version signée et que vous la mettez dans Play Store, le sha1 de Play Store doit être identique à l'empreinte sha1 de Firebase. Et une fois que vous avez terminé, vous devez lier votre application au Play Store via firebase. Remplacez le nouveau fichier google-services.json dans votre application Android par celui créé dans le compte firebase après le changement de clé sha1.

0
Nitin Kumar

Essayez de mettre à jour votre bibliothèque firebase-tools vers la dernière version, puis appelez logb firebase logout, suivi de la connexion firebase.

0
Vishwanath