web-dev-qa-db-fra.com

Connectez-vous à Google, mais le code de résultat est 0

Je veux créer un signe Google pour mon application mais mon code de résultat de onActivityResult() est 0

Dans ma onCreate() méthode, je lance la fonction startSignInIntent() comme ceci:

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //some other stuff
        view.loadUrl(myURL);
        startSignInIntent();
}

C'est la startSignInIntent()

private void startSignInIntent() {
        GoogleSignInClient signInClient = GoogleSignIn.getClient(this,
                GoogleSignInOptions.DEFAULT_SIGN_IN);
        Intent intent = signInClient.getSignInIntent();
        startActivityForResult(intent, RC_SIGN_IN);
    }

C'est la onActivityResult()

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "data : " + resultCode + " | " + data  + " || " + RC_SIGN_IN + " ||| " + requestCode);
        if (requestCode == RC_SIGN_IN) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            if (result.isSuccess()) {
                // The signed in account is stored in the result.
                GoogleSignInAccount signedInAccount = result.getSignInAccount();
            } else {
                String message = result.getStatus().getStatusMessage();
                if (message == null || message.isEmpty()) {
                    Toast.makeText(this, "Login failed", Toast.LENGTH_LONG).show();
                }
                new AlertDialog.Builder(this).setMessage(message)
                        .setNeutralButton(Android.R.string.ok, null).show();
            }
        }

Ceci est le résultat du journal dans la fonction onActivityResult()

0 | Intention {(a des extras)} || 2 ||| 2

Après avoir sélectionné un compte de la fenêtre contextuelle où je peux choisir mon compte. J'obtiens cet écran avec ok mais quand j'ai que la connexion a déjà échoué. Regarde la photo: enter image description here

8
Steven

Essayez de vérifier si vous avez la bonne clé OAuth correctement configurée pour votre application. Selon ce lien SO post , l'OP a remarqué que la clé Auth est également associée à d'autres projet qui crée le problème.

Vous pouvez également vérifier l'implémentation suivante de Try Sign-In for Android , pour l'implémentation du code:

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

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        // The Task returned from this call is always completed, no need to attach
        // a listener.
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        handleSignInResult(task);
    }
}

En outre, certaines informations supplémentaires fournies par OP, vous devez vous assurer que vous avez signé l'APK lorsque vous le testez. Voir la documentation sur Sign Your App pour des informations détaillées à ce sujet.

J'espère que cela t'aides.

6
Mr.Rebot

J'ai eu le même bug, requestCode était toujours 0 (RESULT_CANCELED).

La décision a été d'activer la connexion Google dans la console Firebase.

Console Firebase -> Votre projet -> Authentification -> Fournisseurs -> Google -> et allumez-le.

Dans mon cas, le lien était comme ça

https://console.firebase.google.com/u/0/project/ {NOM DU PROJET}/authentification/fournisseurs

9
Eugene P.

J'ai rencontré le même problème avec Android Emulator. Il s'avère que l'émulateur a été déconnecté d'Internet et pourquoi Firebase il lançait l'erreur mentionnée ci-dessus.

2
Pratap Vhatkar

Je voulais partager mon expérience même si elle n'est pas applicable au cas d'origine. Ma recherche a atterri ici parce que j'avais le même problème - startActivityForResult renvoie instantanément avec resultCode = 0.

Ma cause était le mauvais nom de package. J'ai une application avec quelques variantes dont chacune a un nom de package différent. La connexion à Google nécessite que le nom du package de l'application Android Android correspond à l'un des Android projets de la console Android). J'ai configuré un projet pour une variante , mais pas pour les autres. Une fois que j'ai créé un projet pour la console Google API, la connexion a commencé à fonctionner sans problème.

1
Hong

Je faisais cela spécifiquement sur Android jellybean et il s'est avéré que si le mode de lancement d'activité de connexion que j'utilisais n'était pas standard ou singletop dans le manifeste, onActivityResult () reviendrait immédiatement sans attendant réellement le résultat.

 <activity
       Android:name=".SignInActivity"
        Android:excludeFromRecents="true"
        Android:exported="true"
        Android:launchMode="singleTop"
        Android:permission="com.google.firebase.auth.api.gms.permission.LAUNCH_FEDERATED_SIGN_IN"
        tools:replace="Android:launchMode"/>
0