公司一個項目之前在手機上一直可以正常運行,后來在平板上運行了一下,在歡迎頁面卡出了,一直沒有反應。
於是我就將項目在電腦上用Android Studio往平板上運行了一遍,看了下打印的Log日志,發現clientid(cid)一直獲取為空
因此暫將問題定位到該位置,發現這里有一個條件為true的while循環,里面不斷獲取cid,直到不為空才跳出
所以難怪總是卡在歡迎頁面沒有反應!
繼續看下去,cid是個推用來獲取手機、平板等設備的一個唯一標識,登錄的時候需要作為參數傳遞,這也是為什么前面要不斷獲取cid的原因了
但為什么為空呢???
各種查閱,並沒有解決問題,后來迫不得已,咨詢了一下個推的技術支持
1.首先確定了不是網絡問題,
2.因為手機可以正常運行,所以可以確定集成是沒有問題的,
3.然后將多余的cpu架構刪除了,so庫取最小
這樣還是沒能解決問題,后來技術支持說maven快速集成的只要在Manifest中加入自定義的Service和IntentService就可以了,
我又查閱了一下代碼,發現並沒有這兩個自定義Service,於是又在個推官網仔細看了一遍文檔,發現只有GTSDK2.9.5.0才有自定義Service,
將問題反饋給了技術支持,得知是因為項目目前使用的sdk版本過老,因為之前查閱資料也有看到過此回答,之前代碼也不是自己寫的,所以不想去更新現有sdk版本,怕后續會有隱患
技術支持也給出了合理的解釋:
1.為了讓推送服務在部分主流機型上更穩定運行,建議升級 最新版的sdk,老版本可能會導致在一些設備上獲取不到cid
2.老版本存在一些歷史bug,不能保證可以成功獲取到cid
聽到這,這才決定還是更新一下試試,當然更新前將代碼用git提交了一下,以防萬一......
然后依據官方文檔進行了更新,其實更新並沒有想象中那么可怕,而且文檔中也有需要修改的具體位置,很快就成功了!!!
接下來,在另一個同樣使用個推的項目運行到平板也出現了該情況......
於是乎,第一步在gradle中添加最新個推依賴就出現了問題
報錯如下:
Failed to resolve:com.getui:sdk:2.9.5.0
同樣的排除了網絡原因,然后各種sync也沒有用,最后還是想到了技術支持...
問題定位:直接問了我是否使用了什么網絡代理
然而我用的Ubuntu,雖然下有lantern,但並沒有打開啊...
然后將maven上的地址試了一下,也可以正常打開
后來,技術支持說Android Studio工程中所有.properties文件檢查一遍,帶有proxy的行全部去掉
於是我挨個排查了一遍,發現有個配置文件中加入了下面代碼
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8087
為什么前一個項目沒有問題呢,於是又回頭看了一下前一個項目的配置文件,發現並沒有使用本機的,而是公司的一個host,苦惱...於是將這兩行注釋掉了,之后萬事大吉!
我前面也認為我的系統沒有使用任何代理,
於是又去請教了我的導師,讓我在命令行輸入echo $http_proxy查看系統是否使用了代理
果不其然,被篡改了!!!
導師告訴我lantern會修改系統的代理,在lantern的設置里關掉就可以了,修改完畢,心里美滋滋...
最后再說一句關於個推的,如果最新版有cid為空的時候,看下IntentService的初始化方法走了沒有,在解決問題過程中,自己也有不小心傳錯Service的時候...尷尬
還有就是個推的技術支持真的很有耐心,很強!很佩服,在使用第三方sdk的使用也一定要注意仔細閱讀官方文檔,按照步驟,正確的一步一步來,一般不會出現太大問題
