Échec de l'autorisation V2 de l'API Android de Google Maps

mes pas:

  • code SHA1 de debug.keystore
  • créer application dans google apis console
  • activé api Google map v2
  • input SHA1; my.paquet.nom
  • obtenir la clé API
  • fichier AndroidManifest créé:

        <permission
                android:name="my.package.name.permission.MAPS_RECEIVE"
                android:protectionLevel="signature"/>
    
        <uses-permission android:name="my.package.name.permission.MAPS_RECEIVE"/>
    
        <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/>
    
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
        <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    
        <uses-feature android:glEsVersion="0x00020000" android:required="true"/>
    
        <application android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:hardwareAccelerated="true">
    
            <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="MY_API_KEY_HERE" />
    
            <activity android:name="MyActivity"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
        </application>
    </manifest>
    
  • layout créé

  • mettre " google-play-services.jar" libs

Après la compilation j'ai crash:

  ERROR/AndroidRuntime(10182): FATAL EXCEPTION: main
                java.lang.NoClassDefFoundError: com.google.android.gms.R$styleable
                at com.google.android.gms.maps.GoogleMapOptions.createFromAttributes(Unknown Source)
                at com.google.android.gms.maps.MapFragment.onInflate(Unknown Source)
                at android.app.Activity.onCreateView(Activity.java:4716)
                at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
                at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
                at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:270)
                at android.app.Activity.setContentView(Activity.java:1881)
                at com.example.gm2.MyActivity.onCreate(MyActivity.java:16)
                at android.app.Activity.performCreate(Activity.java:5104)
                at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
                at android.app.ActivityThread.access0(ActivityThread.java:141)
                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
                at android.os.Handler.dispatchMessage(Handler.java:99)
                at android.os.Looper.loop(Looper.java:137)
                at android.app.ActivityThread.main(ActivityThread.java:5039)
                at java.lang.reflect.Method.invokeNative(Native Method)
                at java.lang.reflect.Method.invoke(Method.java:511)
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
                at dalvik.system.NativeStart.main(Native Method)

après cela j'ai changé la disposition en:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/map"
             android:layout_width="match_parent"
             android:layout_height="match_parent" />

et changé Monactivité en

  super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    FragmentManager manager = getFragmentManager();
    FragmentTransaction transaction = manager.beginTransaction();

    transaction.add(R.id.map, MapFragment.newInstance());           
    transaction.commit();

en conséquence, l'application a été lancée, mais je n'ai pas vu la carte.

journal de la Console:

ERROR/Google Maps Android API(10369): Authorization failure.
87
demandé sur Adinia 2012-12-04 09:26:09

16 réponses

Étapes :

  • pour assurer que l'appareil a Google Play services APK
  • pour installer Google Play Service Rev. plus de 2

