個推測試結果+先後端如何分工

一、ios和android,接收個推推送的測試狀況:前端

測試機型和版本:
ios: iphone 6s plus,ios12.1.4
android: 紅米5plus, android 8.1.0
android

注意:
1.一、根據項目需求,選擇推送的消息類型。

好比,咱們的項目需求是,ios和android在前臺運行時,能彈出通知。在後臺和退出時,系統能收到推送通知。
綜合考慮,咱們選擇推送的消息格式爲 標準的透傳消息。ios

1.二、標準的透傳消息格式如:{"title":"1","content":"2","payload":"數據"} ajax

       非標準的透傳消息格式如: {"title":"1","content":"2""payload":"數據"} json

 

二、先後端分工後端

咱們的項目需求是,將 clientid 和 手機號 綁定起來,後臺設置推送。服務器

前端:獲取clientid 和 手機號,提交至後臺綁定(需後臺同事提供接口)。剛下載app後,打開第一次,有時會獲取不到clientid。網絡

         我這邊的處理是,第一次獲取失敗後,嘗試10次請求。經測試,重獲取一次,就很快獲取到clientid。app

         plusready.js 是進入app,就調用的js。而綁定手機號和clientid的函數,是在另外一個單獨的js裏定義的。調用時間在 plusready.js 以後。iphone

下圖是plusready.js中關於clientid的獲取: 

document.addEventListener('plusready', function(){
        // 獲取客戶端標識信息
        var info = plus.push.getClientInfo();        
        window.regid = info.clientid;
    }, false);

下圖是綁定手機號和clientid的函數:

function bindTelAndCid(tel) {
    // 獲取clientId 和 手機號,發至後臺綁定。
    if(window.plus) {
        getCidAgain();
    } else {
        document.addEventListener('plusready',getCidAgain,false);
    }
    function getCidAgain() {
        //首次進入app獲取clientId失敗,再次獲取
        var count = 0;
        //若是cid不存在,就每隔1秒從新獲取,嘗試最多10次。
        if(!window.regid || window.regid == 'null') {
            var timer = window.setInterval(function(){  
                if(count > 9) return false;
                var info = plus.push.getClientInfo();  
                window.regid = info.clientid;
                if(window.regid && window.regid != 'null') {
                    clearInterval(timer);
                    sendTelAndCid();  
                }
                count++;
            }, 1000);
        } else {
            sendTelAndCid();
        }
    }
    //發送手機號和cid至後臺,綁定和推送
    function sendTelAndCid() {
        $.ajax({
            type:"get",
            data: {phone: tel, clientId: window.regid},
            dataType: "json",
            url: "http://xxxxxxxxxxxxxx",
            success:function(res){
               
            }
        })
    }
}

 後臺:調用個推文檔中相關的推送接口,進行推送。個推文檔:http://docs.getui.com/getui/more/word/

下面是後臺同事(JAVA)提供的推送設置示例代碼:

 public static TransmissionTemplate getTemplate2(String title,String content) {
        TransmissionTemplate template = new TransmissionTemplate();
        template.setAppId(appId);
        template.setAppkey(appKey);
        template.setTransmissionContent("{\"title\":\""+title+"\",\"content\":\""+content+"\",\"payload\":{\"type\":1,\"total_count\":5}}");
        template.setTransmissionType(2);
        APNPayload payload = new APNPayload();
        //在已有數字基礎上加1顯示,設置爲-1時,在已有數字上減1顯示,設置爲數字時,顯示指定數字
        payload.setAutoBadge("0");
        payload.setContentAvailable(1);
        //ios 12.0 以上能夠使用 Dictionary 類型的 sound
        payload.setSound("default");
        payload.setCategory("$由客戶端定義");
        payload.addCustomMsg("payload", "payload");
        //簡單模式APNPayload.SimpleMsg
        payload.setAlertMsg(new APNPayload.SimpleAlertMsg(content)); //hello

        //字典模式使用APNPayload.DictionaryAlertMsg
        //payload.setAlertMsg(getDictionaryAlertMsg());

        //設置語音播報類型,int類型,0.不可用 1.播放body 2.播放自定義文本
        //payload.setVoicePlayType(0);
        //設置語音播報內容,String類型,非必須參數,用戶自定義播放內容,僅在voicePlayMessage=2時生效
        //注:當"定義類型"=2, "定義內容"爲空時則忽略不播放
        //payload.setVoicePlayMessage("定義內容");

        // 添加多媒體資源
        payload.addMultiMedia(new MultiMedia().setResType(MultiMedia.MediaType.video)
                .setResUrl("http://www.baidu.com")
                .setOnlyWifi(true));
        //須要使用IOS語音推送,請使用VoIPPayload代替APNPayload
        // VoIPPayload payload = new VoIPPayload();
        // JSONObject jo = new JSONObject();
        // jo.put("key1","value1");
        //         payload.setVoIPPayload(jo.toString());
        //
        template.setAPNInfo(payload);
        return template;
    }

  
   public static Map<String, Object> pushToApp(String CID1,String title,String content) {
        IGtPush push = new IGtPush(host, appKey, masterSecret);
        TransmissionTemplate template = getTemplate2(title,content);
        SingleMessage message = new SingleMessage();
        message.setOffline(true);
        // 離線有效時間,單位爲毫秒,可選
        message.setOfflineExpireTime(24 * 3600 * 1000);
        message.setData(template);
        // 可選,1爲wifi,0爲不限制網絡環境。根據手機處於的網絡狀況,決定是否下發
        message.setPushNetWorkType(0);
        Target target = new Target();
        target.setAppId(appId);
        target.setClientId(CID1);
        //target.setAlias(Alias);
        IPushResult ret = null;
        try {
            ret = push.pushMessageToSingle(message, target);
        } catch (RequestException e) {
            e.printStackTrace();
            ret = push.pushMessageToSingle(message, target, e.getRequestId());
        }
        Map<String, String> mapOne = new HashMap<>();
        Map<String, String> mapTwo = new HashMap<>();
        Map<String, Object> map= new HashMap<>();
        if (ret != null) {
            Map<String, Object> resultMap = ret.getResponse();
            System.out.println("resultMap=" + resultMap);

            String result = resultMap.get("result").toString();
            String taskId = "";
            String status = "";
            if(Constant.IS_OK.equals(result)){
                taskId = resultMap.get("taskId").toString();
                status = resultMap.get("status").toString();
            }

            System.out.println("resultMap.get(\"result\")=" + result);
            GeTuiResult geTuiResult = GeTuiResult.getGeTuiResult(result);
            System.out.println("code=" + geTuiResult.code + ";reason=" + geTuiResult.reason);
            mapOne.put(geTuiResult.code, geTuiResult.reason);
            mapTwo.put("taskId",taskId);
            mapTwo.put("status",status);
            map.put("mapOne",mapOne);
            map.put("mapTwo",mapTwo);
            return map;
        } else {
            map.put("500", "服務器響應異常");
            return map;
        }
    }  
相關文章
相關標籤/搜索