webentwicklung-frage-antwort-db.com.de

Abrufen von 'E/TokenRequestor: Sie haben falsche OAuth2-bezogene Konfigurationen. Detaillierter Fehler: INVALID_AUDIENCE ', auch nachdem genaue Client-IDs angegeben wurden

Ich habe die GoogleSignIn-Option in meiner App bereitgestellt.

Hier ist mein Code:

public class SignupActivity extends AppCompatActivity {

    private static final int RC_SIGN_IN = 1;
    GoogleApiClient mGoogleApiClient;
    FirebaseAuth mAuth;
    TextView appName;
    ProgressDialog signinProgressDialog;
    CoordinatorLayout coordinatorLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);
//        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
//        setSupportActionBar(toolbar);

        signinProgressDialog = new ProgressDialog(SignupActivity.this);

        coordinatorLayout = (CoordinatorLayout) findViewById(R.id.signupCoordinatorLayout);

        // Configure Google Sign In
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.o_auth_client_id))
                .requestEmail()
                .requestProfile()
                .requestId()
                .build();

        // Build a GoogleApiClient with access to the Google Sign-In API and the
        // options specified by gso.
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() {
                    @Override
                    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

                    }
                } /* OnConnectionFailedListener */)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();

        mAuth = FirebaseAuth.getInstance();

        findViewById(R.id.sign_in_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (isNetworkAvailable()) {
                    signinProgressDialog.setMessage("Signing in...");
                    signinProgressDialog.show();
                    signIn();
                } else {
                    Snackbar snackbar = Snackbar
                            .make(coordinatorLayout, "No internet connection!", Snackbar.LENGTH_LONG);
                    snackbar.show();
                    signinProgressDialog.dismiss();
                }
            }
        });

    }

    private void signIn() {
        Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            if (result.isSuccess()) {
                // Google Sign In was successful, authenticate with Firebase
                GoogleSignInAccount account = result.getSignInAccount();
                firebaseAuthWithGoogle(account);
            } else {
                // Google Sign In failed, update UI appropriately
                // ...
                Snackbar snackbar = Snackbar
                        .make(coordinatorLayout, "Error signing in!", Snackbar.LENGTH_LONG);
                snackbar.show();
                signinProgressDialog.dismiss();
            }
        }
    }

    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
        Log.d("firebaseAuthWithGoogle", "firebaseAuthWithGoogle:" + acct.getId());

        AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
        mAuth.signInWithCredential(credential)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        Log.d("signin_successful", "signInWithCredential:onComplete:" + task.isSuccessful());

                        Intent mainActivityIntent = new Intent(SignupActivity.this, MainActivity.class);
                        mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                        startActivity(mainActivityIntent);
                        signinProgressDialog.dismiss();

                        // If sign in fails, display a message to the user. If sign in succeeds
                        // the auth state listener will be notified and logic to handle the
                        // signed in user can be handled in the listener.
                        if (!task.isSuccessful()) {
                            Log.w("signin_unsuccessful", "signInWithCredential", task.getException());
                            Toast.makeText(SignupActivity.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                            signinProgressDialog.dismiss();
                        }
                        // ...
                    }
                });
    }

    @Override
    public void onBackPressed() {
        finish();
        super.onBackPressed();
    }

    private boolean isNetworkAvailable() {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) SignupActivity.this.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
}

Ich habe 2 Client-IDs, eine ist Web-Client und eine andere ist Android-Client.

Ich habe meine Client-IDs mit meiner google-services.json-Datei und meinem Projekt auf console.developers.google.com überprüft. Sie passen alle zusammen.

Ich erhalte jedoch immer noch diese Fehlermeldung: E/TokenRequestor: You have wrong OAuth2 related configurations, please check. Detailed error: INVALID_AUDIENCE 06-27 12:40:14.651 4443-4484/? D/AuthAccountOperation: id token request failed.

Was könnte diesen Fehler verursachen?

Ist es so, dass meine App nicht mehr mit meiner App auf meiner Konsole verbunden ist, oder ist es etwas anderes?

Lass es mich wissen, bitte.

12
Hammad Nasir

Sie müssen für jede Android-App in Ihren Projekteinstellungen SHA Fingerabdruck hinzufügen. Wenn Sie Firebase verwenden, bearbeiten Sie den folgenden Link mit dem Namen Ihres Projekts und fügen Sie dann den Fingerabdruck für Ihre App hinzu.

https://console.firebase.google.com/project/{YOUR_PROJECT_NAME}/settings/general/ 
3
abdllhbyrktr

Ich schätze, ich bin zu spät für diese Frage. Sie können dieses Problem jedoch beheben, indem Sie die Dateisynchronisierung Ihrer google-service.json-Datei mit Firebase aktualisieren.

Extras-> Firebase -> Analytics-> Verbindung zu Firebase herstellen 

es wird Ihre App erstellen oder synchronisieren, wenn sie bereits vorhanden ist.

Grüße

0
Shivam Mathur

Wenn Sie sich erfolgreich mit dem Google-Konto anmelden möchten, sollten Sie Folgendes tun: 1.Laden Sie eine APK-Datei (z. B. "packageName" ist "com.example.xxx" und der SHA1 des Keystores ist "qwertyuiop ....")) Entwicklerkonsole, dann erhalten Sie die ClientID. 2.Verwenden Sie die richtige ClientID, die Sie gerade erhalten haben, und signieren Sie Ihre apk mit der richtigen Keystore-Datei, die SHA1 'qwertyuiop ...' lautet. Im Allgemeinen können Sie dies tun. 

Kann immer noch nicht erfolgreich angemeldet werden, einer der obigen Schritte muss falsch sein, überprüfen Sie ihn Schritt für Schritt. Ich denke, Ihre Keystore-Datei ist möglicherweise falsch für Ihren debugMode.

0
greyjoy