突变的SHA1

Context

故事从两个低分评价开始.

那一天,Google Play上面,Cycplus 007突然惊现两个低分评价,除了一个翻译的小问题之外,他们还异口同声的反应到,他们的报警界面上的Google Map里面空白一片了,什么都不显示.

在全球发售之前,我们特地把样品寄到了全球各地(的某些地方),进行测试,以保证我们的产品是可以在海外正常工作的.

而且这两个用户都是波兰人,难道,波兰的Google也被禁了?hahaha

那是不可能的,他们可是从Google Play上面下载的App

Google and Android

突然,我陷入了恐慌.在很久很久之前我担心的一个问题,不会灵验了吧!

我们知道,Android是Google的,但是Android上面又可以没有google的东西(国产手机们基本上都没有Google Play套件),那Google Map作为Android的原生地图,会不会在那些缺少Google套件的手机上无法运行呢?

毕竟,iOS是可以直接使用原生地图的,使用原生地图还可以节省不少的空间呢,因为原生的地图空间,所需要的容量早就算在系统里面了~

所以我就很担心,会不会只有安装了Google Play套件的手机才可以使用Google Play~

操作了一番,竟然是真的.

GoogleMapNotWorking

不过回头一想,他们是Google Play上面下载的App,难道会没有Google Play套件?

Debug

我自信满满地再一次打开了app,看着正常运行的Google Map,陷入了沉思.

我不明白为什么我就可以运行

然后我就删掉了本地的App,从Google Play上面再下载了一份,运行起来,

竟然真的是空白!

吓得我突然之间手忙脚乱,手足无措,明明之前都是可以使用的,突然之间怎么就坏掉了!

我连接上数据线,查看catlog,竟然发现Google Map说我的签名错了!

我急忙登上Google Console,并且用keytool查看了我打包时候使用的Sha1:

1B:xxxxxxx

在Google Console上面登记着的:

1B:xxxxxxx

catlog里面写着我使用的Sha1:

ED:xxxxxxx

What the fuck?

怎么,怎么会变了呢

Google Play App Signing

在Google Play的Console里面有一个菜单是应用签名

在里面我惊奇的发现了两个证书:

-应用签名证书
-上传证书

而我登记在Google Map的Console里面的正是这个上传证书,而下载安装之后显示的,是这个应用签名证书的Sha1

这时我恍然大悟,前几天着急更新的时候,好像是点击了一个什么Google Play App Signing之类的按钮,当时也没管它是干什么的,就着急的去更新软件了.

下面来转载一下他的官方介绍:

Without Google Play App Signing: You sign the app with your app signing key, upload your app to Google Play, and then your app is delivered to the user.

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之后,通过各种我反正不懂的方法之后,可以得到原来签名的key

这会不安全,所以Google用各种我反正不懂的方法,把这个原来签名的key给去掉,换一个它自己的key,这样子就不会被坏人破解出上传APK的key,来做坏事儿了.

看起来确实,是稍微安全了一些呢

下面还介绍了可以设置的各种key,反正我(你)可能也用不到,我就不说了

可是

最关键的是:

进来了,还想走?

Google Play App Signing is an optional program. If you prefer, you can continue managing your own keys.

Once you've enrolled your app in Google Play App Signing, withdrawal is not supported. To preserve the security of your app signing keys, we don't have the ability to remove keys from the secure server.

这就很是麻烦了……因为国外我们可以在Google Play中下载,但是国内我们将安装文件放在了服务器上,供用户直接下载安装.

而国内这个安装文件,肯定使用的是upload key,所以,他们的Sha1是不一样的.

可能这个情况Google早就考虑到了,所以在Google Map的Console中,我们是可以添加好多好多个Sha1的,所以加上一个新的Sha1之后,Google Play版本的用户就可以正常使用Google Map了.

但是

百度地图没有想到这个问题,他们的配置界面只有两个Sha1可以填写,而且一个事发布饭一个是开发版.

这就意味着,如果开发版里面填写着我自己debug用的sha1,那么Google Play的用户或者国内用户中,至少有一方是不能使用百度地图查看他们的报警信息的

你大概会觉得:

反正外国人不会用百度地图的,就不用给他们添加到配置页面了咯

NO

我就是在国内,使用Google Play的中国人……我相信还有很多人会和我一样,因为害怕国内的商店太霸道,又不喜欢App内更新,所以我还是喜欢和App Store一样的商店.

于是乎,我就只能把debug的key换了下来,改成了Google play的sha1

End

这个故事并没有涉及到什么高深的技术,但是却说明了很重要的一件事

鼠标点慢一些!