Google Haritalar Android API v2 Yetkilendirme hatası


95

Adımlarım:

  • debug.keystore'dan SHA1 kodu aldı
  • google apis konsolunda uygulama oluştur
  • etkin google harita api v2
  • girdi SHA1; my.package.name
  • API anahtarı al
  • AndroidManifest dosyası oluşturuldu:

        <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>
    
  • oluşturulan düzen

  • "google-play-services.jar" dosyasını libs'e koyun

Derlemeden sonra çökme yaşıyorum:

  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)

Bundan sonra düzeni şu şekilde değiştirdim:

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

ve MyActivity'yi şu şekilde değiştirdi:

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

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

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

Sonuç olarak uygulama başlatıldı ancak haritayı görmedim.

Konsol günlüğü:

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

1
AMAN TANRIM! her zaman aynı hata R $ stilable sınıf bulunamadı. Şimdi kodumu MapFragment'ı uygulamak için programatik yönteminize değiştirdim ve işe yarıyor! Teşekkürler! Ancak aşağıda açıklandığı gibi anahtar oluşturmanız gerekir
Informatic0re

Yanıtlar:


105

Adımlar :

  • cihazın Google Play hizmetleri APK'sına sahip olduğundan emin olmak için
  • Google Play Hizmeti rev. 2'den fazla

görüntü açıklamasını buraya girin

  • https://code.google.com/apis/console/ adresinde proje oluşturmak için
  • "Google Haritalar Android API v2" yi etkinleştirmek için görüntü açıklamasını buraya girin
  • projede SHA1'e kaydolmak için ( ŞİMDİ, SHA1 YAZMALISINIZ; uygulamanız.package.name ) ve API KEY'i alın
  • ANDROID_SDK_DIR / extras / google / google_play_services / libproject / google-play-services_lib dizinini projenizin kök dizinine kopyalamak için
  • YOUR_PROJECT / project.properties öğesine sonraki satırı eklemek için

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

  • sonraki satırları eklemek için YOUR_PROJECT/proguard-project.txt

.

-keep class * extends java.util.ListResourceBundle {

   protected Object[][] getContents();

}

Artık Android için Google Harita API'leri V2'yi kullanarak kendi Google Harita uygulamanızı oluşturmaya hazırsınız.

Min SDK = 8 ile uygulama oluşturursanız, lütfen MapFragment yerine android destek kitaplığı v4 + SupportMapFragment kullanın.


Bu talimatlar tüm işi yapmadı. Proguard.cfg'yi maps API örnek uygulamasından kopyalamam gerekiyordu. Ancak o zaman çalışmaya başladı.
Yoel Gluschnaider

Ayrıca, İmza Algoritmasının SHA1withRSA olması GEREKİR ve SHA256withRSA DEĞİL (hata ayıklama anahtarı için eclipse tarafından oluşturulan varsayılan) olduğunu fark ettim.
Yoel Gluschnaider

1
Teşekkürler! to enable "Google Maps Android API v2" -Adım sorunumu çözdü.
Johan

1
@YoelGluschnaider: Varsayılan algoritmayı SHA256withRSA'dan SHA1withRSA'ya nasıl değiştirebilirim?
Santhosh

Teşekkür ederim! SupportMapFragment'ı kullanma fikriniz beni kurtardı.
Ilya Kogan

35

Ayrıca şu gönderiyi kontrol edin: Google Map Android Api V2 Örnek Kod çalışmıyor , doğru adımları uyguladığınızdan tamamen eminseniz, ardından ikinci cevabı izleyin, kimlik doğrulama bir yerde önbelleğe alınır, uygulamayı manuel olarak kaldırmayı deneyin (tıpkı normal uygulama) ardından projeyi tekrar "Çalıştır"


6
Bunun işe yaradığına inanamıyorum. Teşekkürler @Alejandro del Rio :)
phil

Bahse girerim, tıpkı benim gibi, buradaki insanların% 90'ı bu cevabı gerçekten istiyor ve seçilen cevabı değil (aynı zamanda yardımcı olsa da)
Kalisky 9'14

Benim durumumda önbellek (?), Günlükte kimlik doğrulama hata mesajı ile Stackoverflow'u okurken güncellendi. Uygulama, ekran ile çalışıyordu, birkaç dakika sonra harita yüklendi ve artık kimlik doğrulama hatası yok. Sanırım bir yeniden yükleme de yapardı.
John

2
Gelecekteki okuyucular için. Sil binve gen. Temizleyin, yeniden oluşturun ve önbelleğe alınan kimlik bilgileri yenilenir.
George Daramouskas

