谷歌地图没有出现 - Xamarin

时间:2014-06-11 11:47:31

标签: c# android google-maps xamarin

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

任何帮助将不胜感激。提前致谢

5 个答案:

答案 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)

我遇到了同样的问题,请仔细按照Xamarin文档和论坛中的说明进行操作,并执行@elMarquis回答列出的每个步骤。没事。

事实证明,Google Play控制台可能正在使用自己的证书对您发布的apk进行签名,从而创建与您正在使用的(当然是在Google Developer Console中设置的)签名不匹配的另一SHA1签名。适用于Android上的Google Maps API。因此,请在您的Google Play控制台中注意“发行管理”>“应用签名”。您必须在Google Developer Console中使用SHA1指纹进行授权。 enter image description here