谷歌地图没有显示何时从Playstore下载应用程序,但在安装时直接签名为apk

时间:2017-06-21 06:27:41

标签: android google-maps google-play-services android-maps

我在谷歌地图中遇到一个问题。当我从谷歌游戏商店下载apk时,谷歌地图没有显示,但是当我手动安装(通过转移到设备)相同的apk上传到游戏商店时,它工作正常。< / p>

我已经重新检查了我的调试和释放密钥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);
    }

}

3 个答案:

答案 0 :(得分:24)

我最近在Google Play商店上传了APK,在查看Play控制台后我遇到了同样的问题我找到了解决此问题的方法。

他们的密钥没问题,但问题出在你的SHA-1上。您使用SHA-1对APK进行了签名,然后上传APK也很好。

但是,根据Play控制台的新更新,当您使用SHA-1签署APK并上传APK时,它仅由您签名,但根据新的更新,它也会由Google Play签名以获得更高的安全性。在这里查看Google Play部分的一部分:

  

使用Google Play应用程序签名:您使用上传密钥对应用进行签名。   然后,Google会验证并删除上传密钥签名。最后,   Google会使用您提供的原始应用签名密钥重新签名该应用   并将您的应用程序交付给用户。

您可以参考Documentation here.

现在,您的问题的答案是成功上传APK后,您可以看到在带有两个SHA-1的部分中,第一个SHA-1是Google创建的是自己的第二个SHA-1是你的

因此,只需复制Google SHA-1并将其粘贴到生成Google Map API密钥的控制台即可。

答案 1 :(得分:7)

经过对App Signing功能的长期研究后,我找到了Google添加应用程序签名功能的解决方案,用于通过Google Play发布应用程序。 由于所有客户端/开发人员面临密钥库不匹配/丢失问题,因此添加了此功能。

通常,在Google Play开发者控制台的新更新中,当我们通过Google Developer上传任何apk文件时,默认情况下会提供Google-Play自定义应用程序签名的服务。开发/发布密钥库已丢失用户可以使用新版本更新应用程序证书。

应用程序签名密钥:用于在用户设备上对APK进行签名的密钥。您目前持有应用签名密钥并使用它来为您的APK签名。完成计划注册流程后,您会将此密钥上传到Google。

上传密钥:您在注册该计划期间生成的新密钥。在将所有APK上传到Play控制台之前,您将使用上传密钥对所有未来的APK进行签名。

因此,如果您在应用发布期间接受应用签名功能,那么在Google控制台上,您必须提供Google的应用签名密钥SHA-1密钥,而不是您上传的证书密钥。所以只需使用App Signing SHA-1 Certificate更改它。

您可以从标签下方查找应用签名证书SHA-1 键。

Google Play开发者控制台&gt;仪表板&gt;发布管理&gt;应用程序签名

答案 2 :(得分:0)

这是SHA1密钥问题。检查你的谷歌控制台指纹 SHA1 即发布。如果你的调试密钥在playstore App中不起作用。

调试证书:执行调试版本时,Android SDK工具会自动生成此证书。仅将此证书与您正在测试的应用一起使用。请勿尝试发布使用调试证书签名的应用程序。调试证书在Android Developer Documentation中的Signing in Debug Mode中有更详细的描述。

发布证书:Android SDK工具会在您执行发布版本时生成此证书。您还可以使用keytool程序生成此证书。当您准备将应用程序发布到全世界时,请使用此证书。

详情请参阅Get API Keyapp's SHA-1 fingerprint