it-swarm.com.de

Android: Google Map v2 zeigt keine Karte für die Veröffentlichung von apk an

Meine Google Map-App funktioniert auf Geräten mit dem Debug-Google-Map-API-KEY einwandfrei, aber wenn ich signierte APK-Dateien für meine App mit dem Release-Google-Map-API-KEY erstellt, wird keine Map angezeigt SHA1 Fingerprint mit meinem Keystore ..__ Und ich definiere auch "Signier- und Build-Typen" in meinen Projekteinstellungen, wie von developer.Android.com ( http://developer.Android.com/tools/publishing/app.) Erklärt -signing.html ).

Ich habe jede mögliche Lösung ausprobiert (apk entfernen und dann erneut installieren, Gerät neu starten, Projekt reinigen). Nichts hat geklappt. Jeder hat eine gute Lösung für mein Problem, bitte helfen Sie. Zu Ihrer Information Verwenden Sie die Plattform für Android-Studios.

16
sam2395

Möglicherweise haben Sie zwei Dateien google_maps_api.xml, eine im Ordner app/src/debug/res/values ​​und die andere im Ordner app/src/release/res/values, aber nur die Debug-Datei enthält Ihren API-Schlüssel.

23
Arslan

Der API-Schlüssel muss im Android-Manifest fest codiert sein und funktioniert nicht, wenn er sich in einer separaten XML-Ressourcendatei befindet. 

14
Florence Herrou

Debug-Zertifikat ist anders von Ihrem Produktionszertifikat. Sie müssen beide zu Ihrem Google Maps-Schlüsseleintrag in Ihrer API-Konsole als Seaparate-Zeile hinzufügen - jeweils mit derselben packageId, aber natürlich einem anderen SHA1-Hash.

EDIT

Es gibt keine Beschränkung, wie viele Fingerabdrücke für Zertifikate und Paketnamen einem einzelnen Google Maps-Schlüssel zugewiesen werden. Wenn dies nicht erforderlich ist, ist dies völlig in Ordnung, wenn sowohl Entwicklungs- als auch Produktions-Builds mit demselben Schlüssel erstellt werden. In Google Console wäre das so (ein sha1 ist von debug cert, was für alle Apps, die Sie mit dieser IDE erstellen, gleich ist, das andere ist Produktions-cert):

83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foo.bar
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar

oder sogar (ich empfehle jedoch nicht, denselben Schlüssel für verschiedene Apps zu verwenden):

83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foobar.myapp
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar
EF:3B:59:7E:19:FB:83:10:58:57:AE:4F:5E:1D:F0:2B:28:DE:9E:01;net.something.otherapp
6
Marcin Orlowski

Ich hatte dieses Problem und diese Schritte sind meiner Meinung nach perfekt und vollständig

Für Android Studio:

  1. Build-Generated Signed APK
  2. Schlüsselspeicherpfad kopieren.
  3. Öffnen Sie nun eine Eingabeaufforderung, und wechseln Sie zu C:\Programme\Java\jdk1.6.0_39\bin> (oder einer beliebigen installierten Jdk-Version).
  4. Geben Sie keytool -list -v -keystore ein und fügen Sie dann Ihren Key Store-Pfad ein (zB C:\Programme\Java\jdk1.6.0_39\bin> keytool -list -v -keystore "E:\Meine Projekte\Android\android studio\signierte apks\Hello World\HelloWorld.jks ").
  5. Jetzt werden Sie nach dem Schlüsselspeicher-Kennwort gefragt, geben Sie Ihr Kennwort ein und drücken Sie die Eingabetaste, um Ihre SHA1- und MD5-Zertifikatschlüssel zu erhalten.
  6. Sie können SHA1 für Ihr Debug-Zertifikat und die Verwendung in der Entwicklerkonsole von Google Sehen
3
JJorian

Es gibt zwei Dinge, an die man sich erinnern muss, damit das funktioniert. 

  1. Build-Variante debuggen

    • Generieren Sie einen neuen Android-Debugkey mit dem Keytool
    • Ordnen Sie diesen Schlüssel (SHA-1) dem Android-Karten-API-Schlüssel auf der Google-Konsole zu 
    • Der Debug-Modus enthält eine google_maps_api.xml-Datei, in der der Android-Karten-API-Schlüssel (src/debug /.../ google_maps_api.xml) als Zeichenfolge "google_maps_key" gespeichert ist.
  2. Build-Variante freigeben

    • Generieren Sie einen neuen Android-Freigabeschlüssel mit dem Keytool
    • Verbinden Sie diesen Schlüssel (SHA-1) mit einem neuen Android-Karten-API-Schlüssel auf der Google-Konsole
    • Der Freigabemodus verfügt über eine google_maps_api.xml, in der der Android-Karten-API-Schlüssel (src/release /.../ google_maps_api.xml) als Zeichenfolge "google_maps_key" gespeichert ist.

Fügen Sie in der AndroidManifest.xml folgende Zeile hinzu:

<meta-data
        Android:name="com.google.Android.geo.API_KEY"
        Android:value="@string/google_maps_key" />

Befolgen Sie das normale Verfahren zum Debuggen und Freigeben. Es sollte nahtlos funktionieren.

2
Anil Muppalla

Entschuldigung für die späte Antwort. Ich hoffe, dies hilft in der Zukunft. Ich benutze diese Lösung, um das gleiche Problem zu lösen. Wenn wir Google Maps während der Entwicklung verwenden, wird ein Standard-debug.keystore verwendet, der kein Kennwort enthält. Wenn wir eine apk-Datei erstellen, die im Play Store hochgeladen wird, wird ein neuer SHA-1-Schlüssel erstellt, sodass wir dafür den neuen debug.keystore erstellen müssen. Wir müssen einen neuen API-Schlüssel für diesen SHA-1 erstellen ... - Laut Lösung Wie erhalte ich ein Fingerabdruckzertifikat (SHA1) für OAuth 2.0 unter Android? Wir können SHA-1 für die exportierte apk-Datei erhalten.

Danach verwenden Sie diesen neuen API-Schlüssel in Android Manifest als den vorherigen und Sie sind fertig.

EDIT 1-
Schritte dazu
1) Erstellen Sie eine apk-Datei mit "Export-Assistenten" in der Datei "Android Manifest" Ihres Projekts.
2) Nach dem Einfügen des Schlüssels und vor dem Beenden werden die MD5- und SHA1-Schlüssel wie gezeigt angezeigt. ( http://i.stack.imgur.com/SldEv.png )
3) Erstellen Sie einen neuen API-Schlüssel für ein Android-Projekt in https://console.developers.google.com für den neuen SHA1, der in Punkt 2 abgerufen wird.
4) Verwenden Sie diesen API-Schlüssel in der Manifestdatei wie unten gezeigt

