it-swarm.com.de

Google Maps Android API v2 Fehler bei der Autorisierung

Meine Schritte: 

  • hat SHA1-Code von debug.keystore erhalten 
  • app in google apis console erstellen 
  • aktivierte google map api v2 
  • eingabe SHA1; mein.Paket.Name 
  • aPI-Schlüssel abrufen 
  • erstellte AndroidManifest-Datei: 

     

        <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>
    
  • erstelltes Layout 

  • setzen Sie "google-play-services.jar" in die libs 

Nach dem Kompilieren bin ich abgestürzt: 

  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.access$600(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)

Danach habe ich das Layout geändert in:

<?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" />

und hat MyActivity in geändert

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

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

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

Als Ergebnis wurde die Anwendung gestartet, aber die Karte wurde nicht angezeigt. 

Konsolenprotokoll:

ERROR/Google Maps Android API(10369): Authorization failure.
89
Rusfearuth

Schritte:

  • um sicherzustellen, dass das Gerät über APK für Google Play-Dienste verfügt
  • so installieren Sie den Google Play Service Rev. mehr als 2

enter image description here

  • projekt erstellen unter https://code.google.com/apis/console/
  • aktivieren Sie "Google Maps Android API v2" enter image description here
  • um SHA1 im Projekt zu registrieren (JETZT, BRAUCHEN SIE SHA1; your.app.package.name) an der APIs Console und erhalten Sie API KEY
  • um das Verzeichnis Android_SDK_DIR/extras/google/google_play_services/libproject/google-play-services_lib in das Stammverzeichnis Ihres Projekts zu kopieren
  • um die nächste Zeile zu YOUR_PROJECT/project.properties hinzuzufügen

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

  • um weitere Zeilen zum YOUR_PROJECT/proguard-project.txt hinzuzufügen

.

-keep class * extends Java.util.ListResourceBundle {

   protected Object[][] getContents();

}

Jetzt können Sie mit Google Map APIs V2 für Android Ihre eigene Google Map-App erstellen. 

Wenn Sie eine Anwendung mit mindestens SDK = 8 erstellen, verwenden Sie anstelle von MapFragment die Android-Support-Bibliothek v4 + SupportMapFragment.

99
Rusfearuth

Überprüfen Sie auch diesen Beitrag: Google Map Android Api V2-Beispielcode funktioniert nicht Wenn Sie sich ganz sicher sind, dass Sie die richtigen Schritte ausgeführt haben, folgen Sie der zweiten Antwort. Die Authentifizierung wird irgendwo zwischengespeichert machst du mit einer normalen Anwendung) dann "laufe" das Projekt erneut

34
adelriosantiago

Da ich gerade viel Zeit damit verschwendet habe, die API zum Laufen zu bringen, werde ich versuchen, eine schrittweise Validierung für Map API v2 zu geben:

Schritt 1: Beantragen Sie Ihren API-Schlüssel  

Wenn Sie mit der Google API-Konsole nicht vertraut sind, lesen Sie oben die sehr gute Antwort von Rusfearuth.

Schritt 2: Überprüfe deinen SHA Hash (in diesem Fall verwende ich den Debug-Key von Eclipse): 

Auf einem Windows-Computer gelangen Sie mit einer Eingabeaufforderung in Ihr Benutzerverzeichnis:

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

Sie erhalten so etwas wie:

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

Sehen Sie sich dann den Paketnamen der Kartenaktivität an, z. com.example.mypackagename

Sie kombinieren dies und überprüfen dies anhand Ihrer Einstellungen in der Google API-Konsole:

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

woher bekommst du deinen API-Schlüssel:

AZzaSyDhkhNotUseFullKey49ylKD2bw1HM

Schritt 3. Manifest Metadaten

Prüfen Sie, ob die Metadaten vorhanden sind und enthalten Sie den richtigen Schlüssel. Wenn Sie Ihre App freigeben, benötigen Sie einen anderen Schlüssel.

    <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" />

Schritt 4. Manifest Features:

Sie benötigen diesen Eintrag, da die Karten-API einige Unterstützung für Grapics erfordert:

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

Keine Sorge, 99,7% der Geräte unterstützen dies.

Schritt 5. Manifest Bibliothek:

Fügen Sie die Google-Bibliothek hinzu.

    <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.

Schritt 6. Manifest Berechtigungen:

Überprüfen Sie den Paketnamen zweimal: com.example.yourpackage

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

Fügen Sie die folgenden Berechtigungen hinzu:

<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" />

Die folgenden Berechtigungen sind optional und nicht erforderlich, wenn Sie nur eine Karte anzeigen. Versuchen Sie, sie nicht zu verwenden.

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

Schritt 7. Fügen Sie das Kartenfragment in Ihr Layout ein:

<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" />

Wenn Ihre Version 2.x Android-Versionen ist, müssen Sie Ihrer Aktivität Unterstützung hinzufügen:

import Android.support.v4.app.FragmentActivity;