20

API'yi çalıştırmak için çok fazla zaman harcadığım için, Map API v2 için adım adım doğrulama yapmaya çalışacağım:

1. Adım: API anahtarınız için başvurun

Google API konsoluna aşina değilseniz, yukarıdaki Rusfearuth'un çok güzel cevabını okuyun.

Adım 2: SHA Hash'inizi kontrol edin (bu durumda eclipse'in hata ayıklama anahtarını kullanıyorum):

Bir Windows makinesinde, bir komut isteminde kullanıcı dizininize gidin:

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

Şunun gibi bir şey alacaksın:

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

Ardından, harita etkinliğinin paket adına bakın, örneğin com.example.mypackagename

Bunu birleştirir ve Google API konsolundaki ayarlarınızla şunları kontrol edersiniz:

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

API anahtarınızı nereden alırsınız:

AZzaSyDhkhNotUseFullKey49ylKD2bw1HM

3. Adım. Meta verileri bildirme

Meta verilerin mevcut olup olmadığını ve doğru anahtarı içerip içermediğini kontrol edin. Uygulamanızı yayınlarsanız, farklı bir anahtara ihtiyacınız vardır.

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

Adım 4. Manifest özellikleri:

Harita API'si bazı grapics desteği gerektirdiğinden bu girişe ihtiyacınız var:

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

Merak etmeyin, cihazların% 99,7'si bunu destekliyor.

Adım 5. Manifest kütüphanesi:

Google kitaplığını ekleyin.

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

Adım 6. Bildirme izinleri:

Paket adını iki kez kontrol edin: 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" />

Aşağıdaki izinleri ekleyin:

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

Aşağıdaki izinler isteğe bağlıdır ve yalnızca bir harita gösterirseniz gerekli değildir. Onları kullanmamaya çalışın.

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

Adım 7. Harita parçasını mizanpajınıza dahil edin:

<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 sürümüne sürümünüz varsa, Aktivitenize destek eklemeniz gerekir:

import android.support.v4.app.FragmentActivity;

Harita için: çalışılacak girişler şunları içerir:

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

etkinlik düzeninizde (örn. LinearLayout).

Benim durumumda, yerleşimdeki her şeyi değiştirdiğimde projeyi temizlemem gerekiyor. Bir böcek gibi görünüyor.

Adım 8: Eclipse - Project - Clean kullanın.

Zevk almak!


Adımlarınızı takip ediyorum ama api anahtarında hata, herhangi bir çözüm var mı?
Hemantvc

1
<Meta-data android: name = "com.google.android.maps.v2.API_KEY" android: value = "AZzaSyDhkhNotUseFullKey49ylKD2bw1HM" /> için +1
The-null-Pointer-

16

ANDROID-SDK-DIRECTORY / extras / google / google_play_services / libproject adresinde bulunan kitaplık projesini kullanmanız gerekir.

Bu, ilk sorununuzu çözecektir.

İkincinizden emin değilim ama ilkinin bir yan etkisi olabilir. Hala haritayı kendi uygulamamda çalıştırmaya çalışıyorum :)


Ekstralar / google / google_play_services / libproject / libs / google-play-services.jar dosyasını MY_PROJECT / libs klasörüne kopyaladım.
Rusfearuth

Yeterince iyi değil. Birçok kaynak içerdiği için kütüphane projesinin tamamını kullanmanız gerekir. Eclipse'de, yeni bir Android projesini içe aktarabilir ve onu libproject dizinine yönlendirebilirsiniz. Ardından kendi projenizin özelliklerinde ona bir referans ekleyin.
Scott Kennedy

Eclipse kullanmıyorum (Fikir kullanın)
Rusfearuth

Kitaplık projelerinin Idea'da nasıl çalıştığından emin değilim, ancak blogs.jetbrains.com/idea/2010/09/… bu bilgiye sahip olmalı.
Scott Kennedy

17
Neden işe yaramadığını buldum. Google Map Android API v2 hizmeti yerine Google Map API v2'yi açtım. = (Yazıklar olsun bana ....
Rusfearuth

5

Bugün bu sorunla karşılaştım. Android Studio 2.1.3, Windows 10 kullandım. Hata ayıklarken iyi çalışıyor, ancak yayın moduna güncelleme yaparsam çalışmıyor. Tüm proguard koşullarını temizledim, güncelledim, ancak bu çözüm olmadı.

Çözüm, proje yapısı ile ilgilidir. Google_maps_api.xml dosyası app \ src \ debug \ res ve app \ src \ release \ res arasında farklıydı. Hata ayıklamadan sürüm klasörüne el ile kopyalayıp yapıştırdım.

Şimdi çalışıyor.


4

Gunnar Bernstein'ın yukarıda bahsedilen önerilerinin hepsini olmasa da çoğunu takip ettim ve yine de işe yaramadı. Ancak onun önerilerini VE aşağıdaki hususları uyguladıktan sonra çalışmaya başladı:

  1. Android Studio'nun sağ tıklama seçeneklerini kullanarak yeni bir MapActivity oluşturdum: Yeni -> Google -> Google Haritalar Etkinliği

  2. Daha sonra otomatik olarak oluşturulan google_maps_api.xml dosyasını açtım ve yeni bir API KEY oluşturmak için belirtilen bağlantıyı kullandım. Tüm adımları yaptım ve yeni anahtarımı mevcut projemin altına kaydettim. Daha sonra artık gerekli olmadığından eski kayıtlı API KEY'imi kaldırdım.

  3. Manifest dosyasının altında, KEY'i android:value="@string/google_maps_keydoğrudan belirtmek yerine eski API KEY değerini bu yeni XML dosyası tarafından oluşturulan dize kısayolu ile değiştirdim: ".

  4. Son olarak, yeni MapActivity'yi kaldırın, ancak bu işlemde oluşturulan xml dosyasını saklayın.

Not: API KEY'i bu şekilde oluşturduğunuzda, Kimlik Bilgileri altındaki Kısıtlamalar sütununda artık "Android uygulamaları" belirtiliyor. Daha önce, çalışmadığında sütunda "Android uygulamaları, 1 API" veya benzeri bir şey belirtiliyordu. Bunun bir fark yaratıp yaratmadığını bilmiyorum. Not: Hayır, bu sadece bu API anahtarı için seçili belirli bir API'ye sahip olmadığım anlamına gelir (Konsol -> API anahtarı -> Anahtar kısıtlamaları -> API kısıtlamaları).

Not: Manifest dosyasının altındaki meta veri etiketine benzer:

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

ile değiştirildi:

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

Her ikisinin de kullanılabileceğini tahmin ediyorum ama ikincisini kullanmaya baştan daha iyi.

Not: build.gradle dosyasında android -> defaultConfig -> applicationId altında belirtilen değer, Kimlik Bilgileri sayfasının altındaki Paket adı metniyle eşleşmelidir .


Bana tam olarak ne oldu ve bu çözüm konsoldan gelen uyarıyı düzeltti. Bir şekilde İyonik yapı onu değiştirdi.
spaceman

8 saat aradıktan sonra geriye dönüp bu çözümü uyguluyorum. Solved!!!
meyasir

3

Bunu manifest dosyanıza eklemeniz yeterlidir:

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

Örneğin...

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

Ve lütfen google play servis kütüphanenizi güncelleyin ... Pencereye gidin -> Android sdk yöneticisi-> google play servisini güncelleyin ... onu kurun. Eski olanı silin ve bunu saklayın. Bunu ANDROID-SDK-DIRECTORY / extras / google / google_play_services / adresinden alın

Teşekkürler .. Lütfen oy verin


3

Bu hatayı manifest ve uygulamadaki paket adını kontrol ederek çözdüm build.gradle.

Açıkça:

Bir paket adını şu şekilde kullanıyorum:

com.app.triapp

Uygulama build.gradle'da:

 defaultConfig {

        applicationId "com.app.live"
    }

Olarak değiştirilmiştir sonra com.app.triappin build.gradle, sorunumu çözdü.


1
Çok teşekkürler. Tonlarca zamanımı kurtarıyorsun.
YeeKhin

1
Mükemmel kardeşim. Bende her şey yolunda, bunun yerine
Mubashar Javed

2

Google Haritalar’ın V1’den V2’ye geçiş yapıyorum. Eclipse aracılığıyla uygulamayı çalıştırmaya çalışırken bu hatayı alıyordum. Benim için temel neden, Eclipse aracılığıyla çalıştırdığınızda kullanılan Android hata ayıklama anahtar deposu yerine yayın sertifikası anahtar depomu kullanmaktı. Aşağıdaki komut (OSX / Linux) size hata ayıklama anahtar deposunun SHA1 anahtarını verecektir:

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

Bunun yerine Windows 7 kullanıyorsanız, şu komutu kullanırsınız:

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

Android güvenlik kimlik bilgilerini önbelleğe aldığından yeni bir anahtarla denemeden önce uygulamanızı cihazınızdan tamamen kaldırmanız muhtemelen en iyisidir.


