愈來愈多的CP在AGC上上架了快應用以後,但願吸引越多的用戶,提升應用的活躍度,從而帶來更多的流量,最終實現他們的商業價值。快應用提供了標準的Push能力,開發者能夠給用戶推送消息,好比推送一本好書、推送一個美食等,點擊消息能夠拉起快應用。css
適用場景
- 場景一:購物
商城類快應用經過接入Push,給用戶推送心儀商品的降價通知。java
- 場景二:閱讀
閱讀類的快應用經過接入Push,給用戶推薦好書、章節更新等消息,讓用戶第一時間獲得最新進展。緩存
- 場景三: 美食
美食類快應用經過接入Push,給用戶推薦好吃的東西、推薦好的餐館,方便了用戶,也給餐飲業帶來了知名度和商業利益。服務器
Push介紹
-
華爲推送(Push)是爲開發者提供的消息推送平臺,創建了從雲端到手機端的消息推送通道,讓應用能夠將最新信息及時通知到用戶,從而構築良好的用戶關係,提高用戶的感知和活躍度。app
-
快應用Push功能在EMUI8.0及以上版本的手機上支持。ide
-
發送PUSH消息的流程以下圖所示:測試
Push接口介紹:fetch
模塊名:service.pushui
模塊引入:import push from '@service.push' 或 var push = require("@service.push")this
支持的接口:
開發準備
硬件要求
-
一臺計算機(須要安裝好Quick App IDE)。
-
一部華爲手機(帶USB數據線),用於運行開發的應用程序,EMUI 8.0及以上。
軟件要求
-
PC上安裝Node.js 10以上
-
PC上安裝Quick App IDE最新版本
其餘要求
- 在華爲開發者聯盟申請PUSH服務,具體操做請參見:開通Push服務。
須要的知識點
- Javascript+css
開發步驟
-
調用 push.getProvider 接口判斷當前設備是否支持華爲PUSH服務,接口返回 huawei 表示支持,不然表示不支持。後續Push其餘接口調用必須在設備支持PUSH服務的前提進行。
-
調用 push.subscribe 接口獲取regId。regId也被稱爲token或push token,是用於發送push消息的標識。
注意:以上接口推薦在全局app.ux中調用。
示例代碼以下:
checkPushIsSupported(){ let provider= push.getProvider(); console.log("checkPush provider= "+provider); if(provider==='huawei'){ this.pushsubscribe(); } }, pushsubscribe() { console.log("pushsubscribe start"); var that=this; push.subscribe({ success: function (data) { console.log("push.subscribe succeeded, result data=" + JSON.stringify(data)); that.dataApp.pushtoken=data.regId; }, fail: function (data, code) { console.log("push.subscribe failed, result data=" + JSON.stringify(data) + ", code=" + code); }, complete: function () { console.log("push.subscribe completed"); } }) },
-
將2中獲取到的regId經過快應用fetch接口上報到快應用本身的業務服務器,用於後續服務器向快應用發送push消息。 regId通常狀況下不會發生變化,不須要每次獲取後都上報到服務器。
推薦作法:使用快應用storage接口本地存儲regId,每次獲取到regId時先和本地存儲的對比,相等則不上報到業務服務器,不相等說明發生變化了,須要上報到業務服務器。流程圖以下圖所示: Push token與本地緩存對比的代碼邏輯以下:
checkToken() { var subscribeToken=this.$app.$def.dataApp.pushtoken; console.log(「checkToken subscribeToken= 」+subscribeToken); var storage = require("@system.storage"); var that=this; storage.get({ key: 'token', success: function (data) { console.log("checkToken handling success data= "+data); if (subscribeToken != data) { //上報到本身的業務服務器 that.uploadToken(subscribeToken); that.saveToken(subscribeToken); } }, fail: function (data, code) { console.log("handling fail, code = " + code); } }) },
上傳到開發者業務服務器示例代碼以下:
uploadToken(subscribeToken) { console.log("uploadToken"); var that = this; var body = { xx: subscribeToken }; fetch.fetch({ url: 'https://xxx', method: 'POST', data: body, success: function (data) { console.log("uploadToken code: " + data.code); console.log("uploadToken data: " + data.data); }, fail: function (data, code) { console.log("handling fail, code = " + code); } }) },
注意事項:以上示例代碼中的fetch接口調用中的參數須要替換業務本身的服務器地址。fetch接口更多內容請參考官網API fetch。
Pushtoken保存到本地代碼以下:
saveToken(subscribeToken){ console.log("saveToken"); var storage = require("@system.storage"); storage.set({ key: 'token', value: subscribeToken, success: function (data) { console.log("saveToken handling success"); }, fail: function (data, code) { console.log("saveToken handling fail, code = " + code); } }) },
Push測試
客戶端的開發流程已經結束了,是否是很easy?接下來,怎麼給手機上推送消息測試呢?這個時候pushtoken就很是重要了,它是惟一標識設備的標誌,有了它,push服務能夠準確把消息發送到正確的手機和應用上。手機上接收通知欄消息須要知足以下條件之一:
-
在桌面有快捷方式的快應用
-
加入「個人快應用」的快應用
-
有使用記錄的快應用
-
快應用處於運行狀態
目前能夠經過下面兩種方式來發送Push消息:
-
在華爲開發者聯盟發送:適用選取部分目標用戶發送,支持推送到現網的快應用(已經在應用市場上上架)和加載器上運行的快應用。 具體操做步驟請參考官網https://developer.huawei.com/consumer/cn/doc/development/quickApp-Guides/quickapp-access-push-kit
-
經過服務端接口發送:適用面向大批量用戶發送,支持推送到現網的快應用和加載器上運行的快應用。服務端接口發送涉及到accessToken接口和發送push消息接口,接口協議格式請參考官網說明。
1)首先訪問accessToken接口獲取access_token, access_token在發送push消息接口中須要使用到。
2)接着訪問發送push消息接口,發送push消息。Push通知欄消息體示例代碼截圖(js 代碼)以下:
常見FAQ
Q1:push推送能夠不填regid,進行全部用戶推送嗎?
不能夠,推送是根據regid進行的,一個regid表明一個用戶。
Q2:AGC上發送Push消息時,填入token後又會消失,如何處理?
填入token後,加上逗號結束便可。
Q3:服務端接口發送時,提示token非法,什麼緣由呢?
請排查華爲申請Push服務使用的包名、簽名指紋是否與調試應用中的包名、簽名指紋一致。
請排查pushtoken是不是華爲快應用引擎返回的token。
Q4: 如何知道推送的消息是否到達用戶手機上了呢?
- 在AGC上開通Push服務時,可填寫回執url,回執結果中能夠看到華爲Push服務返回的推送狀況。 例如,Push發送請求結果以下:
{"code":"80000000","msg":"Success","request_id":"159963843932289603004301"}
- 回執結果以下:
{"appid":"102580573","biTag":"d1c4b1c9cf624bfcb400e76da1446ad6","status":102,"timestamp":1599638444727,"token":"AMaY1irGfU2uV2LwcW65m9NgRc9MgMYLA9v_w2s-MhLtxceDiBHVUXXX9ifS2S14mYbvzqsQwLl9NTcF7R-DdBr_33x_V4BzVJFSrLwZjWWYfGz_AGQpWnkzLpeXellUzw"}
請求結果返回成功,可是回執結果狀態是102,實際上消息並無到達手機上,回執結果中「status」:102代表消息被頻控了。
欲瞭解更多詳情,請參閱:
快應用開發指導文檔:https://developer.huawei.com/consumer/cn/doc/development/quickApp-Guides/quickapp-whitepaper
快應用Push接入:https://developer.huawei.com/consumer/cn/doc/development/quickApp-Guides/quickapp-access-push-kit
原文連接:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0202381629952320300&fid=18 做者:鼓樓趙又廷