Für die Map: Einträge zur Arbeit umfassen

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

in Ihrem Aktivitätslayout (z. B. LinearLayout).

In meinem Fall muss ich das Projekt jedes Mal bereinigen, wenn ich etwas im Layout ändere. Scheint ein Fehler zu sein.

Schritt 8: Verwenden Sie Eclipse - Project - Clean.

Genießen!

19

Sie müssen das Bibliotheksprojekt verwenden, das sich unter folgender Adresse befindet: Android-SDK-VERZEICHNIS/Extras/Google/Google_Splayservices/Libproject

Dadurch wird Ihr erstes Problem behoben.

Ich bin mir nicht sicher, was Ihren zweiten betrifft, aber es könnte ein Nebeneffekt des ersten sein. Ich versuche immer noch, die Map in meiner eigenen App zum Laufen zu bringen :)

16
Scott Kennedy

Heute bin ich mit diesem Problem konfrontiert. Ich habe Android Studio 2.1.3, Windows 10, verwendet. Beim Debuggen funktioniert es einwandfrei, aber wenn ich auf den Freigabemodus umstelle, funktioniert es nicht. Ich habe alle Proguard-Bedingungen aufgehoben, aktualisiert, aber dies war keine Lösung. 

Die Lösung hängt mit der Projektstruktur zusammen. Die Datei google_maps_api.xml unterschied sich zwischen app\src\debug\res und app\src\release\res. Ich habe ein manuelles Kopieren aus dem Debug-Ordner in den Freigabeordner eingefügt. 

Jetzt gehts. 

5
Yaya

Ich habe die meisten, wenn nicht alle, der oben genannten Vorschläge von Gunnar Bernstein befolgt, und es hat immer noch nicht funktioniert. Es fing jedoch an zu funktionieren, nachdem ich seinen Vorschlägen UND den folgenden folgte:

  1. Ich habe eine neue MapActivity mit dem Rechtsklick von Android Studio erstellt Liste der Optionen: Neu -> Google -> Google Maps-Aktivität

  2. Ich öffnete dann die Datei google_maps_api.xml , die automatisch Generiert wird, und verwendete den angegebenen Link, um einen neuen API-Schlüssel zu erstellen. Ich habe alle Schritte ausgeführt und meinen neuen Schlüssel unter meinem aktuellen Projekt gespeichert. Ich Entfernte dann meinen alten registrierten API-Schlüssel, da er nicht mehr benötigt wurde.

  3. Unter der Manifest-Datei habe ich den alten API-Schlüsselwert durch die durch diese neue XML-Datei erstellte String-Verknüpfung ersetzt: Android:value="@string/google_maps_key ", anstatt direkt den Schlüssel .

  4. Entfernen Sie schließlich die neue MapActivity, behalten Sie jedoch die XML-Datei bei, die in diesem Prozess erstellt wurde.

Hinweis: Durch das Erstellen des API-Schlüssels auf diese Weise wird in der Spalte "Einschränkungen" unter "Anmeldeinformationen" nun "Android-Apps" angegeben. Früher, als es nicht funktionierte, wurde in der Spalte "Android-Apps, 1 API" oder etwas Ähnliches angegeben. Ich weiß nicht, ob das einen Unterschied macht oder nicht.Hinweis: Nein, das bedeutet nur, dass für diesen API-Schlüssel keine bestimmte API ausgewählt ist (Konsole -> API-Schlüssel -> Schlüsseleinschränkungen -> API-Einschränkungen).

Anmerkung: Es sieht aus wie das Metadaten-Tag unter der Manifest-Datei:

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

wurde ersetzt durch:

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

Ich denke, dass beide verwendet werden können, aber es ist von Anfang an besser, letzteres zu verwenden.

Hinweis: Der in der build.gradle-Datei angegebene Wert unter Android -> defaultConfig -> applicationId muss mit dem Paketnamen - Text auf der Seite "Credentials" übereinstimmen.

4
goldenmaza

Fügen Sie dies einfach in Ihre Manifestdatei ein:

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

Zum Beispiel...

<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>

Und aktualisieren Sie bitte Ihre Google Play-Service-Bibliothek ... Gehen Sie zu Fenster -> Android SDK-Manager -> Update Google Play Service ... installiert es .. Löschen Sie alte und behalten Sie diese. Nehmen Sie das von Android-SDK-DIRECTORY/Extras/google/google_play_services /

Danke .. Bitte stimmen Sie ab

3
Mitul Goti

Ich habe diesen Fehler durch Überprüfen des Paketnamens im Manifest und der App build.gradle behoben.

Im Manifest:

Ich verwende einen Paketnamen als:

com.app.triapp

In App Build.gradle:

 defaultConfig {

        applicationId "com.app.live"
    }

Nachdem ich com.app.triapp in build.gradle geändert hatte, wurde mein Problem behoben.

3
Stephen

