Android Google Place Picker 在 Signed APK 中工作但在 Live 应用中不工作
Android Google Place Picker working in Signed APK but not working in Live app
我有一个应用程序,我在其中使用了 Google Place Picker。我面临着一个非常奇怪的问题。当我使用我的应用程序的密钥库创建已签名的 APK 时,Place Picker 运行良好。我通过 Google PlayStore 上传的同一个 APK。当我打开那个 Place Picker 时,它自动关闭了。我已经在网上和这里阅读了很多评论。但我无法确定为什么它在已签名的 APK 中运行良好,而相同的 APK 在 Google PlayStore 中无法运行。
当我检查 Google PlayStore 的 LIVE 应用程序日志时,它给出了这样的错误:
Volley : [198] BasicNetwork.performRequest: Unexpected response code 403
for https: //www.googleapis.com/placesandroid/v1/search?key=MY_KEY/ ? V / ConnectivityManager : isActiveNetworkMetered() returns: true
/ ? E / AsyncOperation : serviceID = 65, operation = SearchPlaces
OperationException[Status {
statusCode = PLACES_API_INVALID_APP, resolution = null
}]
我已经在我的 Google 开发者控制台中检查过我的密钥是否相同。我还检查了我从 KeyStore 文件创建的 SHA。一切都很好(否则如果有任何问题,它也不会在签名 APK 中工作)。
以下是我如何从我的 Activity
调用地点选择器
int PLACE_PICKER_REQUEST = 999;
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
这是我的 AndroidManifest.xml 文件,其中我在应用程序标签中的元数据中提供了 API 键。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example" >
// ALL PERMISSIONS ARE HERE
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".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.geo.API_KEY"
android:value="@string/MY_KEY" />
</application>
</manifest>
有我删除的文件 "release/values/google_maps_api.xml" 是自动生成的。正如我已经提到的 API 键进入 string.xml,所以我从发布包中删除了整个值包。
谁能告诉我这有什么问题吗?
经过几天的投入时间来找到这个问题的解决方案。最后我得到了解决方案。这是因为 Google Play App Signing
.
With Google Play App Signing: You sign your app with your upload key.
Then, Google verifies and removes the upload key signature. Finally,
Google re-signs the app with the original app signing key you provided
and delivers your app to the user.
因此,当我为 "Google Places API for Android" 创建 API 密钥时,我使用我的包名称和签名 APK 密钥库的 SHA-1 限制了该密钥。
现在它在 "Upload Certificate" 下并且未被使用,因为我必须将我的 App Singing Certificate 的 SHA-1 传递给 Google Developer Console。完成后,我的 Google PlayStore 的实时应用程序的 Google PlacePicker 运行良好。
我有一个应用程序,我在其中使用了 Google Place Picker。我面临着一个非常奇怪的问题。当我使用我的应用程序的密钥库创建已签名的 APK 时,Place Picker 运行良好。我通过 Google PlayStore 上传的同一个 APK。当我打开那个 Place Picker 时,它自动关闭了。我已经在网上和这里阅读了很多评论。但我无法确定为什么它在已签名的 APK 中运行良好,而相同的 APK 在 Google PlayStore 中无法运行。
当我检查 Google PlayStore 的 LIVE 应用程序日志时,它给出了这样的错误:
Volley : [198] BasicNetwork.performRequest: Unexpected response code 403
for https: //www.googleapis.com/placesandroid/v1/search?key=MY_KEY/ ? V / ConnectivityManager : isActiveNetworkMetered() returns: true
/ ? E / AsyncOperation : serviceID = 65, operation = SearchPlaces
OperationException[Status {
statusCode = PLACES_API_INVALID_APP, resolution = null
}]
我已经在我的 Google 开发者控制台中检查过我的密钥是否相同。我还检查了我从 KeyStore 文件创建的 SHA。一切都很好(否则如果有任何问题,它也不会在签名 APK 中工作)。
以下是我如何从我的 Activity
调用地点选择器int PLACE_PICKER_REQUEST = 999;
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
这是我的 AndroidManifest.xml 文件,其中我在应用程序标签中的元数据中提供了 API 键。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example" >
// ALL PERMISSIONS ARE HERE
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".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.geo.API_KEY"
android:value="@string/MY_KEY" />
</application>
</manifest>
有我删除的文件 "release/values/google_maps_api.xml" 是自动生成的。正如我已经提到的 API 键进入 string.xml,所以我从发布包中删除了整个值包。
谁能告诉我这有什么问题吗?
经过几天的投入时间来找到这个问题的解决方案。最后我得到了解决方案。这是因为 Google Play App Signing .
With Google Play App Signing: You sign your app with your upload key. Then, Google verifies and removes the upload key signature. Finally, Google re-signs the app with the original app signing key you provided and delivers your app to the user.
因此,当我为 "Google Places API for Android" 创建 API 密钥时,我使用我的包名称和签名 APK 密钥库的 SHA-1 限制了该密钥。
现在它在 "Upload Certificate" 下并且未被使用,因为我必须将我的 App Singing Certificate 的 SHA-1 传递给 Google Developer Console。完成后,我的 Google PlayStore 的实时应用程序的 Google PlacePicker 运行良好。