it-swarm.com.de

Android Firebase-Telefonauthentifizierung INVALID_APP_CREDENTIAL: Die App-Überprüfung ist fehlgeschlagen

Ich bin neu in Android Firebase und habe die notwendigen Bibliotheken für Firebase Auth implementiert. Ich versuche, eine gültige Nummer einzugeben, aber das Protokoll sagt:

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)

Hier ist mein 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
    }

}

bitte sag mir was falsch ist danke ..

10
Coozgan

Hinzufügen von SHA Certificate Fingerprint löst mein Problem. Nun, ich bin ziemlich neu dabei, aber es gelang mir, die Ausgabe zu zeigen, und ich konnte eine SMS-Bestätigung erhalten.

Hier finden Sie meine Codes: https://github.com/coozgan/TestingPhoneAuth

14
Coozgan

Ich hatte genau das gleiche Problem wie Sie. Obwohl ich beide SHA1 hochgeladen habe, würde es immer noch eine Aufforderung "Phone login error" geben.

Sie müssen das Firebase-Projekt mit Google Play verknüpfen. 

Gehen Sie zu https://console.firebase.google.com/u/0/project/you-project-name/settings/accountlinking und klicken Sie unten rechts auf "Link zu Google Play".

4
Lawrence Taur

Nach einer Weile fasse ich einfach alles zusammen, was ich über die Telefonüberprüfung erfahren habe. Es gibt ein paar Dinge, die Sie tun sollten und die Sie beachten sollten, damit es funktioniert.

Dies sind die Liste der Dinge, die Sie tun müssen, damit es funktioniert:

  1. Erstellen Sie eine App und verbinden Sie sie mit der google-services.json, die Sie von firebase erhalten haben. Legen Sie es in den richtigen Ordner und vergewissern Sie sich, dass Sie den Gradle compile 'com.google.firebase:firebase-auth:11.0.4' hinzugefügt haben.
  2. Gehen Sie in Ihrer App auf Firebase im Menü auf Authentication. Gehen Sie dann zu Sign-in Method und aktivieren Sie den Telefonanbieter. 
  3. Fügen Sie Ihrer App ein Sha-1 hinzu. Wenn Sie zu den Projekteinstellungen in Ihrem Projekt gehen, gehen Sie zum Ende Ihres App-Abschnitts und sehen Sie einen Ort, an dem Sie den Sha-1 ablegen können. Um den Sha-1 zu erhalten, müssen Sie diesen Befehl ausführen 

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

wie im Firebase-Handbuch dafür erwähnt. Beachten Sie, dass dieser Befehl online ist. Führen Sie dann alles zusammen aus und suchen Sie nach der debug.keystore -Datei Ihres Benutzers in einem versteckten Ordner namens .Android. Der Standard-Alias ​​für den Keystore lautet androiddebugkey. Ändern Sie ihn also nicht. Das Standardkennwort lautet Android. Wenn Sie also nach einem Kennwort gefragt werden, verwenden Sie einfach "Android" ..__ Sha-1. Legen Sie es in Ihr Projekt.

  1. Wenn immer noch nichts funktioniert, ist dies nicht immer erforderlich. Stellen Sie jedoch sicher, dass Ihre App mit einem Google-Konto verknüpft ist. In Ihren Projekteinstellungen-> Kontoverbindung-> Google Play.

Beachten Sie auch, dies wurde am 16. August 2017 geschrieben. Sie können die Telefonüberprüfung nicht mit einem Emulator durchführen. Verwenden Sie daher ein echtes Gerät.

Ich hoffe es hilft.

Danke Saurabh Yadav für den fehlenden Schrägstrich;) offenbar muss ich hier 2 Schrägstriche setzen, damit er angezeigt wird. 

3
Shai

Ich habe auch das gleiche Problem.

Nachdem ich einige Inhalte gelesen hatte, fand ich ein anderes Problem und führte meine Anwendung aus.

Problem 1: dieser Link sagt das,

Beachten Sie außerdem, dass die Anmeldung einer Telefonnummer ein physisches Gerät erfordert und auf einem Emulator nicht funktioniert.

Sie können also nur auf einem echten Gerät testen und ausführen, nicht auf einem Emulator.

Wenn Sie auf Emulator laufen können, dann gibt es den gleichen Fehler.

Sie können meinen github this link für Firebase Phone Login Beispiel beziehen.

1
Sagar Pithiya

Wenn Sie sich für signiertes Build entscheiden und es in den Play Store legen, sollte der sha1 des Play Store dem sha1 des Firebase-Fingerabdrucks entsprechen. Sobald dies erledigt ist, müssen Sie Ihre App über den Firebase-Login mit dem Play Store verknüpfen. Ersetzen Sie die neue Datei google-services.json in Ihrer Android-App durch die neue, die nach der sha1-Schlüsseländerung im Firebase-Konto erstellt wurde.

0
Nitin Kumar

Aktualisieren Sie Ihre Firebase-Tools lib auf die neueste Version. Rufen Sie dann Firebase Logout und anschließend Firebase-Login auf.

0
Vishwanath