5) Reinigen Sie Ihr Projekt und erstellen Sie die APK-Datei erneut gemäß Punkt 1).
6) In diesem apk können Sie jetzt Google Maps sehen.

2
Kunal

sie können nicht denselben Schlüssel verwenden, den Sie beim Debuggen in der Version verwendet haben. Sie haben unterschiedliche Funktionen. Um dieses Problem zu lösen, müssen Sie einen neuen Google Map Key API KEY aus dem von Ihnen verwendeten Schlüsselspeicher generieren Dieses Video enthält weitere Informationen https://www.youtube .com/watch? v = xLJ0jDFdUZ0

1
Hussein Talib

In der Google Api-Konsole, wo wir den API-Schlüssel erstellt haben, haben wir die Möglichkeit, mehrere Fingerabdrücke zu demselben Schlüssel hinzuzufügen. Was ich getan habe, war das Hinzufügen von zwei SHA1-Fingerabdrücken für meinen Debug-Keystore und den Keystore-Release, und der gleiche API-Schlüssel funktionierte für mich.

Beachten Sie, dass das Folgende speziell für Ubuntu gilt:

  1. Rufen Sie SHA1 für den Debug mit dem folgenden Befehl ab

    keytool -list -v -keystore ~/.Android/debug.keystore -alias androiddebugkey -storepass Android -keypass Android
    
  2. Um SHA1 zur Freigabe zu erhalten, ändert sich der Befehl in

    keytool -list -v -keystore /home/atul/Desktop/Learnings/Projects/TestApp/keystore.jks -alias test -storepass password -keypass password
    

