1. 程式人生 > >阿里百川SDK初始化失敗,SecurityGuard init error

阿里百川SDK初始化失敗,SecurityGuard init error

記阿里百川電商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 在打包的時候會因為各個電腦的不同給打上不同的簽名,雖然都是測試包,但是實際上都是有隱藏簽名的。

所以最終的解決方案就是不論測試還是正式包都使用簽名檔案打包,最好是使用同一個簽名檔案,這樣在打正式包的時候就不會因為忘記換安全圖片而導致初始化失敗,結果被人打死了,,,

寫到這裡,我已經無力吐槽了,這幫寫文件的,真是坑死人不償命啊。