• 个推测试结果+前后端如何分工


    1、ios和android,接收个推推送的测试情况:

    测试机型和版本:
    ios: iphone 6s plus,ios12.1.4
    android: 红米5plus, android 8.1.0

    注意:
    1.1、根据项目需求,选择推送的消息类型。

    比如,我们的项目需求是,ios和android在前台运行时,能弹出通知。在后台和退出时,系统能收到推送通知。
    综合考虑,我们选择推送的消息格式为 标准的透传消息。

    1.2、标准的透传消息格式如:{"title":"1","content":"2","payload":"数据"} 

           非标准的透传消息格式如: {"title":"1","content":"2""payload":"数据"} 

    2、前后端分工

    我们的项目需求是,将 clientid 和 手机号 绑定起来,后台设置推送。

    前端:获取clientid 和 手机号,提交至后台绑定(需后台同事提供接口)。刚下载app后,打开第一次,有时会获取不到clientid。

             我这边的处理是,第一次获取失败后,尝试10次请求。经测试,重获取一次,就很快获取到clientid。

             plusready.js 是进入app,就调用的js。而绑定手机号和clientid的函数,是在另一个单独的js里定义的。调用时间在 plusready.js 之后。

    下图是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;
            }
        }  
  • 相关阅读:
    系列之前端:从重复造轮子说起
    Asp.Net Core基于JWT认证的数据接口网关Demo
    通过编写一个简单的日志类库来加深了解C#的文件访问控制
    .net core 的图片处理及二维码的生成及解析
    svmtrain和svmpredict简介
    svm小问题
    SVM (support vector machine)
    ubuntu在windows下的wubi安装
    ubuntu在windows下的wubi安装
    [转]无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues
  • 原文地址:https://www.cnblogs.com/zy20160429/p/10530941.html
Copyright © 2020-2023  润新知