2013-06-19 148 views
24

授權失敗。請參閱https://developers.google.com/maps/documentation/android/start瞭解如何正確設置地圖。谷歌地圖v2:授權失敗

確保以下對應於什麼是在API控制檯:包名稱:com.company.app,API密鑰:AIzaSyC***OsTeo,證書指紋:4E5285***6BF53ED3 無法聯繫谷歌服務器。連接建立後將進行另一次嘗試。

未能加載地圖。聯繫Google服務器時出錯。這可能是一個身份驗證問題(但可能是由於網絡錯誤)。


我知道還有關於此主題的更多問題。 但我似乎無法讓地圖視圖工作。結果是一個空的地圖視圖(帶有縮放按鈕)。

我所做的:
- 下載/安裝谷歌播放服務
- 增加google-play-services.jarlibs/
- 在code.google.com/apis/console啓用Google Maps API v2
- 設置正確的權限

這是我的清單看起來像:

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

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<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" /> 

<permission 
    android:name="com.company.app.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="com.company.app.permission.MAPS_RECEIVE" /> 

<application ...> 
    <meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="AIzaSyC***OsTeo" /> 
</application> 

谷歌API控制檯PI訪問看起來是這樣的:

Key for Android apps (with certificates) 
API key:  AIzaSyC***OsTeo 
Android apps: 4E:52:85:***6B:F5:3E:D3;com.company.app 
Activated on: Jun 18, 2013 11:07 PM 
Activated by: [email protected] – you 

而且一些代碼(我不明白爲什麼這會導致授權錯誤):

FragmentManager fragmentManager = super.getSupportFragmentManager(); 
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
SupportMapFragment fragment = new SupportMapFragment(); 
fragmentTransaction.replace(R.id.mapContainer, fragment); 
fragmentTransaction.commit(); 

正如你可以看到我得到一個錯誤的說法包名稱,api密鑰和證書指紋與Google服務器不符。但就像我上面寫的那樣,這些值確實匹配...

+2

您不應該激活「Google Maps Android API v2」嗎?您可能需要從設備/模擬器中刪除應用程序,清理項目並重新安裝。 – Luksprog

+0

你有沒有在api控制檯中啓用android的谷歌地圖,你是如何參考圖書館項目? – Raghunandan

+0

@Luksprog:該死,多麼明顯。只啓用「Google Maps API v2」而不啓用「Google Maps Android API v2」。現在它完美地工作。謝謝! (你可以粘貼你的評論作爲答案,所以我可以接受它?) – basvk

回答

78

激活Google API's console中的Google Maps Android API v2服務。另外,進行更改後,請在設備/模擬器上完全重新安裝應用程序。

+43

重要的是要注意確保在重建後在設備上進行應用程序的乾淨安裝。 – Robot

+3

非常感謝@Robot ......我花了數小時弄清楚這一點,從來沒有想過解決方案會是這麼簡單! – Zeba

+2

是卸載並重新安裝了ID。 Thx – softwaresupply

1

確保以下幾點:

https://code.google.com/apis/console/?noredirect 
Click on Services(Left side panel) -> Enable Google Maps Android API v2 

爲了讓您的SHA1鍵可以使用:下面的命令 該命令將產生密鑰庫

keytool -genkey -v -keystore GoogleMapV2.keystore -alias GoogleMapV2 -keyalg RSA - keysize 2048 -validity 10000 

此命令給SHA1密鑰等信息

keytool -list -v -keystore ~/path/to/GoogleMapV2.keystore -alias GoogleMapV2 -storepass any-password -keypass any-password i.e : 

68:1C:74:24:7B:1F:9C:71:76:DD:69:4F:F2:8F 

:Your Keys inside <application> </application>標籤

<meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="YOUR KEY" /> 
<meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 

權限之外<application> </application>標籤,在頂部

<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" /> 
    <!-- 
    The following two permissions are not required to use 
    Google Maps Android API v2, but are recommended. 
    --> 
    <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" /> 

注: 使用Eclipse或模擬器,碰上真正的設備應用程序不使用其他日食不要運行通過創建 的APK將採取不正確的調試密鑰。

VkJ

4

我有同樣的問題,但已激活相應的API。問題是我在獲取SHA1時使用了錯誤的keystore文件。我使用的版本密鑰庫,而不是我需要使用:

keytool -list -v -keystore debug.keystore 

此文件(Mac OSX上的位置):

~/.android/debug.keystore 

這給了我,我在谷歌的控制檯進入了另一個SHA1,現在有用。

7

設置API密鑰時,軟件包名稱是manifestpackage屬性的值,而不是應用程序名稱。

這(com.foo):

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.foo" 

不是這個(com.foo.MyApplication):

<application 
    android:name="com.foo.MyApplication" 
0

我有沒有這方面的除了證據從我的觀察,但它看起來像它可能需要幾分鐘的時間在API密鑰設置之後激活之前。

有點耐心似乎爲我工作!

7

對於我來說,如果很簡單: 當您使用Android Studio工作時,您將Google API密鑰寫入文件google_maps_api.xml,但Android Studio僅在Project Manager中顯示(調試)版本的密鑰文件。你需要把你的鑰匙

\程序\ SRC \釋放\水庫\值\ google_maps_api.xml

文件太(像你在的地方你的鑰匙放在

\應用程序的\ src \調試\水庫\值\ google_maps_api。XML

+0

花了這麼多時間才發現google_maps_api.xml只在調試文件夾中! –

2

請確保您的包名在谷歌開發者控制檯/憑證/包的名稱輸入正確。它必須是您的應用程序頂級包名稱,例如。 com.company.appname不是com.company.appname.ui.activity.maps。我遵循https://developers.google.com/maps/documentation/android/start的指示,但在嵌套包中創建了Activity。 Google網頁輸入了嵌套的軟件包名稱,並且出現此錯誤。