记阿里百川电商SDK接入过程中的一个巨坑!
今天在接入阿里百川的电商SDK的时候碰到一个坑,准确来说是二个,其中一个是阿里的坑,另外一个就不知道该算谁头上来,,,
第一个坑
我接入的是最新的 3.1 版本的SDK,首先按照百川文档添加各种 gradle 配置,都写好了之后点击右上角 sync now,好戏开始了,gradle 会报错,说 manifest merge error,让去查看 log 找到具体的错误原因,一开始没有找到在哪里看这个 log,浪费了很多时间。后来才发现 log 在哪,在错误刚弹出来的那个窗口中有一个按钮,点一下可以直接跳转到 log 窗口。如下图:
在 Message 窗口的左侧有一个按钮,点击会跳到 log 信息窗口,根据 log 定位,很快就可以解决问题。
第二个坑
这个坑完全就是阿里百川的问题了,坑了我很久,真的很想打死那些写文档的家伙,这么多人用的文档,写的不清不楚的,SDK 更新了,文档没有相应的更新,Demo 也还是老版本的,反正各种问题,看来到处都少不了每天上班混吃等死,磨洋工的家伙。但是苦的是我们这些SDK使用者,文档上没有说清楚,一个坑就会坑我们老半天甚至几天时间,所以在这里记下来,造福后来人,并再次诅咒那些写文档不用心的家伙。
抱歉上面有些激动,说了一大堆废话,实在是被那些家伙气到了,浪费我很多时间。
问题如下:
解决了上面第一坑之后,gradle build 也没有问题,然后按照文档要求写上初始化代码并放入安全图片,跑一下,问题来了。
应用是启动了,但是我通过 log 发现阿里百川初始化失败了,失败原因 SecurityGuard init error ,错误码 202,好嘛,有了原因和错误码,回去找文档,发现是因为安全图片的问题。
安全图片有问题的话那就检查图片呗,因为安全图片是在阿里百川开发者控制台生成的,我反复对着那上面的说明检查和重复了几遍之后还是同样的问题。这时候就意识到应该不是我的问题了。
然后就一顿搜索,没有找到有用的结果(该死的百度,这几天开始各种翻墙的也用不了,该死的那啥啥啥),正着急上火的时候发现百川有个社区论坛,抱着试一试的心态上去找了下,果然有人和我碰到一样的问题,最后在 这个帖子 里面找到了解决办法。同时再次吐槽百川,一个论坛居然连个管理员都没有,用户提的问题都没人出来回答的,真是做的一个好论坛。
办法就是不要打正式包,用 debug 包上传获取安全图片,就可以初始化成功。
问题是解决了,但是我同时想到另外个事情,就是现在是用测试包生成的安全图片,那以后要打正式包的时候,这个安全图片会不会没用了,会再次导致SDK初始化失败。
后来空下来之后又仔细想了下这个问题,一开始一直初始化失败是因为我用的正式包获取的安全图片,而正式包是有 keystore 签名的,而调试的时候其实一直是打的测试包,而测试包是没有经过签名的,这就导致了问题。(话说有谁打测试包也带签名文件的吗?)。
所以最终的解决方案就是平时测试的时候用测试包生成的安全图片,打正式包的时候记得换上正式包的安全图片。(说到这里又想吐槽下阿里,就不能二张图片都放进去,用不同的名字,根据条件判断用哪一个吗?满满的都是槽点)
补充说明
这是我今天刚发现的问题,还是安全图片的导致的问题(果然满满的都是坑啊!再次想打死那些写文档的!),问题如下:
今天我同事更新了代码之后发现百川初始化失败,错误码1001,SecurityGuard init error,好嘛,有提示了就去查文档去,找了一圈发现并没有这个错误码,呵呵!
然后看这错误提示,应该也是跟安全图片有关,就让他自己打包去重新生成一个安全图片看看,换上新的安全图片后就可以了,这尼玛。
导致这个问题的原因应该是因为 AS 在打包的时候会因为各个电脑的不同给打上不同的签名,虽然都是测试包,但是实际上都是有隐藏签名的。
所以最终的解决方案就是不论测试还是正式包都使用签名文件打包,最好是使用同一个签名文件,这样在打正式包的时候就不会因为忘记换安全图片而导致初始化失败,结果被人打死了,,,
写到这里,我已经无力吐槽了,这帮写文档的,真是坑死人不偿命啊。