Android的推送一直是個(gè)大坑,好在統(tǒng)一聯(lián)盟的的推送在測(cè)試了钾恢,希望早點(diǎn)一統(tǒng)推送,挖去開(kāi)發(fā)者的心病吧鸳址。在此之前瘩蚪,該踩坑還是踩坑,按官方文檔一步步踩吧稿黍。
集成
-
先集成必備套件 HMS SDK Agent
- 下載地址:HMSAgent_2.6.3.301.zip
-
解壓后運(yùn)行GetHMSAgent_cn.bat文件生成我們所需的文件疹瘦,輸入我們的應(yīng)用包名和后臺(tái)配置應(yīng)用生成的appid,回車(chē)運(yùn)行巡球, cpid沒(méi)有可以跳過(guò)繼續(xù)言沐,按需集成所需要的功能。
解壓目錄酣栈、執(zhí)行文件和生成后文件夾.png命令執(zhí)行過(guò)程.png - 代碼拷貝
- 標(biāo)準(zhǔn)的AS項(xiàng)目直接拷貝到app/src/main/下即可
- 轉(zhuǎn)換成AS項(xiàng)目的我將java下的文件夾及AppManifestConfig.xml文件拷貝至src/下险胰,結(jié)構(gòu)如圖
拷貝后目錄結(jié)構(gòu).png
生成文件目錄.png
-
自動(dòng)集成
項(xiàng)目build.gradle配置
allprojects {
repositories {
···
maven {url 'http://developer.huawei.com/repo/'}
}
}
app的build.gradle配置
dependencies {
···
//說(shuō)明:{version} 替換為實(shí)際的版本號(hào),如:compile 'com.huawei.android.hms:push:2.6.3.301'
compile 'com.huawei.android.hms:push:{version}'
}
最后進(jìn)行同步配置
-
手動(dòng)集成
畢竟現(xiàn)在都用AS了矿筝,自動(dòng)集成的方便手動(dòng)集成你想象不到啊起便,奈何還有Eclipse轉(zhuǎn)成AS的項(xiàng)目,怎么都下載不到依賴(lài)包,只能老老實(shí)實(shí)手動(dòng)集成了
- SDK下載:hmssdk-gradle-2.6.3.301.zip
- 解壓后進(jìn)行代碼拷貝榆综,這里文件夾結(jié)構(gòu)簡(jiǎn)單妙痹,直接全部復(fù)制到對(duì)應(yīng)工程相應(yīng)文件夾即可
解壓目錄.png
好像。鼻疮。怯伊。也挺簡(jiǎn)單。判沟。耿芹。
開(kāi)始配置與初始化
- 配置manifest文件<記得更改appid和${PACKAGE_NAME}>
因?yàn)楫?dāng)前應(yīng)用只需要推送功能,所以我只集成了推送必須項(xiàng)
- 配置appid application節(jié)點(diǎn)下
<meta-data android:name="com.huawei.hms.client.appid" <!-- value的值“xxx”用實(shí)際申請(qǐng)的應(yīng)用ID替換水评,來(lái)源于開(kāi)發(fā)者>聯(lián)盟網(wǎng)站應(yīng)用的服務(wù)詳情猩系。--> android:value="appid=xxx"> </meta-data>
- 配置自定義的Application,這個(gè)開(kāi)發(fā)過(guò)程中我們都會(huì)做的
- 配置BridgeActivity --定義了HMS SDK中一些跳轉(zhuǎn)所需要的透明頁(yè)面
<activity android:name="com.huawei.hms.activity.BridgeActivity" android:configChanges="orientation|locale|screenSize|layoutDirection|fontScale" android:excludeFromRecents="true" android:exported="false" android:hardwareAccelerated="true" android:theme="@android:style/Theme.Translucent" > <meta-data android:name="hwc-theme" android:value="androidhwext:style/Theme.Emui.Translucent" /> </activity>
- 在manifest節(jié)點(diǎn)下增加所需權(quán)限
<!--HMS-SDK引導(dǎo)升級(jí)HMS功能中燥,訪(fǎng)問(wèn)OTA服務(wù)器需要網(wǎng)絡(luò)權(quán)限--> <uses-permission android:name="android.permission.INTERNET" /> <!--HMS-SDK引導(dǎo)升級(jí)HMS功能寇甸,保存下載的升級(jí)包需要SD卡寫(xiě)權(quán)限--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!--檢測(cè)網(wǎng)絡(luò)狀態(tài)--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!--檢測(cè)wifi狀態(tài)--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <!--為了獲取用戶(hù)手機(jī)的IMEI,用來(lái)唯一的標(biāo)識(shí)用戶(hù)疗涉。--> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!--如果是安卓8.0拿霉,應(yīng)用編譯配置的targetSdkVersion>=26,請(qǐng)務(wù)必添加以下權(quán)限 --> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <!-- 接收PUSH TOKEN的廣播以及PUSH消息需要定義該權(quán)限 ${PACKAGE_NAME} 要替換上您應(yīng)用的包名 --> <permission android:name="${PACKAGE_NAME}.permission.PROCESS_PUSH_MSG" android:protectionLevel="signatureOrSystem"/> <!--接收PUSH TOKEN的廣播以及PUSH消息需要定義該權(quán)限 ${PACKAGE_NAME} 要替換上您應(yīng)用的包名 --> <uses-permission android:name="${PACKAGE_NAME}.permission.PROCESS_PUSH_MSG" />
- 配置Receiver
<!-- 接入HMSSDK PUSH模塊需要注冊(cè)咱扣,第三方相關(guān) :接收Push消息(注冊(cè)绽淘、透?jìng)飨ⅰ⑼ㄖ獧邳c(diǎn)擊事件)廣播闹伪,此receiver類(lèi)需要開(kāi)發(fā)者自己創(chuàng)建并繼承com.huawei.hms.support.api.push.PushReceiver類(lèi)沪铭,參考示例代碼中的類(lèi):com.huawei.hmsagent.HuaweiPushRevicer--> <!--“xxx”用實(shí)際的類(lèi)名替換, ${PACKAGE_NAME} 要替換上您應(yīng)用的包名--> <receiver android:name=".receiver.HWReciver" android:permission="com.foxhis.kft.permission.PROCESS_PUSH_MSG"> <intent-filter> <!-- 必須,用于接收token --> <action android:name="com.huawei.android.push.intent.REGISTRATION" /> <!-- 必須, 用于接收透?jìng)飨?--> <action android:name="com.huawei.android.push.intent.RECEIVE" /> <!-- 必須, 用于接收通知欄消息點(diǎn)擊事件 此事件不需要開(kāi)發(fā)者處理,只需注冊(cè)就可以--> <action android:name="com.huawei.intent.action.PUSH_DELAY_NOTIFY"/> </intent-filter> </receiver>
配置自己的HWReciver.png
- Agent初始化
在自定義的Application中的onCreat中調(diào)用com.huawei.android.hms.agent.HMSAgent.init(this);
使用與測(cè)試
- 調(diào)用獲取token
開(kāi)發(fā)文檔要求:調(diào)用connect偏瓤、請(qǐng)務(wù)必在應(yīng)用啟動(dòng)后的首個(gè)activity的onCreate方法中調(diào)用connect接口杀怠,確保HMS SDK和HMS APK的連接。
因?yàn)槲疫@邊是一進(jìn)去就執(zhí)行獲取token厅克,因此我將連接與申請(qǐng)抽成一個(gè)方法然后在啟動(dòng)的Activity的onCreate中執(zhí)行
image.png - 推送測(cè)試與錯(cuò)誤碼
華為推送通道因?yàn)轭A(yù)先配置了SHA256指紋信息赔退,后期測(cè)試時(shí)需要簽名打包才能進(jìn)行測(cè)試,所以這里可以預(yù)先更改下debug包的簽名模式來(lái)方便調(diào)試证舟,注意signingConfigs一定要在buildTypes之前硕旗,否則會(huì)出錯(cuò)debug簽名配置.png
運(yùn)行后輸出log日志,根據(jù)返回的code來(lái)對(duì)比通用錯(cuò)誤碼判斷是否成功獲取成功.png
過(guò)程中剛開(kāi)始一直拿不到token女责,四處翻找之后過(guò)一會(huì)又可以了漆枚,初步懷疑中間有什么耗時(shí)配置,后期會(huì)好很多抵知,擁有token之后就可以去后臺(tái)進(jìn)行測(cè)試了浪读,推送還是很快的
獲取簽名包證書(shū)指紋信息 SHA256獲取
keytool.exe -printcert -jarfile ....\release\app-release.apk
image.png
坑補(bǔ)充
-
華為暢玩系列 無(wú)法拿到token
幾經(jīng)周折昔榴,咨詢(xún)了華為push人員,得到結(jié)論碘橘,閹割版系統(tǒng)(運(yùn)行內(nèi)存為2g的就會(huì)被閹割)的華為手機(jī)是沒(méi)辦法去接入這推送的,調(diào)試過(guò)程中我也發(fā)現(xiàn)吱肌,暢玩7的手機(jī)應(yīng)用與通知管理里面是沒(méi)有應(yīng)用管理的痘拆,同樣我沒(méi)辦法找到華為移動(dòng)服務(wù),下載的apk也是沒(méi)辦法安裝成功的氮墨,所以對(duì)于這種裝不了華為移動(dòng)服務(wù)的華為手機(jī)纺蛆,請(qǐng)放棄對(duì)它的繼續(xù)調(diào)試吧!