记Google Play应用签名计划带来的问题

在某些特殊的情况,我们的应用需要强制升级(比如重大bug),以前上架小米、华为、360等国内市场一切都是正常的,但是这次上架Google Play发现升级会失败,提示签名不一致,同时原来正常的定位功能,上传到Google play也无法正常使用,提示key验证失败。一脸懵逼,上网去查资料,发现Google Play在你首次上传应用的时候有一个Google Play应用签名计划(为了保证安全),如下图(注意永久注册这几个字):
记Google Play应用签名计划带来的问题_第1张图片
那么加入之后有什么区别呢?我们去版本管理下的应用签名看看:
记Google Play应用签名计划带来的问题_第2张图片
应用签名证书
上传证书
在应用签名证书和上传证书那里分别列出了对应的SHA1、SHA256等秘钥。说到这里是什么意思呢?那就是加入该计划之后,我们上传的apk,Google会使用它为你生成的jks重新签名,所以当我们强升的时候会提示签名不同;而定位失败也是因为重新签名,导致的开发秘钥不同。针对这两个问题,最后我的解决方案是:
(1)无法强升。那就绕过,升级的时候判断渠道名是否是google_play,不是才强升。具体代码大致如下:

  • 首先是AndroidManifest
 
 <meta-data
      android:name="CHANNEL"
      android:value="${CHANNEL_NAME}" />
 
  • 然后是模块的build.gradle
productFlavors {
   googleplay {
       manifestPlaceholders = [CHANNEL_NAME: "google_play"]
   }
   official{
       manifestPlaceholders = [CHANNEL_NAME: "official"]
   }
}
  • 之后就是获取meta-data中的value值
/**
     * 获取app当前的渠道号或application中指定的meta-data
     *
     * @return 如果没有获取成功(没有对应值,或者异常),则返回值为空
     */
    public static String getAppMetaData(Context context, String key) {
        if (context == null || TextUtils.isEmpty(key)) {
            return null;
        }
        String channelNumber = null;
        try {
            PackageManager packageManager = context.getPackageManager();
            if (packageManager != null) {
                ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
                if (applicationInfo != null) {
                    if (applicationInfo.metaData != null) {
                        channelNumber = applicationInfo.metaData.getString(key);
                    }
                }
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return channelNumber;
    }

此时我们就已经拿到渠道名了,通过对比是否是我们定义的google_play,就可以用于判断是否弹出强升的升级栏。

如果你就想强升,那么你就在第一次上传应用的时候选择退出计划

(2)定位无法正常使用。在百度地图开发者中心重新创建一个应用,包名不变,SHA1填成Google给的重签证书中的SHA1即可(我们登录Google play console,查看应用签名,那里就有重签的SHA1值)。

又成功的躺了一波坑。。。

你可能感兴趣的:(日常开发笔记)