woher 

/home/atul/Desktop/Learnings/Projects/TestApp/keystore.jks ist der Pfad, in dem sich meine Keystore-Datei für die signierte apk befindet

test ist der Name des Schlüsselalias, der beim Generieren des signierten Schlüsselspeichers verwendet wird

und password ist das Passwort, das beim Signieren der apk verwendet wird

Hoffe das hilft. Viel Spaß beim Codieren :)

1
Atul O Holic

Wie erhalte ich den Release-API-SHA1-Fingerabdruck:

installieren Sie Ihre signierte APK über Playstore oder kopieren Sie sie einfach auf das Telefon. 

Schließen Sie das USB-Kabel an, wenn es sich um ein echtes Telefon handelt, und öffnen Sie Android Studio.

Wenn Sie das erste Mal versuchen, Karten zu erhalten, zeigt ein Protokolleintrag Folgendes:

E/Google Maps Android API: In the Google Developer Console (https://console.developers.google.com)

Ensure that the "Google Maps Android API v2" is enabled.
Ensure that the following Android Key exists:

API Key: AIzaS<YOUR KEY YOUR KEY YOUR KEY YOUR KEY>

Android Application (<cert_fingerprint>;<package_name>): 56:AF:B2:<THIS IS WHAT YOU ARE LOOKING FOR>;br.com.tinx.<your package>

folgen Sie dann einfach diesen Anweisungen und erstellen Sie einen neuen Eintrag in der Entwicklerkonsole.

  • wenn Sie Ihre App-Karten vor dem Anzeigen des Protokolls treffen, müssen Sie die App möglicherweise aus dem Speicher schließen und es erneut versuchen.
  • dieses Verfahren sollte auch auf einem Emulator funktionieren.
1
WilliamK

für Futures-Referenzen - mein Fall - gibt es zwei Dateien google_maps_api.xml, in die Sie Ihren Google-API-Schlüssel eingeben müssen. Sie können den Fehler sehr leicht tun, um YOUR_API_KEY nur in einem von ihnen zu ersetzen (insbesondere wenn Sie gerade die Google-API/-App gelöscht und neue erstellt haben)

1
DoruChidean
create another Maps API key (to put in your manifest) corresponding with you release   
keystore for release.

prüfe die Dokumentation von Google

1
Naveen Tamrakar

Wenn Sie SHA1-Code aus einem benutzerdefinierten Keystore erstellen, verwenden Sie denselben Code im Freigabemodus. oder generiere apk durch signieren mit demselben schlüsselspeicher und test.

Zuvor benötigen Sie klare App-Daten (Einstellungen-> App-Auswahl-Daten löschen-> Deinstallieren) und versuchen Sie es. das hat für mich funktioniert. Stellen Sie sicher, dass der Paketname mit dem in der Google-Entwicklerkonsole identisch ist. 

0
Suchith

Ich hatte ein ähnliches Problem und das Problem war, dass ich die apk aus Android Studio generiert habe, ohne zuerst den richtigen Geschmack zu wählen. Dies bedeutet, dass mein Manifest immer noch den Google Maps-API-Schlüssel verwendete, den ich für die Debug-Variante erstellt hatte.

Bitte stellen Sie sicher, dass Sie die Release-Variante in Ihrem Android Studio auswählen. Siehe Screenshot unten:

 enter image description here

0
narko

Ich hatte ein ähnliches Problem: Nachdem ich ein paar neue Varianten mit gleichem Typ erstellt hatte ("release"), aber einige neue Varianten ("free" und "premium"), zeigte das Google Maps-Fragment nicht mehr die Karten und der Bildschirm wurde angezeigt völlig leer Im Logcat konnte ich nur die nächste Fehlermeldung "Unerwarteter Antwortcode 400 für https://clients4.google.com/glm/mmap/api " sehen, die möglicherweise auf ein Problem mit dem Google Maps API-Zugriff hinwies. 

Natürlich habe ich noch einmal den gesamten Google Cloud-API-Prozess überprüft, um zu überprüfen, ob in meinen API-Schlüssel-Anmeldeinformationen etwas fehlt, aber ich habe nichts gefunden. Für neue APKs wird angegeben, die Build-Informationen (Name + Fingerabdruck) zu den vorhandenen Projektanmeldeinformationen hinzuzufügen, um den gleichen noch gültigen API-Schlüssel zu erben. 

Die Anweisungen, die wir lesen können, sind sehr klar: "Fügen Sie den Paketnamen und den Fingerabdruck für das SHA-1-Signaturzertifikat hinzu, um die Verwendung auf Ihre Android-Apps zu beschränken. Rufen Sie den Paketnamen aus Ihrer AndroidManifest.xml-Datei ab fingerprint: keytool -list -v -keystore mystore.keystore ". 

Das Problem in meinem Fall war, dass meine neuen Varianten "Paketnamen" nicht die im Manifest-Paketnamen ("com.example.app_name.release") vorhandene waren. Aufgrund meiner neuen Geschmacksrichtungen hatte ich den gleichen Manifest-Namen, ABER zwei neue "echte" Paketnamen: "com.example.app_name.free.release" und "com.example.app_name.premium.release". Diese Namen werden nicht in die Manifest-Datei geschrieben, da sie der Gradle-Konfiguration entsprechen, in der Flavors definiert sind (in meinem Fall mit dem Attribut "applicationIdSuffix"). Dies ist ziemlich verwirrend für mich, da "Anwendungs-ID" von Gradle nicht mit dem "Paketnamen" von Manifest überlappen sollte. Wenn wir jedoch die gesamte Android-Dokumentation sorgfältig durchlesen, können wir lesen: "Wenn der Name des Manifestpakets sich von Gradle applicationId unterscheidet, kopiert build die Anwendungs-ID in die endgültige Manifestdatei". Natürlich haben beide Varianten den gleichen Fingerabdruck, da beide noch vom selben Build-Typ sind ("Release").

Die Lösung bestand also darin, die beiden neuen Varianteneinträge in denselben Projektanmeldeinformationen hinzuzufügen, um denselben API-Schlüssel zu erben:

  • ursprünglicher Eintrag (muss nicht gelöscht werden): Paketname = "com.example.app_name.release" - SHA-1-Zertifikat fingerprint = "xxxxx"

  • neuer Eintrag 1: Paketname = "com.example.app_name.free.release" - SHA-1-Zertifikat fingerprint = "xxxxx" keine Änderung, wie bisher verwendet

  • neuer Eintrag 2: Paketname = "com.example.app_name.premium.release" - SHA-1-Zertifikat fingerprint = "xxxxx" keine Änderung, wie bisher verwendet

Schließlich kann es erforderlich sein, den Build zu bereinigen, um sicherzustellen, dass Sie wirklich das korrekte aktualisierte Verhalten in Ihrem Kartenfragment oder Ihrer Aktivität beobachten. 

Bei den übrigen Empfehlungen musste ich sie in meinem Fall nicht anwenden: - Keine Notwendigkeit, den API-Schlüssel im Manifest zu kodieren - Keine Notwendigkeit, einen neuen API-Schlüssel für die neuen Varianten-APKs zu erstellen .__ - Keine Notwendigkeit, die Dateien google_maps_api.xml zu verwenden

0
Javi