web-dev-qa-db-de.com

Fehler beim Laden der Karte. Fehler bei der Kontaktaufnahme mit Google-Servern mit Android Google Maps API v2

Ich habe in den letzten zwei Tagen erfolglos versucht, eine Google Map in meiner Android-App mit der v2-API zu erstellen. Alles was ich jedes Mal bekomme ist a

Google Maps Android API(16603): Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).

Ich habe das Setup-Tutorial von Google ( https://developers.google.com/maps/documentation/Android/start ) befolgt, mehrere Male mit verschiedenen Projekten in verschiedenen Arbeitsbereichen versucht, verschiedene Google-Konten ausprobiert, verschiedene Antworten durchgearbeitet und Vorschläge hier in StackOverflow, aber ohne Erfolg.

Ich verwende Eclipse 4.2.2 mit Android SDK Tools 22.01 und habe die Google Play-Dienste (Version 7) installiert. Außerdem habe ich google-play-services_lib in meinen Arbeitsbereich importiert und meinem Android-Projekt einen Verweis darauf hinzugefügt.

Hier ist mein Code:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.googlemapdemo"
Android:versionCode="1"
Android:versionName="1.0" >

<uses-sdk
    Android:minSdkVersion="8"
    Android:targetSdkVersion="17" />

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

<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />

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

<application
    Android:allowBackup="true"
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/AppTheme" >
    <activity
        Android:name="com.example.googlemapdemo.MainActivity"
        Android:label="@string/app_name" >
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <meta-data
        Android:name="com.google.Android.maps.v2.API_KEY"
        Android:value="my_api_key" />
</application>

</manifest>

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:map="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/the_map"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:name="com.google.Android.gms.maps.SupportMapFragment"
/>

MainActivity.Java

package com.example.googlemapdemo;

import Android.os.Bundle;
import Android.support.v4.app.FragmentActivity;
import Android.view.Menu;

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

}

Außerdem habe ich unter https://code.google.com/apis/console/ ein API-Projekt erstellt, in dem ich den Google Maps Android API v2-Dienst aktiviert habe. Dann erhielt ich meinen Fingerabdruck des SHA1-Debug-Zertifikats mit

keytool -list -v -keystore "C:\Users\my_user_name\.Android\debug.keystore" -alias androiddebugkey -storepass Android -keypass Android

und gib das und den Paketnamen in die API-Konsole ein, holte den API-Schlüssel und legte ihn im Manifest ab (wobei my_api_key ist). Dieses Verfahren habe ich einige Male wiederholt, wobei der Schlüssel neu generiert wurde, jedoch mit demselben Ergebnis.

Könnte jemand dabei helfen oder etwas anderes vorschlagen, was ich versuchen könnte? Jede Hilfe wird sehr geschätzt!

24
pharlez

Ich fand es schließlich, nachdem ich das WLAN auf dem Gerät, das ich verwendete, ausgeschaltet hatte. Es scheint, dass Sie beim Debuggen über WLAN auch das benötigen 

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

im Manifest Ich weiß nicht, ob es nur mein Fall war oder eine allgemeine Sache, aber ich denke, es sollte irgendwo in der Dokumentation sein (ist es nicht).

Wenn Sie dies also lesen und ähnliche Probleme haben, deaktivieren Sie entweder WLAN oder fügen Sie die obigen Berechtigungen neben den anderen hinzu.

22
pharlez

Einfach.

Wenn Sie sicher sind, dass der API-Schlüssel richtig ist und dieser Fehler immer noch in Logcat, Auftritt, versuchen Sie Folgendes: 

  1. App vom Gerät deinstallieren 
  2. Reinigen Sie das Projekt 
  3. Und wieder auf dem Gerät ausführen

Die Karte sollte jetzt auf dem Gerät angezeigt werden .... das hat für mich funktioniert .. Prost :)

24
Pravin Mohol

Stellen Sie sicher, dass Sie die Anweisungen in der Dokumentation sorgfältig befolgen:

https://developers.google.com/maps/documentation/Android/start#obtain_a_google_maps_api_key

Ab dem neuen ADT sollten Sie eine Fehlermeldung im Logcat-Viewer erhalten, die Ihnen explizite Anweisungen gibt, z. B. wohin Sie gehen müssen, was aktiviert werden soll und welche Details Sie in den Android-Fingerabdruck und die App-Details einfügen müssen. Siehe unten;

enter image description here

