1. 程式人生 > >接入華為推送,開發流程, 與遇到的坑(PUSH SDK 和 HMS SDK)

接入華為推送,開發流程, 與遇到的坑(PUSH SDK 和 HMS SDK)

本文收到以下連結,的一部分啟發:

http://cn.club.vmall.com/thread-12831573-1-1.html

思路:

首先映入眼簾的當然是註冊“華為開發者聯盟”,然後下載sdk,看文件,新增程式碼,在開發者聯盟填寫包名,

填寫keystone的SHA2565碼,後的appid填入app程式碼。編譯,利用華為網站新建推送,測試推送

這是預想的整個流程, 實際情況在下載sdk的地方就把我搞暈了:
首先第一步下載sdk

我被坑了首先映入眼簾的是如下網址:
http://developer.huawei.com/consumer/cn/wiki/index.php?title=%E6%8E%A5%E5%85%A5%E8%AF%B4%E6%98%8E
開啟,下載sdk,裡面還有示例程式碼,很全面,然後發現給的示例程式碼是Eclipse的,用Android Studio 匯入功能匯入,開始測試
一點反應也沒有,什麼“獲取token”沒啥反應(包括在華為服務端填寫包名字,越SHA256,生成appid,工程裡沒有填appid的地方就沒有新增,包括包名字自己也改了)
放棄它

三、使用新版的推送庫
網站顯示有PUSH SDK 和 HMS SDK倆個sdk,說明地址如下:
http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_devguide
說 push sdk 不再維護
然後就是,按照說明整合新版sdk
http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_sdkdownload
使用Android Studio 整合,然後在manifest新增檔案

http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_devprepare#3.2%20AndroidStudio%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83

新增java程式碼:

http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_devguide

四、新增推送服務

然後在管理中心,新增push服務,新增,包名(需要新增自己的包名,即沒有被使用過的),新增自己的keystone的SHA256碼,獲取到appid新增到manifest裡面
開始測試程式碼:執行,在以下函式獲取到了錯誤程式碼:
public void onConnectionFailed(ConnectionResult arg0) {                       
Log.i(TAG, "HuaweiApiClient連線失敗,錯誤碼:" + arg0.getErrorCode());      
得到的錯誤程式碼是1    

官網上的錯誤程式碼列表部分內容如下:

錯誤程式碼:1  ConnectionResult.SERVICE_MISSING  裝置上未安裝華為移動服務  收到此錯誤碼需要在onConnectionFailed回撥中呼叫resolve處理,具體內容請參見開發指南。
錯誤程式碼:2  ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED  裝置上安裝的華為移動服務需要升級 收到此錯誤碼需要在onConnectionFailed回撥中呼叫resolve處理,具體內容請參見開發指南。  
錯誤程式碼:6  ConnectionResult.BINDFAIL_RESOLUTION_REQUIRED  aidl繫結失敗  收到此錯誤碼需要在onConnectionFailed回撥中呼叫resolve處理,具體內容請參見開發指南。    

按照提示,安裝了“華為移動服務”(本人使用魅族手機)然後得到錯誤碼2,

所以從華為商店下載了最新版本的“華為移動服務”(http://appstore.huawei.com/app/C10132067)

這回得到的錯誤碼是6,沒轍了(其實是因為“華為移動服務”沒有後臺啟動許可權,下面會講到)
放棄回家(抱怨華為也不給個HMS SDK的示例程式碼)

五、找到HMS SDK示例Android Studio demo工程(解決問題的關鍵)
第二天早晨,開啟華為開發者聯盟,在裡面遊走,發現了以下地方(真是的:華為的sdk下載地址有倆個,一個是舊版本,一個新版本,不在一塊):
HMS SDK示例Android Studio demo工程(看這篇部落格來解決華為推送問題的,直接看在下面這個連結看官方提供的例子吧,如果和我一樣,以前沒有找到這個地址尷尬
http://developer.huawei.com/consumer/cn/service/hms/catalog/huaweipush.html?page=hmssdk_huaweipush_sample_code_c
這個地址之前居然沒有找到:裡面有非常棒的例子,

根據提示:需要給“華為移動服務”開啟後臺啟動等之類的許可權,然後在魅族的”安全中心“把”華為移動服務“的後臺管理許可權選擇到”允許後臺允許“,
示例的程式碼就可以打開了。

注意:自己執行示例工程的時候需要對程式碼做一些更改:
1.更改應用的包名,因為要在“華為開發者聯盟”裡面新增push服務,裡面需要填寫包名,但是示例程式碼的包名是被註冊過的,不能使用了提示“引數不合法”(又是誤導),因此在示例工程裡,把所有關於包名的地方都自己改一個名字。
然後在build.gradle裡面修改signingConfigs,填入自己所使用的keystone,
2.按照文件說明,生成keystone的SHA256碼,然後在“華為開發者聯盟”的管理中心新增push服務,填入新的包名和SHA256值,
3.執行示例程式碼,可以正常獲取到keystone和接受到推送

4.使用推送工具推送的時候需要填寫,MEID,這個欄位,在token可以獲取(“關於手機”裡面可以看到自己的MEID)