Ошибка авторизации Google Maps Android API v2

мои действия:

  • получил код SHA1 из отладки.хранилища ключей
  • создать приложение в Google apis console
  • включен Google map api v2
  • вход в SHA1;мой.пакет.имя
  • получить ключ API
  • создается файл AndroidManifest:

        <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>
    
  • создал макет

  • поставить " google-play-services.jar " to libs

после компиляция у меня есть 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)

после этого я изменил макет:

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

и изменил MyActivity на

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

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

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

в результате приложение было запущено, но я не видел карту.

консоль лог:

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

16 ответов


шаги:

  • чтобы убедиться, что устройство имеет Google Play services APK
  • установить Google Play услуг перераб. больше, чем 2

enter image description here

  • создать проект на https://code.google.com/apis/console/
  • чтобы включить " Google Maps Android API v2" enter image description here
  • зарегистрировать SHA1 в проекте (теперь, вам нужно написать SHA1; ваш.app.пакет.имя) на Консоль API и получить ключ API
  • скопировать каталог ANDROID_SDK_DIR / extras / google / google_play_services/libproject / google-play-services_lib в корневой каталог вашего проекта
  • чтобы добавить следующую строку в YOUR_PROJECT / project.свойства

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

  • добавить следующие строки YOUR_PROJECT/proguard-project.txt

.

-keep class * extends java.util.ListResourceBundle {

   protected Object[][] getContents();

}

Теперь вы готовы создать свое собственное приложение Google Map с помощью Google Map APIs V2 для Android.

Если вы создаете приложение с min SDK = 8, используйте библиотеку поддержки android v4 + SupportMapFragment вместо MapFragment.


также проверьте этот пост:Google Map Android Api V2 пример кода не работает, Если вы полностью уверены, что сделали правильные шаги, затем следуйте второму ответу, аутентификация кэшируется где-то, попробуйте удалить приложение вручную (так же, как вы делаете с обычным приложением), а затем "запустите" снова проект


так как я только что потратил много времени на работу API, я попытаюсь дать пошаговую проверку для Map API v2:

Шаг 1: Применитесь для вашего ключа API

если вы не знакомы с консолью Google API, прочитайте очень хороший ответ Rusfearuth выше.

Шаг 2: Проверьте, что вы SHA Hash (в этом случае я использую ключ отладки eclipse):

на машине под Windows у пользователя каталог в командной строке:

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

вы получите что-то вроде:

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

затем посмотрите на свое имя пакета активности карты, например com.образец.mypackagename

вы объединяете это и проверяете это с вашими настройками в консоли Google API:

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

где вы получаете свой API-ключ:

AZzaSyDhkhNotUseFullKey49ylKD2bw1HM

Шаг 3. Манифест метаданных

проверьте наличие метаданных и содержит правильный ключ. Если вы выпускаете приложение, вам нужен другой ключ.

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

Шаг 4. Манифест особенности:

вам нужна эта запись, так как API карты требует некоторой поддержки grapics:

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

не волнуйтесь, 99.7% устройств поддерживают это.

Шаг 5. Библиотека манифеста:

добавить библиотеку 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.

Шаг 6. Декларация permissions:

дважды проверьте имя пакета: com.образец.yourpackage

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

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

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

следующие разрешения являются необязательными и не требуются, если вы просто показываете карту. Постарайтесь не использовать их.

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

Шаг 7. Включите фрагмент карты в свой макет:

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

если ваш релиз 2.X Android версии вам нужно добавить поддержку в вашем Активность:

import android.support.v4.app.FragmentActivity;

для карты: записи для работы включают

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

в вашем макете активности (например, LinearLayout).

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

Шаг 8: Используйте Eclipse-Project-Clean.

наслаждайтесь!


вам нужно использовать проект библиотеки, расположенный по адресу: Android-SDK-каталог / дополнительно / google/google_play_services / libproject

это исправит вашу первую проблему.

Я не уверен насчет второй, но это может быть побочным эффектом первого. Я все еще пытаюсь заставить карту работать в моем собственном приложении:)


сегодня я столкнулся с этой проблемой. Я использовал Android Studio 2.1.3, windows 10. При отладке он работает нормально, но если я обновляю до режима выпуска, он не работает. Я очистил все условия proguard, обновил, но это не было решением.

решение связано со структурой проекта. В google_maps_api.xml-файл отличался от app\src\debug\res и app\src\release\res. Я сделал ручную копию вставки из папки debug в release.

теперь все работает.


я решил эту ошибку путем проверки имя пакета в манифесте и приложение build.gradle.

в манифесте:

я использую имя пакета как:

com.app.triapp

в приложения build.Gradle в:

 defaultConfig {

        applicationId "com.app.live"
    }