Ein paar Gochas;

  1. Aktivieren Sie BEIDEGoogle Maps-Android-API v2 AND Google Play-Android-Entwickler-API in der Entwicklerkonsole! Das hat mich :)

  2. Stellen Sie sicher, dass Sie den korrekten Keystore verwenden, um den SHA1-Hash zu finden (Dies finden Sie unter Fenster-> Voreinstellungen-> Android-> Build und suchen Sie nach SHA1. Dies wird angezeigt unterscheiden sie sich von ihrem produktionsschlüsselspeicher! Andernfalls können Sie keytool -list -v -keystore YOURKEYSTORE.keystore -alias YOURALIAS verwenden, um den SHA1 anzuzeigen

  3. Fügen Sie Ihre Elemente INSIDE Ihre Tags hinzu

  4. Fügen Sie Ihre Elemente INSIDE das <.manifest> -Tag (über dem Tag) hinzu.

10
Garbit

Diese Erlaubnis löste das Problem

<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/> 
5
Inc
<meta-data
    Android:name="com.google.Android.maps.v2.API_KEY"
    Android:value="my_api_key" />

Android: value = "my_api_key" sollte ein tatsächlicher Schlüssel sein, den Sie erhalten von https://code.google.com/apis/console

3
user1154920

Ich bin auf das gleiche Problem gestoßen und habe festgestellt, dass diese Berechtigungen funktionieren. 

<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES" />
3
Gustavo Guevara

Ich denke, es ist das Problem Ihres API-Schlüssels.

Testen Sie das Android-Beispielprojekt für Karten (Google Play Service) aus einem neuen Projekt.

und fügen Sie Ihren API-Schlüssel der Maps-Datei AndroidManifest.xml hinzu.

Wenn es nicht funktioniert, liegt das Problem beim API-Schlüssel.

2
Swap

Die Antwort für meine ähnliche Ausgabe lautet:

<uses-permission Android:name="Android.permission.ACCESS_WIFI_STATE" />
2
Zephyr

um nur zu sagen, ich war mir sicher, dass ich alles gut gemacht habe, aber schließlich fiel mir auf, dass der Name des Pakets im Projekt nicht mit dem in der AndroidManifest.xml deklarierten Paket übereinstimmt, also nicht der Name in der Google APIs Console.

Weißt du was, ich habe es geändert und ... tadaa es hat funktioniert!

Wer also hierher kommt, sollte das auch überprüfen!

2
Karl.S

Verbringen Sie einfach ein paar frustrierende Stunden mit demselben Problem. 

Versuchte, die mapdemo-Anwendung von Google auszuführen. Generierte neue Schlüssel usw. würden immer noch nicht ausgeführt. 

Eine einfache Lösung wie oben beschrieben bestand darin, die App vom Tablet zu löschen und erneut für Eclipse auszuführen. Problem ging weg.

In Eclipse: Window, Preferences, Android, Build, SHA1-Fingerabdruck aus dem Debug-Keystore ist der Wert, den Sie benötigen (dies entspricht der von Google dokumentierten Methode, die Keytool über die Befehlszeile verwendet).

2
jimsis

Vergewissern Sie sich, dass "Google Maps Android API Version 2" aktiviert ist.... Unter der Google APIs-Konsole Dienste (siehe Abbildung unten ...). Wenn diese Option nicht aktiviert ist, erhalten Sie keine Fehlermeldung, dass der Dienst deaktiviert ist .__ Sie haben den SHA1-Schlüssel eingegeben.

Bildschirmfoto

2
Peter File

Meine Lösung war die korrekte Datei

in meinem Fall habe ich debug.keystore in C:\Users\.Android verwendet, um SH1 KEY zu generieren

nach ein paar mal versuchen, eine gefundene Datei in C:\Users \\ Downloads\adt-bundle-windows-x86_64\adt-bundle-windows\sdk.Android zu verwenden, um den SH1-Schlüssel zu erzeugen

und kopiere dann 45:B5:E4:6F:36:AD:0A:98:94:B4:02:66:2B:12:17:F2:56:26:A0:E0-Werte den API-Schlüssel site

Alle arbeiten wieder

2
rtorrens

Ich habe eine neue Lösung gefunden, die mein dummer Fehler war.

Möglicherweise haben Sie nach der Google Map-Integration application package name geändert.

Ein SHA1-Zertifikat Fingerabdruck und Paketname (durch ein Semikolon getrennt) pro Zeile. Beispiel: 

45:B5:E4:6F:36:AD:0A:98:94:B4:02:66:2B:12:17:F2:56:26:A0:E0;com.example

Überprüfen Sie Google API Console

1
Pratik Butani

Vergewissern Sie sich, dass Sie die apk mit dem richtigen Schlüssel signiert haben

http://developer.Android.com/tools/publishing/app-signing.html

1
Michal Hatak

Nachdem ich mehrere Stunden damit verbracht hatte und jedem Tipover Stackoverflow gefolgt war, habe ich es als letztes probiert. 

Ich wollte, dass meine Karte in einer anderen Aktivität angezeigt wird, die ich mapActivity und nicht mainActivity nenne. Beim Erstellen des Schlüssels sh1 in der Google Console-API habe ich den Paketnamen für meine mapActivity eingegeben. 

!! ABER es muss immer der Paketname der Hauptaktivität sein, auch wenn Sie die Karte dort nicht anzeigen, also = packagename.appname von mainactivity

0
Per Johannessen

Ich habe diese Art von Problem gelöst. Ich hoffe, dass Leute, die das gleiche Problem bei mir finden (hoffentlich niemand anderes den gleichen Fehler), das hilfreich finden

meine Ursache war, dass ich beim Erstellen des Projekts einen Fehler gemacht habe. Der Paketname war falsch. Dann wurde der Paketname des Projekts geändert. Dadurch werden 2 Anwendungen mit demselben Namen, aber einem anderen Paketnamen erstellt. Ab hier funktionierten die Karten nicht mehr. selbst wenn ich den serverseitigen google-api-schlüssel geändert habe, funktioniert es trotzdem nicht. 

lösung: Versuchen Sie, zuerst beide Apps zu deinstallieren und die Lösung zu bereinigen. und die Karte wird wieder angezeigt.

0
Junius

Stellen Sie sicher, dass Sie den Fingerabdruck des Debug-Zertifikats und keinen Freigabe-Fingerabdruck in der Google Developers Console verwenden. Anweisungen zum Finden Ihres Debug-Schlüssels finden Sie hier .

0
Oscar