web-dev-qa-db-fra.com

com.google.Android.gms.auth.GoogleAuthException: UNREGISTR_ON_API_CONSOLE

J'implémente une application Android qui permet aux utilisateurs de diffuser en continu sur une chaîne youtube directement depuis l'application. J'ai créé une clé API et un ID client OAuth 2.0  enter image description here

Mais je reçois l’exception suivante: com.google.Android.gms.auth.GoogleAuthException: UNREGISTERED_ON_API_CONSOLE soit lorsque j’essaie de créer un événement, soit lorsque j’essaie d’extraire celui-ci créé manuellement sur le canal youtube.

J'utilise le code suivant pour créer un objet youtube

String accountName = mContext.getString(R.string.google_account_name);
        String apiKey = mContext.getString(R.string.google_api_key);
        String clientID = mContext.getString(R.string.google_api_client_id);
        String clientName = mContext.getString(R.string.google_api_client_name);

        GoogleAccountCredential credential =
                GoogleAccountCredential.usingOAuth2(mContext,
                        Arrays.asList(YouTubeScopes.YOUTUBE));
        credential.setSelectedAccountName(accountName);

//        String SCOPE = "audience:server:client_id:" + clientID + ":api_scope:" + YouTubeScopes.YOUTUBE;
//        GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(mContext, SCOPE);
//        credential.setSelectedAccountName(accountName);


        youtube = new YouTube.Builder(transport, jsonFactory, credential)
                .setApplicationName(clientName)
                .setYouTubeRequestInitializer(new YouTubeRequestInitializer(apiKey))
                /*.setGoogleClientRequestInitializer(new YouTubeRequestInitializer(apiKey))*/
                .build();

Puis pour créer un événement:

LiveBroadcastSnippet broadcastSnippet = new LiveBroadcastSnippet();
        broadcastSnippet.setTitle(name);
        broadcastSnippet.setScheduledStartTime(new DateTime(futureDate));

        LiveBroadcastContentDetails contentDetails = new LiveBroadcastContentDetails();
        MonitorStreamInfo monitorStream = new MonitorStreamInfo();
        monitorStream.setEnableMonitorStream(false);
        contentDetails.setMonitorStream(monitorStream);

        // Create LiveBroadcastStatus with privacy status.
        LiveBroadcastStatus status = new LiveBroadcastStatus();
        status.setPrivacyStatus("unlisted");

        LiveBroadcast broadcast = new LiveBroadcast();
        broadcast.setKind("youtube#liveBroadcast");
        broadcast.setSnippet(broadcastSnippet);
        broadcast.setStatus(status);
        broadcast.setContentDetails(contentDetails);

        // Create the insert request
        YouTube.LiveBroadcasts.Insert liveBroadcastInsert = youtube
                .liveBroadcasts().insert("snippet,status,contentDetails",
                        broadcast);

        // Request is executed and inserted broadcast is returned
        LiveBroadcast returnedBroadcast = liveBroadcastInsert.execute(); //<= This line generates the exception

J'ai évidemment fait quelque chose de mal, mais je ne peux pas trouver quoi. Toute aide est appréciée. Merci d'avance

12
Jean-Paul Kouma

Le problème est que, lorsque vous déboguez, vous utilisez un fichier de clés créé dans ~/.Android/debug.keystore, et non la clé de signature que vous pensez utiliser. 

Lorsque vous générez une clé, telle que la publication d'un fichier APK signé, vous pensez que ce SHA1 est celui requis par l'interface API Google. Ce n'est pas.

Si vous remplacez celui du dossier ~/.Android par votre clé de signature, il est corrompu car il manque l'androïdedebugkey. Pour votre information, le mot de passe par défaut pour la clé générée automatiquement est "Android".

Pour savoir où se trouve votre magasin de clés, voir https://developer.Android.com/studio/publish/app-signing.html sous "Expiration du certificat de débogage".

Ce que tu as à faire:

1) Supprimez votre debug.keystore et redémarrez votre IDE. Cela devrait générer un nouveau fichier debug.keystore avec l'alias de clé "androiddebugkey".

2) Si votre IDE ne génère pas le nouveau magasin de clés, exécutez à nouveau votre application Android. Il devrait le générer cette fois-ci dans ~/.Android /

3) Accédez à/path/à/jre/bin et ajoutez ce chemin aux variables d’environnement de votre système. Cela vous permettra d'accéder à keytool.

4) Accédez au répertoire de votre magasin de clés de débogage et exécutez la commande suivante: keytool -list -keystore debug.keystore -alias androiddebugkey

5) Votre console vous invitera à entrer le mot de passe du keystore ("Android").

6) Obtenez la clé SHA1 à partir du magasin de clés et insérez CETTE CLÉ dans l'interface de votre API. Vous constaterez que cela fonctionne. 

14
Jan Jansz

Dans mon cas, l'erreur UNREGTED_ON_API_CONSOLE a été provoquée par une faute de frappe dans le nom du paquet dans AndroidManifest. Simple mais perdu de nombreuses heures à lutter avec les clés et les SHA.

6
Piotr Majek

En utilisant les réponses précédentes, je l’ai utilisée comme référence pour comprendre et réparer les miennes et simplifié beaucoup plus facilement la procédure de résolution des miens.

Dans l'invite de commande Windows.

Accédez à votre répertoire Java bin.

C:\Program Files\Java\jdk1.8.0_111\bin>

et tapez le ff. commander

keytool -list -v -keystore "%USERPROFILE%\.Android\debug.keystore" -alias androiddebugkey -storepass Android -keypass Android

puis lancez le ff. code

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

lorsque vous demandez un mot de passe, tapez "Android" (sans les guillemets)

la clé SHA1 obtenue à partir du code ci-dessus. Copiez-le et collez-le sur votre console google cloud ici

 enter image description here

Faites ceci sur la page Web de la console cloud de Google.

sur l'onglet à gauche, recherchez et cliquez sur "API et services"

puis sur la nouvelle page, sur l'onglet de gauche encore, trouvez et cliquez sur "Credentials"

maintenant, copiez, collez la clé que vous avez copiée à partir de la commande Windows, puis cliquez sur Invite dans la zone de texte située sous "empreinte de certificat de signature".

assurez-vous que l'ID de l'application sur votre application et celui de Google Cloud Console sont identiques.

 enter image description here

2
Joshua Cariño

J'ai ce problème et après de nombreuses recherches, dans build.gadle, ma applicationId était différente du nom du paquet que j'ai mis sur Google Console

defaultConfig {
    applicationId "br.com.glicado.glicado" <-- WAS WRONG, IN MY CASE THE RIGHT IS "br.com.glicado"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
}
0
DigaoParceiro