Google API 密钥不适用于 Android
Posted
技术标签:
【中文标题】Google API 密钥不适用于 Android【英文标题】:Google API Key not working with Android 【发布时间】:2015-12-09 09:03:33 【问题描述】:我在我的应用程序中使用 Google API,但只能让调试 ssh 与 Google API 一起工作。 我有一个我签名的密钥库,过去我对以前的应用程序做过同样的事情并且没有问题。我还启用了所有 API。我正在使用发布 apk 签署我的应用程序。我在 SSH1 中使用该版本 apk 中的 SSH1 作为 Google API 凭据。我在我的应用程序中使用来自 Google 的密钥。我已经阅读了所有关于此的堆栈溢出和谷歌文档,并且已经尝试了几乎所有内容,但我无法让它工作。 它仅在我调试我的应用程序时有效(在这种情况下,我使用调试密钥库生成的 SSH1 和我与该 SSH1 一起使用的密钥)。 但是,当我用我的人发布密钥库签名并在应用商店的 Beta 版上发布并下载到我的手机上时,我收到我的 API 密钥无效的错误。如果有帮助,这是我的清单和构建文件以及我的布局文件。谢谢。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dev.cromer.jason.whatsappening" >
<permission android:name="com.dev.cromer.jason.whatsappening.permission.MAPS_RECEIVE" android:protectionLevel="signature" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.dev.cromer.jason.whatsappening.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<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" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<application
android:allowBackup="true"
android:fullBackupContent="true"
android:icon="@drawable/icon_logo"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".activities.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<activity
android:name=".activities.MapActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name=".activities.SetMarkerTitleActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name=".activities.SearchPlaceActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name=".activities.SetMarkerDescriptionActivity"
android:label="@string/app_name" >
</activity>
<activity
android:name=".activities.MarkerDescriptionActivity"
android:label="@string/app_name" >
</activity>
</application>
</manifest>
这是我的构建:
apply plugin: 'com.android.application'
android
compileSdkVersion 23
buildToolsVersion "22.0.1"
defaultConfig
applicationId "com.dev.cromer.jason.whatsappening"
minSdkVersion 15
targetSdkVersion 23
versionCode 12
versionName "1.012"
buildTypes
release
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
dependencies
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.0.0'
compile 'com.google.android.gms:play-services:7.8.0'
和我的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:theme="@style/AppTheme">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:id="@+id/map"
tools:context="com.dev.cromer.jason.whatsappening.activities.MapActivity"
android:name="com.google.android.gms.maps.SupportMapFragment">
</fragment>
<EditText
android:id="@+id/searchBarEditText"
android:layout_
android:layout_
android:background="@drawable/textview_border"
android:alpha=".8"
android:layout_centerHorizontal="true"
android:layout_marginTop="10dp"
android:hint="@string/search_bar_hint"
android:singleLine="true"
android:textColor="#000000"
android:padding="8dp" />
<ImageView
android:id="@+id/poweredBy"
android:contentDescription="@string/powered_by_google_image"
android:layout_
android:layout_
android:src="@drawable/powered_by_google_light"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
【问题讨论】:
试试***.com/a/19627394/5202007 要生成 SHA1 以获取 Google API 密钥,您必须使用签名的 apk 证书。 @Clairvoyant,我知道,我以前用我的其他应用程序做过几次。我正在使用签名的 apk 证书。我在 Google API 凭据部分使用我的签名证书中的 SHA1,以及与我的应用程序中的 SHA1 对应的 Google API 密钥。所以它应该工作,但它不是。它仅在我使用调试 SHA1 处于调试模式时才有效。 @Tauqir,我在我的 android 应用程序中使用它,为什么要使用浏览器密钥? @Jason,您会在下拉菜单中找到 Android Key 的选项。 【参考方案1】:更新:
原来我的 API 密钥存储在项目调试目录下的资源 xml 文件中。 我需要将它放在我的项目或发布目录中,然后在我的清单文件中指定该字符串,而不是调试目录下的那个。这是我遇到的问题。感谢您抽出宝贵时间发表评论。
【讨论】:
以上是关于Google API 密钥不适用于 Android的主要内容,如果未能解决你的问题,请参考以下文章
新的 Google API 密钥“Google Maps API v3”不适用于 Google Places API?