enter image description here

  • pour créer le projet à https://code.google.com/apis/console /
  • pour activer " Google Maps API Android v2" enter image description here
  • pour enregistrer SHA1 dans le projet ( maintenant, vous avez besoin D'écrire SHA1;votre.app.paquet.nom ) à la console APIs et obtenir la clé API
  • pour copier le répertoire ANDROID_SDK_DIR/extras/google/google_play_services/libproject/google-play-services_lib à la racine de votre projet
  • pour ajouter la ligne suivante à YOUR_PROJECT/project.propriétés

android.library.reference.1=google-play-services_lib

  • pour ajouter les lignes suivantes au YOUR_PROJECT/proguard-project.txt
  • "

.

-keep class * extends java.util.ListResourceBundle {

   protected Object[][] getContents();

}

Maintenant, vous êtes prêt à créer votre propre application Google Map avec L'aide de Google Map APIs V2 pour Android.

si vous créez une application avec min SDK = 8, s'il vous plaît utiliser la bibliothèque de soutien android v4 + SupportMapFragment au lieu de MapFragment.

99
répondu Rusfearuth 2017-07-17 11:46:46

également vérifier ce post: Google Map Api V2 exemple de Code ne fonctionne pas , si vous êtes complètement sûr que vous avez fait les bonnes étapes, puis de suivre la deuxième réponse, l'authentification se cache quelque part, essayer de désinstaller l'application manuellement (comme vous le faites avec une application normale) puis "exécuter" à nouveau le projet

34
répondu adelriosantiago 2017-05-23 12:17:57

comme je viens de perdre beaucoup de temps à faire fonctionner L'API, je vais essayer de donner une validation étape par étape pour L'API Map v2:

Étape 1: Demandez votre clé API

si vous n'êtes pas familier avec la console API Google, lire la très bonne réponse de Rusfearuth ci-dessus.

Étape 2: Vérifiez que vous Hachage SHA (dans ce cas j'utilise la clé de débogage de l'éclipse):

sur une machine Windows est arrivé à votre répertoire d'utilisateur sur un prompt de commande:

C:\Users\you>keytool -list -alias androiddebugkey -keystore .android\debug.keyst
ore -storepass android -keypass android

vous obtiendrez quelque chose comme:

androiddebugkey, 15.10.2012, PrivateKeyEntry,
Zertifikat-Fingerprint (SHA1): 66:XX:47:XX:1E:XX:FE:XX:DE:XX:EF:XX:98:XX:83:XX:9A:XX:23:A6

regardez ensuite le nom de votre paquet de l'activité map, par exemple COM.exemple.mypackagename

vous combinez cela et vérifiez cela avec vos paramètres dans la console API Google:

66:XX:47:XX:1E:XX:FE:XX:DE:XX:EF:XX:98:XX:83:XX:9A:XX:23:A6;com.example.mypackagename

où vous obtenez votre clé API:

AZzaSyDhkhNotUseFullKey49ylKD2bw1HM

Étape 3. Manifeste de méta-données

vérifiez si les métadonnées sont présentes et contiennent la bonne touche. Si vous relâchez votre application, vous avez besoin d'une clé différente.

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AZzaSyDhkhNotUseFullKey49ylKD2bw1HM" />
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />

Étape 4. Caractéristiques manifestes:

vous avez besoin de cette entrée car L'API map nécessite un support graphique:

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

Ne vous inquiétez pas, 99,7% des appareils en charge cette.

Étape 5. Manifeste bibliothèque:

ajouter la bibliothèque google.

    <uses-library
        android:name="com.google.android.maps"
        android:required="false" /> // This is required if you want your app to start in the emulator. I set it to false also if map is not an essential part of the application.

Étape 6. Autorisations manifestes:

vérifiez le nom du paquet deux fois: com.exemple.yourpackage

<permission
    android:name="com.example.yourpackage.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.example.yourpackage.permission.MAPS_RECEIVE" />

ajouter les permissions suivantes:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

les permissions suivantes sont facultatives et pas nécessaire si vous venez de montrer une carte. Essayez de ne pas les utiliser.

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

Étape 7. Inclure le fragment de carte dans votre mise en page:

<fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    class="com.google.android.gms.maps.SupportMapFragment"
    map:cameraTargetLat="47.621120"
    map:cameraTargetLng="-122.349594"
    map:cameraZoom="15" />

si votre libération à 2.X versions Android vous devez ajouter un support dans votre activité:

import android.support.v4.app.FragmentActivity;

pour la carte: les entrées à travailler comprennent

xmlns:map="http://schemas.android.com/apk/res-auto"

dans la mise en page de votre activité (par ex.: affichage en ligne).

dans mon cas, je dois nettoyer le projet chaque fois que je change quelque chose dans la disposition. Semble être un bug.

Étape 8: Utiliser Eclipse-Project-Clean.

Profitez-en!

18
répondu Gunnar Bernstein 2013-11-20 01:14:12

vous devez utiliser le projet de bibliothèque situé à: ANDROID-SDK-DIRECTORY/extras/google/google_play_services / libproject

cela va corriger votre premier numéro.

Je ne suis pas sûr pour votre deuxième, mais il peut être un effet secondaire de la première. Je suis encore à essayer d'obtenir la carte de travail dans mon propre app :)

16
répondu Scott Kennedy 2012-12-04 06:15:40

Aujourd'hui j'ai fait face à ce problème. J'ai utilisé Android Studio 2.1.3, windows 10. Tout en déboguant il fonctionne bien, mais si je mets à jour en mode de publication Il ne fonctionne pas. J'ai effacé toutes les conditions de proguard, mis à jour, mais ce n'était pas la solution.

la solution est liée à la structure du projet. Le google_maps_api.le fichier xml était différent entre app\src\debug\res et app\src\release\res. J'ai fait un copier-coller manuel du débogueur vers le dossier de publication.

Maintenant, il travail.

5
répondu Yaya 2016-10-17 15:37:22

j'ai résolu cette erreur en cochant le nom du paquet dans le manifeste et app build.gradle .

dans le manifeste:

j'utilise un nom de paquet comme:

com.app.triapp

Dans l'app construire.Grad:

 defaultConfig {

        applicationId "com.app.live"
    }

après avoir changé en com.app.triapp dans build.gradle , j'ai résolu mon problème.

3
répondu Luffy 2016-09-27 09:57:34

je migre de V1 à V2 de Google Maps. J'ai eu cet échec en essayant de lancer L'application via Eclipse. La cause fondamentale pour moi était l'utilisation de mon certificat de publication keystore plutôt que l'Android debug keystore qui est ce qui est utilisé lorsque vous l'exécutez via Eclipse. La commande suivante (OSX / Linux) vous donnera la clé SHA1 du clavier de débogage:

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

si vous utilisez Windows 7 à la place, vous utiliserez cette commande:

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

il est probablement préférable de désinstaller complètement votre application à partir de votre appareil avant d'essayer avec une nouvelle clé que cache Android les justificatifs d'identité de sécurité.

2
répondu Chris Knight 2014-03-21 23:44:05

il suffit D'ajouter ceci dans votre fichier de manifeste:

**<uses-library android:name="com.google.android.maps" />**

Par Exemple...

<application
    android:icon="@drawable/icon"
    android:label="@string/app_name" >
    <uses-library android:name="com.google.android.maps" />

    <activity
        android:name=".California"
        android:label="@string/app_name"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

et s'il vous plaît mettre à jour votre service google play lib...Passez à Window - > Android sdk manager - > mise à jour du service google play...l'a installé..supprimez l'ancienne et gardez celle-ci. Prenez cela de ANDROID-SDK-DIRECTORY/extras / google/google_play_services /

Merci..S'il vous plaît voter

2
répondu Mitul Goti 2016-07-28 12:41:37

j'ai suivi la plupart, sinon la totalité, des suggestions de Gunnar Bernstein mentionnées ci-dessus et cela n'a toujours pas fonctionné. Cependant, il a commencé à fonctionner après que j'ai suivi ses suggestions et la suivante:

  1. j'ai créé une nouvelle Mapactivité en utilisant le clic droit D'Android Studio liste des options: Nouveau -> Google -> Google Maps Activité

  2. j'ai alors ouvert le google_maps_api.fichier xml qui automatiquement est généré et utilisé a déclaré le lien pour créer une nouvelle CLÉ API. Je a toutes les étapes et sauvé ma nouvelle clé sous mon projet en cours. Je puis j'ai retiré mon ancienne clé API enregistrée car elle n'était plus nécessaire.

  3. dans le fichier Manifest, j'ai remplacé l'ancienne valeur de la clé API par la raccourci de chaîne de caractères créé par ce nouveau fichier XML: android:value="@string/google_maps_key ", au lieu d'indiquer la clé directement.

  4. enfin, supprimer la nouvelle Mapactivité, mais garder le fichier xml qui a été créé dans ce processus.

Note: en créant la clé API de cette façon, la colonne Restrictions, sous les justificatifs d'identité, maintenant déclaré"Applications Android". Plus tôt, quand il n'a pas fonctionné la colonne a déclaré "Applications Android, 1 API" ou quelque chose de similaire. Je ne sais pas si cela fait une différence ou pas.

Note: il ressemble à la la méta-balise de données en vertu du fichier Manifeste:

android:name="com.google.android.maps.v2.API_KEY

a été remplacé par:

android:name="com.google.android.geo.API_KEY"

je suppose que les deux peuvent être utilisés, mais il est préférable dès le départ en utilisant ce dernier.

Remarque: La valeur indiquée, dans la construction.gradle file, sous android - > defaultConfig - > applicationId doit correspondre au nom du paquet texte sous la page de justificatifs d'identité.

2
répondu goldenmaza 2018-01-17 16:43:36

" java.lang.Noclassdeffonderror: com.Google.Android.gms.R$styleable "

A eu cette erreur aussi, vous devez: Fichier -> importer -> Existant Android Code Dans l'espace de travail -> Parcourir -> Android sdk -> outils -> google -> google_play_services -> lib_project -> google_play_services_lib et OK. Vérifier le projet et terminer.

le projet va à Package Explorer. Allez maintenant à votre projet (avec erreur) -> propriétés -> Android et dans la Bibliothèque, cliquez Ajouter... le google_play_services_lib devrait y être! ajouter et essayez à nouveau :)