после изменено на com.app.triapp на build.gradle, решил мою проблему.


Я мигрирую из V1 в V2 карт Google. Я получал этот сбой, пытаясь запустить приложение через Eclipse. Основной причиной для меня было использование хранилища ключей сертификата выпуска, а не хранилища ключей отладки Android, которое используется при запуске его через Eclipse. Следующая команда (OSX / Linux) получит ключ SHA1 хранилища ключей отладки:

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

Если вы используете Windows 7 вместо этого, вы должны использовать следующую команду:

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

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


просто добавьте это в ваш файл манифеста:

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

Например...

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

и, пожалуйста, обновите свой сервис Google play lib...Перейдите в окно - > Android sdk manager - > обновить службу Google play...установить его..удалите старый и сохраните этот. Возьмите это из Android-SDK-каталог / дополнительно / google / google_play_services/

спасибо..Пожалуйста, проголосуйте


я следовал большинству, если не всем, предложениям Гуннара Бернштейна, упомянутым выше, и это все еще не сработало. Однако он начал работать после того, как я последовал его предложениям и следующим:

  1. Я создал новую MapActivity с помощью правой кнопки мыши Android Studio список опций: Новый - > Google - > Google Maps Активность

  2. затем я открыл google_maps_api.в XML что автоматически генерируется и использовал указанную ссылку для создания нового ключа API. Я сделал все шаги и сохранил мой новый ключ под моим текущим проектом. Я затем удалил мой старый зарегистрированный ключ API, поскольку он больше не требовался.

  3. в файле манифеста Я заменил старое значение ключа API на строка ярлык, созданный этим новым XML-файлом: android:value="@string/google_maps_key", вместо указания ключа непосредственно.

  4. наконец, удалите новую MapActivity, но сохраните xml-файл, который был созданный в этом процесс.

Примечание: создавая ключ API таким образом, столбец ограничений в разделе Учетные данные теперь указано "приложения Android". Ранее, когда он не работал, в столбце говорилось "приложения для Android, 1 API" или что-то подобное. Не знаю, имеет это значение или нет.

Примечание: это похоже на тег метаданных под файлом Манифеста:

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

заменено:

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

Я думаю, что оба могут быть использованы, но это лучше с самого начала использовать последний.

Примечание: значение, указанное в построении.файл Gradle, под android - > defaultConfig - > applicationId должен соответствовать имя пакета текст под страницей учетных данных.


"java.ленг.Ошибке типа noclassdeffounderror: com будет.гуглить.андроид.СБМ.R$styleable"

а это ошибка, нужно: Файл - > импорт - > существующий код Android в рабочую область - > обзор - > Android sdks - > дополнительно - > google - > google_play_services - > lib_project - > google_play_services_lib и OK. Проверьте проект и закончите.

проект переходит в Проводник пакетов. Теперь перейдите в свой проект (с ошибкой) - > свойства - > Android и в библиотеке нажмите кнопку Добавить... этот google_play_services_lib должен быть там! добавьте и повторите попытку:)


у меня была такая же проблема, но оказалось, что это потому, что я создал два разных ключа API карты с тем же отпечатком SHA-1 с почти похожим именем пакета com.bla.bla и другие com.bla.bla.something.


У меня была точно такая же проблема, и мне просто нужно было установить SDK для проекта библиотеки MapsApiV2 на Android 2.3.3 (API lvl 10)


У меня была та же проблема. Примерно через два часа поиска, повторных попыток, многократного восстановления ключа API и т. д. я обнаружил, что включил неправильную службу в консоли Google APis. Я включил сервис Google Maps API v2, но для Android-приложений нужно использовать Google Maps Android API v2. После включения правильного сервиса все начали работать.


ваш ECLIPSE, возможно, изменил ключ SHA1, поэтому вы должны восстановить свой ключ google с новым ключом SHA1 здесь: https://console.developers.google.com/project/watchful-net-796/apiui/credential После этого скопируйте новый ключ в манифест и перезагрузите эту страницу google несколько раз, и ваш ключ будет обновлен, перестройте свой проект, он будет работать. P / S: за мою ошибку я удалил .папка android так затмение regen SHA1.


я следовал тому же шагу, что и в Google Doc, но я получал ту же ошибку. Позже я понял, что подписываю свое приложение своим приложением.хранилище ключей и ключ SHA, который я использовал для создания ключа API, был отладочным.

поэтому я просто удалил signingConfig signingConfig.generic с build.gradle файл и моя карта начали работать нормально.

надеюсь, это кому-то поможет.


Я столкнулся с той же проблемой.

Если вы выпустили api для своей версии приложения. Тогда этот api будет работать только для версии выпуска, а не для отладочной версии. Поэтому убедитесь, что вы используете версию в телефоне или эмуляторе .