Google Maps API V2 «Не удалось загрузить карту. Не удалось связаться с серверами Google.

Я проверил и дважды проверил свой APIkey, который я зарегистрировал в консоли Google, однако я все еще получаю следующую ошибку:

12-05 16:31:12.940: E/Google Maps Android API(12334): Failed to load map.  Could not contact Google servers.

То, что я вижу, это кнопки увеличения/уменьшения масштаба и фон для MapView, но нет карты???!!!

Есть идеи???

Ответить

Я опубликую это здесь, потому что то, что решило мою проблему, было указано в комментариях к принятому ответу ниже.

Это было разрешение READ_GSERVICES. По какой-то причине разрешение не было упомянуто на сайте разработчика, когда дело дошло до их использования.


person StuStirling    schedule 05.12.2012    source источник


Ответы (10)


Для настройки Google Maps API v2 на Android убедитесь, что вы выполнили все следующие шаги.

Ключ приложения для доступа к API

Когда Google запрашивает отпечаток SHA1 вашего сертификата приложения, вы, скорее всего, захотите запустить его дважды, один раз для сертификата отладки и один раз для сертификата публикации.

keytool -list -v -keystore publishcert.keystore
keytool -list -v -keystore ~/.android/debug.keystore

Отпечаток приложения на рынке отличается от отпечатка приложения, которое вы только тестируете!

Включите службу в Google API Console

Войдите в Консоль API Google.
На странице служб найдите Google Maps Android API v2.

Примечание – Google Maps API v2 ОТЛИЧАЕТСЯ от Google Maps Android API v2

На вкладке "Доступ к API" нажмите Create new Android Key

Добавьте свои подписи сертификатов для доступа к API.

yourrelease-fingerprint;com.example.project.package
yourdebug-fingerprint;com.example.project.package

Вам будет предоставлен сгенерированный ключ доступа к API.

Возможно, сначала вам потребуется создать проект API в консоли API

Изменить манифест приложения

Добавьте свой ключ API внутри элемента <application>.

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="yourapikey"/>

Добавьте следующие разрешения:

<permission
        android:name="com.example.project.package.permission.MAPS_RECEIVE"
        android:protectionLevel="signature"/>

<uses-permission android:name="com.example.project.package.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-feature
    android:glEsVersion="0x00020000"
    android:required="true" />
person Matt Clark    schedule 05.12.2012
comment
Определенно подписал его с помощью моего ключа отладки, расположенного в User/.android/debug.keystore - person StuStirling; 05.12.2012
comment
Включили ли вы использование API Карт в консоли Google API? - person Matt Clark; 05.12.2012
comment
Да, немного об услугах, я включил его и принял условия. - person StuStirling; 05.12.2012
comment
Настроить разрешения INTERNET и READ_GSERVICES в манифесте? - person Matt Clark; 05.12.2012
comment
Так же, как вы написали это, я сделал это. Это было разрешение READ_GSERVICES. Следуя разрешению на сайте разработчика, которого там не было? Спасибо за вашу помощь - person StuStirling; 05.12.2012
comment
Не проблема! Рад, что вы нашли свое решение! - person Matt Clark; 05.12.2012
comment
Спасибо. Теперь я добавил READ_GSERVICES, и теперь мой код работает! - person Khushboo; 20.06.2013
comment
Спасибо! После нескольких часов отладки вы заставили меня понять, что я выбираю карту Google вместо карты Google для Android... - person Marc; 16.10.2013
comment
Господи… активация Android API сделала галочку… ну, простой щелчок стоил нескольких часов… спасибо! - person Lukas; 22.04.2015

Убедитесь, что все нижеперечисленные пункты соблюдены:

1) Была включена неправильная служба. Убедитесь, что включен «Google Maps Android API v2», а не «Google Maps API v2», и повторно сгенерируйте ключ API.

2) Добавьте в свой манифест следующие элементы. Замените com.example.mapdemo именем пакета вашего приложения.

3) Использование правильного сертификата и ключа. Сертификат выпуска, который НЕ БУДЕТ РАБОТАТЬ во время отладки, когда вы запускаете приложение на моем телефоне. Вместо этого вы должны использовать отпечаток сертификата хранилища ключей отладки.