1

"java.lang.NoClassDefFoundError: com.google.android.gms.R $ styleable"

Bir de bu hatayı yaşadıysanız, şunları yapmanız gerekir: Dosya -> içe aktar -> Çalışma Alanına Mevcut Android Kodu -> Gözat -> Android sdks -> ekstralar -> google -> google_play_services -> lib_project -> google_play_services_lib ve Tamam. Projeyi kontrol edin ve Bitir.

Proje Paket Gezgini'ne gider. Şimdi projenize gidin (hatalı) -> özellikler -> Android ve Kitaplık'ta Ekle'yi tıklayın ... google_play_services_lib orada olmalı! ekleyin ve tekrar deneyin :)


1

Aynı sorunu yaşadım ancak bunun nedeni, neredeyse benzer paket adıyla com.bla.blave diğeriyle aynı SHA-1 parmak iziyle iki farklı harita API anahtarı oluşturduğumdan kaynaklanıyordu com.bla.bla.something.


0

Tam olarak aynı sorunu yaşadım ve MapsApiV2'nin kitaplık projesi için SDK'yı Android 2.3.3'e (API lvl 10) ayarlamam gerekiyordu


Bunları hatırlayamıyorum
Informatic0re

0

Ben de aynı sorunu yaşadım. Yaklaşık iki saatlik googling, yeniden denemeler, birçok kez API Anahtarını yeniden oluşturduktan vb. Sonra, Google APis Konsolunda yanlış hizmeti etkinleştirdiğimi keşfettim. Google Haritalar API v2 Hizmetini etkinleştirdim , ancak Android Uygulamaları için Google Haritalar Android API v2'yi kullanmanız gerekiyor . Doğru hizmeti etkinleştirdikten sonra hepsi çalışmaya başladı.


0

ECLIPSE MAYBE SHA1 ANAHTARINIZI DEĞİŞTİRDİ, bu nedenle google anahtarınızı yeni SHA1 anahtarıyla şurada yeniden oluşturmanız gerekir: https://console.developers.google.com/project/watchful-net-796/apiui/credential Bundan sonra, yeni anahtarı kopyalayın Manifest'e girin ve bu google sayfasını birkaç kez yeniden yükleyin ve anahtarınız güncellenecek, projenizi yeniden oluşturacak, çalışacaktır. P / S: Hatam için .android klasörünü sildim, böylece SHA1'i tutulması.


0

Google Dokümanında verilen adımı takip ettim ama aynı hatayı alıyordum. Daha sonra uygulamamı app.keystore ile imzaladığımı ve API anahtarını oluşturmak için kullandığım SHA anahtarının hata ayıklama anahtarı olduğunu fark ettim.

Yani basitçe kaldırıldı signingConfig signingConfig.generictarafından gelen build.gradledosya ve benim haritası çalışması cezası başladı.

Umarım bu birine yardımcı olur.


0

Ben de aynı sorunla karşılaştım.

Uygulamanın yayın sürümü için bir API yayınladıysanız. O zaman bu api, hata ayıklama sürümü için değil yalnızca yayın sürümü için çalışacaktır. Bu nedenle, telefonunuzda veya emülatörünüzde yayın sürümünü kullandığınızdan emin olun.


0

Benim için her şey hem bir emülatörde hem de fiziksel bir cihazda çalışıyordu.

Ancak, aynı uygulamayı daha yeni bir API düzeyine sahip bir öykünücüde hata ayıklamak için ikinci bir makine kurduğumda benim için çalışmayı bıraktı.

O makinenin parmak izinin değiştiğini fark etmemiştim . Cihaz Günlüğünde kimlik doğrulama hatası hata günlüğünü gördükten sonra, Google Geliştirici Konsolumdaki parmak izini hata mesajındakiyle yakından karşılaştırdım. İşte o zaman farkı gördüm. Yeni parmak izini Developer Console'a (paket adıyla birlikte) ekledikten sonra uygulamam, yeni sistemdeki emülatörde beklendiği gibi çalışmaya başladı.

Yani yeni bir sistem kurarsanız, parmak izlerinizi tekrar kontrol edin!


0
  • SDK for AndroidAPI konsolunda Haritalar'ın etkinleştirildiğinden emin olun .
  • Ayrıca, anahtarınızın tam olarak etkinleştirilmesi için kullanımı kısıtlamak üzere paket adınızı ve SHA-1 imzalama sertifikası parmak izinizi eklemeniz gerekebilir.

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.