我从Xamarin获得了一个示例应用程序,它是一个显示Google Maps
的简单应用程序。我使用API
指纹得到SHA1
密钥,这是我从Eclipse获得的指纹和我从AndroidManifest.XML
得到的包名。
每次加载地图时,都会收到错误消息:
06-11 12:41:24.852 I/Google Maps Android API(16453): Failed to contact Google servers. Another attempt will be made when connectivity is established.
06-11 12:41:24.862 E/Google Maps Android API(16453): Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).
我没有连接问题,因此我认为我的API密钥存在某种问题。
的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="GooglePlayServicesTest.GooglePlayServicesTest">
<uses-sdk android:minSdkVersion="8" />
<application android:label="GooglePlayServicesTest" android:icon="@drawable/icon">
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="MY API KEY" />
</application>
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<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" /></manifest>
布局xml文件
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="com.google.android.gms.maps.SupportMapFragment"/>
任何帮助将不胜感激。提前致谢
答案 0 :(得分:2)
您需要确保针对调试密钥库文件和版本密钥库文件使用的Maps API密钥将SHA1指纹列入白名单。
在开发过程中将地图添加到您的应用中时,您很可能会遵循this xamarin教程:
其中会指导您here以获取有关获取API密钥的详细信息,以及如何将SHA1标识符列入白名单。
它基本上告诉您找到现有xamarin调试密钥库文件的SHA1指纹。这是通过在终端上运行以下命令来完成的:
keytool -list -v -keystore [STORE FILENAME] -alias [KEY NAME] -storepass [STORE PASSWORD] -keypass [KEY PASSWORD]
当它的调试STORE FILENAME将是:/ Users / [USERNAME] /。local / share / Xamarin / Mono \ for \ Android / debug.keystore
当您发布应用程序时,您需要生成一个新的Keystore文件以供发布。 它告诉你它here:
您需要运行与上面相同的keytool -list命令,此时STORE FILENAME将是您刚刚生成的密钥库文件的文件名。
在Google API控制台中,您可以将多个SHA指纹添加到单个API密钥中,方法是将它们放在单独的行上。
01:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX;mypackage.name
01:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX;mypackage.name
只要两个密钥库文件中的SHA1都在该列表中,您的映射就可以同时用于调试和发布。
答案 1 :(得分:0)
在清单文件中使用它
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="ur api key" />
答案 2 :(得分:0)
我首先想到的是仔细检查你获得SHA1指纹的API密钥是否确实是用于签署应用程序的API密钥。 Xamarin.Android拥有它自己的debug.keystore
,它可能与Eclipse使用的不同。
确保您拥有正确的SHA1指纹的一个技巧(这有点向后)是解压缩您的APK文件,然后使用keytool
找到SHA1指纹(它在{{1}中}})。像这样:
META-INF/ANDROIDD.RSA
答案 3 :(得分:0)
当我在Android设备上运行此应用程序时,我使用了谷歌的“Android应用程序密钥(带证书)”但无效。
我使用了“浏览器应用程序密钥(带有引用程序)”,并且它出于某种原因起作用。
答案 4 :(得分:0)