1
répondu edwell 2013-04-15 01:52:24

j'ai eu le même problème, mais il s'est avéré que c'était parce que j'ai créé deux clés différentes de L'API map avec la même empreinte SHA-1 avec presque le même nom de paquet com.bla.bla et l'autre com.bla.bla.something .

1
répondu Zamrony P. Juhara 2016-08-23 07:49:22

j'ai eu exactement le même problème et j'ai juste eu besoin de mettre le SDK pour le projet de bibliothèque du MapsApiV2 à Android 2.3.3 (API lvl 10)

0
répondu Informatic0re 2013-07-03 08:43:59

j'ai eu le même problème. Après environ deux heures de googling, réessaye, régénère la clé API de nombreuses fois, etc. j'ai découvert que j'avais activé le mauvais service dans la Console Google APis. J'ai activé service V2 API GoogleMaps , mais pour les applications Android vous devez utiliser API GoogleMaps V2 API V2 . Après avoir activé le bon service, tout a commencé à fonctionner.

0
répondu Nino Stella 2013-10-03 16:27:07

votre éclipse peut-être changé clé SHA1, donc vous devez regen votre clé google avec nouvelle clé SHA1 ici: https://console.developers.google.com/project/watchful-net-796/apiui/credential Après cela, copiez la nouvelle clé dans manifest et rechargez cette page google quelques fois, et votre clé sera mise à jour, reconstruire votre projet, il fonctionnera. P / S: pour mon erreur, j'ai supprimé .dossier android so eclipse regen SHA1.

0
répondu nobjta_9x_tq 2015-01-25 09:15:20

j'ai suivi la même démarche fournie dans Google Doc mais j'ai eu la même erreur. Plus tard, j'ai réalisé que je signais mon application avec mon application.keystore et la clé SHA que j'utilisais pour générer la clé API était la clé de débogage.

alors j'ai simplement supprimé le signingConfig signingConfig.generic du fichier build.gradle et ma carte a commencé à fonctionner correctement.

J'espère que ça aidera quelqu'un.

0
répondu SKP 2016-06-02 06:16:24

j'ai fait face à la même question.

si vous avez émis une api pour votre version release de l'application. Alors cette api ne fonctionnera que pour la version de sortie et non pour la version de débogage. Alors assurez-vous que vous utilisez la version de publication dans votre téléphone ou émulateur .

0
répondu Salman Saleh 2017-07-05 20:12:45