web-dev-qa-db-fra.com

com.google.Android.gms.common.api.ApiException: 16:

J'essaie d'apprendre comment utiliser la connexion Google dans mon Android, mais j'attrape com.google.Android.gms.common.api.ApiException : 16 Et je ne trouve pas sur la réponse stackoveflow, qu'est-ce que c'est et pourquoi je l'attrape. Dans la documentation que j'ai lu, ce qu'il "a été annulé par l'utilisateur", mais mon compte Google a accepté de installer des applications

import Android.support.v7.app.AppCompatActivity
import Android.os.Bundle
import Android.util.Log
import com.google.Android.gms.auth.api.signin.GoogleSignIn
import com.google.Android.gms.auth.api.signin.GoogleSignInOptions
import com.google.Android.gms.auth.api.signin.GoogleSignInAccount
import Android.content.Intent
import com.google.Android.gms.tasks.Task
import com.google.Android.gms.common.api.ApiException

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build()

        val mGoogleSignInClient = GoogleSignIn.getClient(this, gso)
        val account = GoogleSignIn.getLastSignedInAccount(this)
        if(account != null){
            Log.e("!!!", account.email)
        } else {
            val signInIntent = mGoogleSignInClient.signInIntent
            startActivityForResult(signInIntent, 0)
        }
    }

    public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

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

    private fun handleSignInResult(completedTask: Task<GoogleSignInAccount>) {
        try {
            val account = completedTask.getResult(ApiException::class.Java)

            // Signed in successfully, show authenticated UI.
            Log.e("!!!", account.email)
        } catch (e: ApiException) {
            e.printStackTrace()
        }

    }

}

J'ai suivi ce guide . A fait la configuration du projet. Si c'est important, j'utilise VDS pour cela. Le compte a été créé au même endroit

Voici stackTrace:

com.google.Android.gms.common.api.ApiException: 16: 
    at com.google.Android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source)
    at com.google.Android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source)
    at foryou.friendly.alisa.alisa.MainActivity.onActivityResult(MainActivity.kt:47)
    at Android.app.Activity.dispatchActivityResult(Activity.Java:7124)
    at Android.app.ActivityThread.deliverResults(ActivityThread.Java:4173)
    at Android.app.ActivityThread.handleSendResult(ActivityThread.Java:4220)
    at Android.app.ActivityThread.-wrap20(ActivityThread.Java)
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1579)
    at Android.os.Handler.dispatchMessage(Handler.Java:102)
    at Android.os.Looper.loop(Looper.Java:163)
    at Android.app.ActivityThread.main(ActivityThread.Java:6228)
    at Java.lang.reflect.Method.invoke(Native Method)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:904)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:794)
6

J'ai eu le même problème, le résultat de l'activité de démarrage revenait sans cesse avec RESULT_CANCELED et errorCode 16. Le problème était la configuration de mon client dans Google Cloud Platform Console. J'utilisais la clé régulière de débogage et de libération de l'API. Le résultat est revenu OK lorsque j'ai utilisé application Web comme configuration de ma console Google.

J'espère que cela aide.

6
Sdghasemi

Avait le même problème, il se trouve que je n'ai pas défini support mail on paramètres du projet Firebase.

Si tel est le cas, firebase vous montrera modifier les paramètres du projet lorsque vous essayez d'activer - Connexion Google on Authentification Firebase. Vous pouvez copier votre identifiant client depuis Firebase

1
Anga Koko

Pour moi, la seule chose qui a fonctionné était de fournir 2 oauth client ids. Un identifiant client d'application Web ET un Android identifiant client

Dans mon application Android, j'utilise l'identifiant client et le secret client de l'application Web. Même si je n'utilise pas l'identifiant client Android n'importe où dans mon application) c'est toujours nécessaire. Par exemple, si je supprime le oauth Android dans la console Google Api, mon application cesse de fonctionner MÊME SI je n'utilise PAS cet ID client PARTOUT dans mon application.

cela n'a absolument aucun sens pour moi! allez comprendre . mais jusqu'à présent, c'est la seule chose qui a fonctionné.

incroyablement crédible.

0
Squibly

Je développe une Android utilisant Flutter, j'ai essayé d'intégrer Google Sign In et j'ai rencontré le même problème avec ApiException: 16 et SIGN_IN_FAILED ( au lieu de RESULT_CANCELED).

Le type d'application sur Firebase a été défini sur Android.

Dans mon cas, après plusieurs heures de débogage, il s'est avéré être un mauvais problème SHA-1.

Dès que j'ai extrait la clé SHA-1 de mon projet et mis à jour la console Firebase, cela a fonctionné.

0
Dimitris Paxinos

Peut-être un peu tard pour la fête ici, mais après plus de 4 heures de débogage, j'ai réalisé que:

1.- Ajoutez un client Android avec vos empreintes digitales de certificats de signature sous la liste OAuth ID client. Ceci est obligatoire.

2.- Ajoutez l'ID client de l'application Web dans votre code au cas où vous auriez besoin d'un jeton d'identification

// ID and basic profile are included in DEFAULT_SIGN_IN
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                            .requestIdToken("YOUR_CLIENT_ID")
                            .requestEmail()
                            .build();

J'espère que cela aide

0
Raúl Omaña

J'ai utilisé une clé d'identification oauth différente que j'ai trouvée en téléchargeant les paramètres du projet et j'ai ajouté la clé client 3 dans le projet.

0
user3156040