person Monika    schedule 23.04.2013
comment
ФУУУУУУУУУУУУУУУУУУУУУУУУУУУ. Хорошо, пропустил Google Maps Android API v2, я идиот. Спасибо - person user1286653; 30.04.2013
comment
Google Maps Android API v2, а не Google Maps API v2 ‹‹‹ моя небрежность - person Hoyin; 30.04.2013
comment
Полдня потратил из-за этой ерунды - person Rohan Kandwal; 01.06.2013
comment
ХА-ХА, та же проблема, я добавил Google Maps API v2, черт возьми, это было неправильно. Четыре часа я не вернусь. Спасибо!!! - person lostintranslation; 15.08.2013

Это может быть проблема с манифестом. Следующие работы для меня, в частности, permission.MAPS_RECEIVE решили аналогичную проблему, которая у меня была: кнопки масштабирования и мое местоположение отображались, но на карте не было плиток...

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.discos2.example"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <permission
        android:name="com.discos2.example.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.discos2.example.permission.MAPS_RECEIVE" />

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

    <uses-feature
        android:name="android.hardware.location"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.location.network"
        android:required="false" />
    <uses-feature android:name="android.hardware.location.gps" />
    <uses-feature
        android:name="android.hardware.wifi"
        android:required="false" />
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:hardwareAccelerated="true">
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="__NEW_GOOGLE_MAPS_V2_KEY_GOES_HERE__" />

        <activity
            android:name=".ui.activities.MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

    </application>

</manifest>
person Mudar    schedule 05.12.2012
comment
Спасибо за публикацию разрешения, которое мне не хватало, это READ_GSERVICES. - person StuStirling; 05.12.2012
comment
Спасибо отличное объяснение! - person Aiden Fry; 29.01.2013

Кстати, я использую Windows 7. Я возился с этим несколько дней, пока не обнаружил следующее: у меня есть более одного хранилища debug.keystore. Один находится по адресу:

C:\android-sdk\.android\debug.keystore

И еще один, по адресу:

C:\Users\David\.android\debug.keystore

Как только я нашел «C:\Users\David.android\debug.keystore», я сделал:

keytool -list -alias androiddebugkey -keystore C:\Users\David\.android\debug.keystore -storepass   android -keypass android -v

Я отправил полученный SHA1 в консоль Google и получил работающий API-ключ. Получение SHA1 из хранилища ключей в «C:\android-sdk.android\debug.keystore» не работает.

person BinCodinLong    schedule 31.03.2013

Я столкнулся с той же проблемой; но для меня это была проблема с хранилищем ключей. Я подписывал его с помощью хранилища ключей отладки, поэтому API карты Google v2 не смог подключиться к карте Google.

Я создал новый ключ API, используя my-release-keystore.keystore (вы можете найти его в C:\Users\{YOUR_USER_NAME}\.android\my-release-key.keystore), сгенерировать SHA1, используя keytool, доступный в JDK; скопируйте его и зарегистрируйтесь в консоли Google.

Используйте ключ API, сгенерированный в файле манифеста вашего приложения. Подпишите его с помощью my-release-key.keystore, нажав на устройство.

person Navi    schedule 28.01.2013

Возможно, вы включили не ту службу «Google Maps Android API v2», а не «Google Maps API v2».

person George Nguyen    schedule 03.05.2013

У меня такая же проблема. Я просто упустил этот момент: когда вы перечисляете свои службы API Google, доступны три API Карт Google.

Google Maps Android API v2
Google Maps API v2
Google Maps API v3 ...

Убедитесь, что у вас включена версия Android (Google Maps Android API v2), когда вы пишете код для Android. Google Maps API v2 был недостаточно хорош.

person Premek    schedule 23.04.2013

Просто создайте новый ключ API с SHA и, самое главное, с правильным именем пакета (например, com.example.mapdemo). Используйте новый сгенерированный ключ в вашем AndroidManifest.xml.

Я предполагаю, что нам нужен новый ключ API для всех новых проектов eclipse, которые используют карты Google (поскольку для создания нового key также требуется имя пакета, которое существенно отличается для всех проектов).

person Hemant    schedule 23.04.2013

Потратив много часов, проблема была в конечном итоге решена:

если ничего из вышеперечисленного не помогло вам решить вашу проблему, попробуйте поместить свой ключ API в values/strings.xml

<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="@string/map_key"/>

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="map_key">YOUR_KEY</string>
</resources>
person ODAXY    schedule 16.07.2013

Я сделал все, что требовалось для выполнения этой задачи. Мой ключ, манифест, код и т. д. были в порядке. Но, в конце концов, после того, как я потратил много времени, хранилище ключей отладки, которое я использовал, было неправильным. В конце концов, все дело в отпечатке SHA1.

person class Android    schedule 10.05.2015