Google 从 Playstore 下载应用时地图不显示,但直接安装签名 apk 时显示正常
Google map not showing when app is downloaded from playstore but showing fine when installed directly signed apk
我在 google 中遇到问题 map.Google 当我从 google play store 下载 apk 时地图没有显示但是当我手动安装时它工作正常(通过转移到设备)上传到 Play 商店的相同 apk。
我重新检查了存在的调试和发布密钥 here
请在清单文件中找到权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
并且在应用程序节点中:
<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" />
我的 java 文件说:
@Override
public void onMapReady(GoogleMap googleMap) {
try {
map = googleMap;
// it will hide navigation and gps pointer buttons on map
map.getUiSettings().setMapToolbarEnabled(false);
// map.getUiSettings().setZoomControlsEnabled(false);
if (TextUtils.isEmpty(companyDetailModel.getSupplierCompanyDetailsRS().getResponseDetail().getCompanyDetail().getLatitude())) {
if (!PermissionUtil.checkPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)) {
PermissionUtil.requestPermission(getActivity(), android.Manifest.permission.ACCESS_FINE_LOCATION, LOCATION_PERMISSION_CODE);
} else {
map.setMyLocationEnabled(true);
GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location location) {
LatLng loc = new LatLng(location.getLatitude(), location.getLongitude());
map.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f));
}
};
map.setOnMyLocationChangeListener(myLocationChangeListener);
}
} else {
LatLng latLng = new LatLng(Double.parseDouble(companyDetailModel.getSupplierCompanyDetailsRS().getResponseDetail().getCompanyDetail().getLatitude()), Double.parseDouble(companyDetailModel.getSupplierCompanyDetailsRS().getResponseDetail().getCompanyDetail().getLongitude()));
map.addMarker(new MarkerOptions().position(latLng)/*.title("" + companyDetailModel.getSupplierCompanyDetailsRS().getResponseDetail().getCompanyDetail().getAddress())/*.icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_launcher))*/);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 14.0f));
}
map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
showFullScreenMap();
}
});
} catch (Exception e) {
Log.i("LatLng exception", "" + e);
Utils.showToast(getActivity(), "" + e);
}
}
这是 SHA1 密钥问题。请检查您的 google 控制台指纹 SHA1 那是 release.if 您的调试密钥在 Playstore 应用程序中不起作用。
调试证书:当您进行调试构建时,Android SDK 工具会自动生成此证书。仅将此证书用于您正在测试的应用程序。不要尝试发布使用调试证书签名的应用程序。调试证书在 Android 开发人员文档中的以调试模式签名中有更详细的描述。
发布证书: Android SDK 工具在您进行发布构建时生成此证书。您还可以使用 keytool 程序生成此证书。当您准备好向全世界发布您的应用程序时,请使用此证书。
有关详细信息,请参阅 Get API Key and app's SHA-1 fingerprint
我最近在 Google Play 商店上传了 APK,我在查看 Play 控制台后遇到了同样的问题,我找到了解决这个问题的方法。
他们的密钥没有问题,但问题出在您的 SHA-1 上。您使用 SHA-1 为您的 APK 签名并没有问题,然后上传 APK 也没有问题。
但根据 Play 控制台的新更新,当您使用 SHA-1 签署 APK 并上传 APK 时,它仅由您签署,但根据新更新,它也由 Google Play for更安全。在这里查看 Google 播放部分的一部分:
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.
现在,您的问题的答案是成功上传 APK 后,您可以看到在带有两个 SHA-1 的部分中,第一个 SHA-1 已 Google 创建 它自己的,2nd SHA-1 是你的。
因此只需复制 Google SHA-1 并将其粘贴到您生成 Google 映射 API 密钥的控制台。
在对 App Signing 功能进行了长时间的研究之后,我找到了 Google 添加 App Signing 功能的解决方案,以便通过 Google Play 发布应用程序。
添加此功能是由于所有 client/developer.
面临的密钥库 mismatch/lost 问题
通常,在 Google Play Developer Console 的新更新中,当我们通过 Google Developer 上传任何 apk 文件时,它默认提供 Google-Play Self istead Development/Release 密钥库已丢失用户可以使用新证书更新应用程序。
应用签名密钥:用于对用户设备上的 APK 进行签名的密钥。您目前持有应用签名密钥并使用它来签署您的 APK。当您完成程序 sign-up 流程时,您将把这个密钥上传到 Google。
上传密钥:您在注册该计划期间生成的新密钥。在将所有未来的 APK 上传到 Play 管理中心之前,您将使用上传密钥对其进行签名。
因此,如果您在应用发布期间接受应用签名功能,那么在 Google 控制台上,您必须提供 Google 的应用签名密钥 SHA-1 密钥,而不是您上传的证书密钥.所以只需将其更改为 App Signing SHA-1 证书即可。
您可以从选项卡下方找到应用签名证书 SHA-1 密钥。
Google Play Developer Console > Dashboard > Release Management > App Signing.
我在 google 中遇到问题 map.Google 当我从 google play store 下载 apk 时地图没有显示但是当我手动安装时它工作正常(通过转移到设备)上传到 Play 商店的相同 apk。
我重新检查了存在的调试和发布密钥 here
请在清单文件中找到权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
并且在应用程序节点中:
<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" />
我的 java 文件说:
@Override
public void onMapReady(GoogleMap googleMap) {
try {
map = googleMap;
// it will hide navigation and gps pointer buttons on map
map.getUiSettings().setMapToolbarEnabled(false);
// map.getUiSettings().setZoomControlsEnabled(false);
if (TextUtils.isEmpty(companyDetailModel.getSupplierCompanyDetailsRS().getResponseDetail().getCompanyDetail().getLatitude())) {
if (!PermissionUtil.checkPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)) {
PermissionUtil.requestPermission(getActivity(), android.Manifest.permission.ACCESS_FINE_LOCATION, LOCATION_PERMISSION_CODE);
} else {
map.setMyLocationEnabled(true);
GoogleMap.OnMyLocationChangeListener myLocationChangeListener = new GoogleMap.OnMyLocationChangeListener() {
@Override
public void onMyLocationChange(Location location) {
LatLng loc = new LatLng(location.getLatitude(), location.getLongitude());
map.animateCamera(CameraUpdateFactory.newLatLngZoom(loc, 16.0f));
}
};
map.setOnMyLocationChangeListener(myLocationChangeListener);
}
} else {
LatLng latLng = new LatLng(Double.parseDouble(companyDetailModel.getSupplierCompanyDetailsRS().getResponseDetail().getCompanyDetail().getLatitude()), Double.parseDouble(companyDetailModel.getSupplierCompanyDetailsRS().getResponseDetail().getCompanyDetail().getLongitude()));
map.addMarker(new MarkerOptions().position(latLng)/*.title("" + companyDetailModel.getSupplierCompanyDetailsRS().getResponseDetail().getCompanyDetail().getAddress())/*.icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_launcher))*/);
map.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 14.0f));
}
map.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
showFullScreenMap();
}
});
} catch (Exception e) {
Log.i("LatLng exception", "" + e);
Utils.showToast(getActivity(), "" + e);
}
}
这是 SHA1 密钥问题。请检查您的 google 控制台指纹 SHA1 那是 release.if 您的调试密钥在 Playstore 应用程序中不起作用。
调试证书:当您进行调试构建时,Android SDK 工具会自动生成此证书。仅将此证书用于您正在测试的应用程序。不要尝试发布使用调试证书签名的应用程序。调试证书在 Android 开发人员文档中的以调试模式签名中有更详细的描述。
发布证书: Android SDK 工具在您进行发布构建时生成此证书。您还可以使用 keytool 程序生成此证书。当您准备好向全世界发布您的应用程序时,请使用此证书。
有关详细信息,请参阅 Get API Key and app's SHA-1 fingerprint
我最近在 Google Play 商店上传了 APK,我在查看 Play 控制台后遇到了同样的问题,我找到了解决这个问题的方法。
他们的密钥没有问题,但问题出在您的 SHA-1 上。您使用 SHA-1 为您的 APK 签名并没有问题,然后上传 APK 也没有问题。
但根据 Play 控制台的新更新,当您使用 SHA-1 签署 APK 并上传 APK 时,它仅由您签署,但根据新更新,它也由 Google Play for更安全。在这里查看 Google 播放部分的一部分:
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.
现在,您的问题的答案是成功上传 APK 后,您可以看到在带有两个 SHA-1 的部分中,第一个 SHA-1 已 Google 创建 它自己的,2nd SHA-1 是你的。
因此只需复制 Google SHA-1 并将其粘贴到您生成 Google 映射 API 密钥的控制台。
在对 App Signing 功能进行了长时间的研究之后,我找到了 Google 添加 App Signing 功能的解决方案,以便通过 Google Play 发布应用程序。 添加此功能是由于所有 client/developer.
面临的密钥库 mismatch/lost 问题通常,在 Google Play Developer Console 的新更新中,当我们通过 Google Developer 上传任何 apk 文件时,它默认提供 Google-Play Self istead Development/Release 密钥库已丢失用户可以使用新证书更新应用程序。
应用签名密钥:用于对用户设备上的 APK 进行签名的密钥。您目前持有应用签名密钥并使用它来签署您的 APK。当您完成程序 sign-up 流程时,您将把这个密钥上传到 Google。
上传密钥:您在注册该计划期间生成的新密钥。在将所有未来的 APK 上传到 Play 管理中心之前,您将使用上传密钥对其进行签名。
因此,如果您在应用发布期间接受应用签名功能,那么在 Google 控制台上,您必须提供 Google 的应用签名密钥 SHA-1 密钥,而不是您上传的证书密钥.所以只需将其更改为 App Signing SHA-1 证书即可。
您可以从选项卡下方找到应用签名证书 SHA-1 密钥。
Google Play Developer Console > Dashboard > Release Management > App Signing.