Ich migriere von V1 zu V2 von Google Maps. Ich habe diesen Fehler bei der Ausführung der App über Eclipse erhalten. Die Hauptursache für mich war die Verwendung meines Release-Zertifikat-Keystores anstelle des Android-Debug-Keystores, das verwendet wird, wenn Sie es über Eclipse ausführen. Mit dem folgenden Befehl (OSX/Linux) erhalten Sie den SHA1-Schlüssel des Debug-Keystores:

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

Wenn Sie stattdessen Windows 7 verwenden, würden Sie diesen Befehl verwenden:

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

Es ist wahrscheinlich am besten, Ihre App vollständig von Ihrem Gerät zu deinstallieren, bevor Sie es mit einem neuen Schlüssel versuchen, da Android die Sicherheitsinformationen zwischenspeichert. 

2
Chris Knight

Ich hatte dasselbe Problem, aber es stellte sich heraus, dass ich zwei verschiedene Karten-API-Schlüssel mit demselben SHA-1-Fingerabdruck mit einem nahezu ähnlichen Paketnamen com.bla.bla und dem anderen com.bla.bla.something erstellt hatte.

1

"Java.lang.NoClassDefFoundError: com.google.Android.gms.R $ styleable"

Wenn dieser Fehler auch aufgetreten ist, müssen Sie Folgendes tun: Datei -> Importieren -> Vorhandener Android-Code in den Arbeitsbereich -> Durchsuchen -> Android-SDKs -> Extras -> google -> google_play_services -> lib_project -> google_play_services_lib Überprüfen Sie das Projekt und beenden Sie den Vorgang.

Das Projekt geht zum Paket-Explorer. Gehen Sie jetzt zu Ihrem Projekt (mit Fehler) -> Eigenschaften -> Android und klicken Sie in der Bibliothek auf Hinzufügen ... die google_play_services_lib sollte dort sein! hinzufügen und nochmal versuchen :) 

1
edwell

Ich stand vor demselben Problem. 

Wenn Sie eine API für Ihre Release-Version der Anwendung ausgegeben haben, dann funktioniert diese API nur für die Release-Version, nicht für die Debug-Version. Sie sollten also sicherstellen, dass Sie die Release-Version in Ihrem Telefon oder Emulator verwenden.

0
Salman Saleh

Für mich funktionierte alles sowohl in einem Emulator als auch auf einem physischen Gerät.

Es funktionierte jedoch nicht mehr für mich, als ich einen zweiten Computer zum Debuggen derselben App in einem Emulator mit einem neueren API-Level einrichtete.

Ich wusste nicht, dass sich der Fingerabdruck für diese Maschine geändert hat. Nachdem das Fehlerprotokoll der Authentifizierungsfehler im Geräteprotokoll angezeigt wurde, habe ich den Fingerabdruck in meiner Google Developer Console eng mit dem in der Fehlermeldung verglichen. Da sah ich den Unterschied. Nach dem Hinzufügen des neuen Fingerabdrucks zur Entwicklerkonsole (in Kombination mit dem Paketnamen) funktionierte meine App erwartungsgemäß im Emulator des neuen Systems. 

Wenn Sie also ein neues System einrichten, überprüfen Sie Ihre Fingerabdrücke erneut!

Ich hatte genau das gleiche Problem und musste nur das SDK für das Bibliotheksprojekt von MapsApiV2 auf Android 2.3.3 (API Level 10) setzen

0
Informatic0re

Ich habe den gleichen Schritt in Google Doc ausgeführt, bekam aber den gleichen Fehler. Später erkannte ich, dass ich meine App mit meinem app.keystore und dem SHA - Schlüssel signierte, mit dem der API-Schlüssel generiert wurde. 

Also entfernte ich einfach die signingConfig signingConfig.generic-Datei von by build.gradle und meine Karte funktionierte gut.

Hoffe das hilft jemandem.

0
SKP

Ich hatte das gleiche Problem. Nach etwa zwei Stunden googeln, erneut versuchen, den API-Schlüssel viele Male neu zu generieren usw. entdeckte ich, dass ich den falschen Dienst in der Google APis Console aktiviert habe. Ich habe Google Maps API v2-Dienst aktiviert, aber für Android-Apps müssen Sie Google Maps-Android-API v2 ..__ verwenden. Nachdem der richtige Dienst aktiviert wurde, funktionierten alle.

0
Nino Stella

IHR Eclipse MÖGLICHE ÄNDERUNG DES SHA1-SCHLÜSSELS. Daher müssen Sie Ihren Google-Schlüssel mit dem neuen SHA1-Schlüssel hier neu eingeben: https://console.developers.google.com/project/watchful-net-796/apiui/credential) Danach neuen Schlüssel in Manifest kopieren und diese Google-Seite einige Male neu laden, und Ihr Schlüssel wird aktualisiert. Erstellen Sie Ihr Projekt neu. Es funktioniert. .P/S: Für meinen Fehler, Ich habe den .Android-Ordner gelöscht, also Eclipse regen SHA1.

0
nobjta_9x_tq