手把手教你接入快應用Push


越來越多的CP在AGC上上架了快應用之后,希望吸引越多的用戶,提高應用的活躍度,從而帶來更多的流量,最終實現他們的商業價值。快應用提供了標准的Push能力,開發者可以給用戶推送消息,比如推送一本好書、推送一個美食等,點擊消息可以拉起快應用。

適用場景

  • 場景一:購物

商城類快應用通過接入Push,給用戶推送心儀商品的降價通知。

  • 場景二:閱讀

閱讀類的快應用通過接入Push,給用戶推薦好書、章節更新等消息,讓用戶第一時間得到最新進展。

  • 場景三: 美食

美食類快應用通過接入Push,給用戶推薦好吃的東西、推薦好的餐館,方便了用戶,也給餐飲業帶來了知名度和商業利益。

Push介紹

  • 華為推送(Push)是為開發者提供的消息推送平台,建立了從雲端到手機端的消息推送通道,讓應用可以將最新信息及時通知到用戶,從而構築良好的用戶關系,提升用戶的感知和活躍度。

  • 快應用Push功能在EMUI8.0及以上版本的手機上支持。

  • 發送PUSH消息的流程如下圖所示:

在這里插入圖片描述
Push接口介紹:

模塊名:service.push

模塊引入:import push from '@service.push' 或 var push = require("@service.push")

支持的接口:
在這里插入圖片描述

開發准備

  硬件要求

  • 一台計算機(需要安裝好Quick App IDE)。

  • 一部華為手機(帶USB數據線),用於運行開發的應用程序,EMUI 8.0及以上。

  軟件要求

  • PC上安裝Node.js 10以上

  • PC上安裝Quick App IDE最新版本

  其他要求

  • 在華為開發者聯盟申請PUSH服務,具體操作請參見:開通Push服務。

  需要的知識點

  • Javascript+css

開發步驟

  1. 調用 push.getProvider 接口判斷當前設備是否支持華為PUSH服務,接口返回 huawei 表示支持,否則表示不支持。后續Push其他接口調用必須在設備支持PUSH服務的前提進行。

  2. 調用 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");
                }
            })
        },
  1. 將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服務可以准確把消息發送到正確的手機和應用上。手機上接收通知欄消息需要滿足如下條件之一:

  1. 在桌面有快捷方式的快應用

  2. 加入“我的快應用”的快應用

  3. 有使用記錄的快應用

  4. 快應用處於運行狀態

目前可以通過下面兩種方式來發送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
作者:鼓樓趙又廷


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM