zoukankan      html  css  js  c++  java
  • 关于个推(转)

    以浙江产的 个推为例 官网就是:http://docs.getui.com/

    有安卓的 ios的 还有java的 都是写好的demo和定义好的接口,方法 非常方便 拿来即用。

    若前端为mui集成框架开发的话,ios的会比较麻烦一点 因为ios有自己的消息推送通道即 apns 消息通道。这里不详细说明了。

    若是原生的 基本上没啥子 大问题。

    其中有java部分 以此为例:

    有限前端app框架为mui框架:

    代码实现也笔记简单,就是接收下后台来的 透传消息做下处理即可(其中透传的消息可以是带参数的 也可以不带参数直接传个路径);

    pushParameter 是参数集合 注意此段代码应放在search 主页面下。若放在index,下会不稳定 极不稳定。能成功接收到透传消息参数的概率极低。

    网上也查了下,使用其他个推 如百度推送 等 前端代码都大体差不多。

    document.addEventListener( "plusready", function(){
         message = document.getElementById("message");
         // 监听在线消息事件
         plus.push.addEventListener( "receive", function( msg ) {
            var info = plus.push.getClientInfo();
            var jsonStr=msg.content;
    //      if ( msg.aps ) {  // Apple APNS message
    //          alert("接收到在线APNS消息:111" );
    //         outSet( "接收到在线APNS消息:" );
    //      } else {
    //       //alert("接收到在线透传消息:"  );
    //          var jsonStr=msg.content;
    //             var content=JSON.parse(jsonStr)
    //         //alert(content.type); alert(content.clientid);
    //           outSet( "接收到在线透传消息:" );
    //      }
            var pushinfo=JSON.parse(jsonStr)
            var viewId = pushinfo.ViewId;
            var viewUrl = pushinfo.viewUrl;
            var pushParameter = pushinfo.pushParameter;
    
            //alert(pushParameter);
            if(pushinfo.type == "1"){
                if(viewUrl != null && viewUrl != ""){
                    mui.openWindow({
                        id: viewId,
                        url: viewUrl,
                        show: {
                            aniShow: "pop-in"
                        },
                        waiting: {
                            autoShow: true  
                        },
                        extras: pushParameter
                    });
                }
            }
        }, false );
        // 监听点击消息事件
        plus.push.addEventListener( "click", function( msg ) {
            // 判断是从本地创建还是离线推送的消息
            switch( msg.payload ) {
                case "LocalMSG":
                    outSet( "点击本地创建消息启动:" );
                break;
                default:
                    outSet( "点击离线推送消息启动:");
                break;
            }
            // 提示点击的内容
            plus.ui.alert( msg.content );
            // 处理其它数据
            logoutPushMsg( msg );
        }, false );
    }, false );
              

    至于后台就更为简单了:

    创建消息对象 调用接口 发送 ok了 例:

    PushInfo pushInfo = new PushInfo();
                PushParameter pushParameter = new PushParameter();
                pushParameter.setCarId(searchCarNormalId);
                pushParameter.setCarBrandName(searchCarNormal.getCarBrandName());
                pushParameter.setCarModelName(searchCarNormal.getModelName());
                pushParameter.setCarStyleName(searchCarNormal.getStyleName());
                pushInfo.setType(PushInfo.TYPE.DETAILPAGE);//选择是否 跳转页面
                pushInfo.setViewUrl(PushInfo.VIEWURL.findNormaDetail);//页面跳转路径
                pushInfo.setTitle(PushInfo.TITLE.normaSystem);//消息标题
                pushInfo.setBody(content);//消息内容
                pushInfo.setPushParameter(pushParameter);//透传消息参数 实体对象
                pushInfo.setImge(PushInfo.IMGE.DEFAULT);//个推常规设置-显示的标题图片名
                pushInfo.setUrl(PushInfo.URL.NULL);//个推常规设置-显示的标题图片路径
                pushInfo.setClientid(buyUser.getClientid());//从 后台获取到的CID
    //            pushInfo.setGoUrl("http://www.baidu.com");
                MessageSending.messageSending(mobile, content, pushInfo);//调用发送个推和短信 工具类中的方法

    单启线程进行消息 发送 因为个推会用到 别人的接口 和服务 有时候会比较慢所以:

    public static void messageSending(String mobile, String content,
                PushInfo pushInfo) {
            new Thread(IntermessageSending(mobile,content,pushInfo)).start();
        }
        private static Runnable IntermessageSending(String mobile, String content,
                PushInfo pushInfo) {
            SendSms.SMS(mobile,MobileShort.CHECKTYPE.NOTICE, content);
            PushMessageUtil.linkTemplate(pushInfo);
            return null;
            
        }

    具体实现,这里用的都是别人的接口及方法 官网上都有api 文档说的很详细:

    public static NotificationTemplate linkTemplate(PushInfo pushInfo) {
            IGtPush push = new IGtPush(host, appKey, masterSecret);
          SingleMessage message = new SingleMessage();
          NotificationTemplate template = new NotificationTemplate();
          // 设置APPID与APPKEY
          template.setAppId(appId);
          template.setAppkey(appKey);
          
          //ios apns通道消息栏通知设置
          APNPayload aPNPayload=new APNPayload(); 
          //aPNPayload.setAutoBadge("+1");//设置角标数值
          aPNPayload.setContentAvailable(1);
          aPNPayload.setSound("default");
          aPNPayload.setAlertMsg(getDictionaryAlertMsg(pushInfo));
          aPNPayload.setContentAvailable(0);
          template.setAPNInfo(aPNPayload);
      
        //透传消息设置,1,为强制启动应用, 2:等待应用启动
          template.setTransmissionType(1);
          template.setTransmissionContent(JSONObject.toJSONString(pushInfo));
          Style0 style=new Style0();
          
          // 安卓设置通知栏标题与内容
          style.setTitle(pushInfo.getTitle());
          style.setText(pushInfo.getBody());
          // 配置通知栏图标
          style.setLogo(pushInfo.getImge());
          // 配置通知栏网络图标,填写图标URL地址
          style.setLogoUrl(pushInfo.getUrl());
          // 设置通知是否响铃,震动,或者可清除
          style.setRing(true);
          style.setVibrate(true);
          style.setClearable(true);
          template.setStyle(style);
          //设置app离线消息发送缓存
          message.setOffline(true);
          // 离线有效时间,单位为毫秒,可选
          message.setOfflineExpireTime(24 * 3600 * 1000);
          message.setData(template);
          // 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发
          message.setPushNetWorkType(0); 
          extracted(push, message,pushInfo.getClientid());
          return template;
      }
  • 相关阅读:
    转 Python常见数据结构整理
    转 Python爬虫实战二之爬取百度贴吧帖子
    转 Python——UnicodeEncodeError: 'ascii' codec can't encode/decode characters
    慕课 python 操作数据库2 银行转账实例
    转 Python爬虫实战一之爬取糗事百科段子
    SQL 锁 lock
    SQL SERVER CROSS/OUTER APPLY 用法
    sql server 怎样用select语句调用自定义表值函数
    计算日期类型
    行转列:SQL SERVER PIVOT与用法解释
  • 原文地址:https://www.cnblogs.com/zhengqian/p/8609114.html
Copyright © 2011-2022 走看看