zoukankan      html  css  js  c++  java
  • Java集成个推----可点击跳转到指定页面

    说明:个推官网上创建应用获取   appId   appKey   masterSecret 

    一、maven依赖个推的sdk

    <!--移动端消息推送(个推)start-->
            <dependency>
                <groupId>com.gexin.platform</groupId>
                <artifactId>gexin-rp-sdk-base</artifactId>
                <version>4.0.0.20</version>
            </dependency>
            <dependency>
                <groupId>com.gexin.platform</groupId>
                <artifactId>gexin-rp-sdk-http</artifactId>
                <version>4.0.1.15</version>
            </dependency>
            <dependency>
                <groupId>com.gexin.platform</groupId>
                <artifactId>gexin-rp-sdk-template</artifactId>
                <version>4.0.0.14</version>
            </dependency>
            <dependency>
                <groupId>com.gexin</groupId>
                <artifactId>gexin-rp-fastjson</artifactId>
                <version>1.0.0.1</version>
            </dependency>
            <dependency>
                <groupId>com.google.protobuf</groupId>
                <artifactId>protobuf-java</artifactId>
                <version>2.5.0</version>
            </dependency>
           <!--移动端消息推送(个推)end-->

    二、GetuiUtils工具类

    package com.zsplat.contract.util;
    
    /**
     * @author ZhouPan
     * @version V1.0
     * @ClassName: GeiTuiUtils
     * @Description: TODO(这个类的作用是 :)
     * @date 2018/9/10 18:54
     * @Copyright: 2018 www.zsplat.com Inc. All rights reserved.
     */
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.gexin.rp.sdk.base.IAliasResult;
    import com.gexin.rp.sdk.base.IBatch;
    import com.gexin.rp.sdk.base.IIGtPush;
    import com.gexin.rp.sdk.base.IPushResult;
    import com.gexin.rp.sdk.base.impl.AppMessage;
    import com.gexin.rp.sdk.base.impl.SingleMessage;
    import com.gexin.rp.sdk.base.impl.Target;
    import com.gexin.rp.sdk.base.uitls.AppConditions;
    import com.gexin.rp.sdk.exceptions.RequestException;
    import com.gexin.rp.sdk.http.IGtPush;
    import com.gexin.rp.sdk.template.LinkTemplate;
    import com.gexin.rp.sdk.template.NotificationTemplate;
    import com.gexin.rp.sdk.template.TransmissionTemplate;
    import com.gexin.rp.sdk.template.style.Style0;
    
    public class GetuiUtils {
    
        private static String appId = "zJWXXzw2eN7H8qNuZ13u1";
        private static String appKey = "VrbK80QzQ89cZfvxtyFzI8";
        private static String masterSecret = "zD66fgm5Ux8ZAkOoGrUmc2";
        public static String host = "https://sdk.open.api.igexin.com/apiex.htm";
    //    public static String CID_A = "096ed21e39f2a8f42bc78b4058973a1b";//在打包后的APP的js中获取 var cId = plus.push.getClientInfo().clientid;
        public static String CID_A = "FAE67BE19A4A579114F8C34186EFA9D709F1BEB16358285316F3E38642C79761";//在打包后的APP的js中获取 var cId = plus.push.getClientInfo().clientid;
        public static String CID_B = "bae837b470994d614f0773097b92dbf3";
        public static IGtPush push;
    
        static {
            push = new IGtPush(host, appKey, masterSecret);
        }
    
        /**
         * 绑定用户cid 别名
         *
         * @param Alias
         * @param CID
         * @return
         */
        public static boolean bindAlias(String alias, String CID) {
            IAliasResult bindSCid = push.bindAlias(appId, alias, CID);
            if (bindSCid.getResult()) {
                return true;
            }
            return false;
        }
    
        /**
         * 对单个用户推送消息
         *
         * @param alias
         * @param msg
         * @return
         */
        public static boolean pushMessageToSingle(String cid, String text, String transMsg) {
            IGtPush push = new IGtPush(host, appKey, masterSecret);
            NotificationTemplate template = notificationTemplate("title", text, transMsg);
            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(cid);
            //target.setAlias(Alias);
            IPushResult ret = null;
            try {
                ret = push.pushMessageToSingle(message, target);
            } catch (RequestException e) {
                e.printStackTrace();
                ret = push.pushMessageToSingle(message, target, e.getRequestId());
            }
            if (ret != null && ret.getResponse() != null && ret.getResponse().containsKey("result")) {
                System.out.println(ret.getResponse().toString());
                if (ret.getResponse().get("result").toString().equals("ok") && ret.getResponse().containsKey("status")) {
                    return true;
                }
            }
            return false;
        }
    
        /**
         * 指定应用的所有用户群发推送消息
         *
         * @param msg
         */
        public static boolean pushtoAPP(String text, String transMsg) {
            IGtPush push = new IGtPush(host, appKey, masterSecret);
    
            NotificationTemplate template = notificationTemplate("title", text, transMsg);
            AppMessage message = new AppMessage();
            message.setData(template);
    
            message.setOffline(true);
            //离线有效时间,单位为毫秒,可选
            message.setOfflineExpireTime(24 * 1000 * 3600);
            //推送给App的目标用户需要满足的条件
            AppConditions cdt = new AppConditions();
            List<String> appIdList = new ArrayList<String>();
            appIdList.add(appId);
            message.setAppIdList(appIdList);
            //手机类型
            List<String> phoneTypeList = new ArrayList<String>();
            //省份
            List<String> provinceList = new ArrayList<String>();
            //自定义tag
            List<String> tagList = new ArrayList<String>();
    
            cdt.addCondition(AppConditions.PHONE_TYPE, phoneTypeList);
            cdt.addCondition(AppConditions.REGION, provinceList);
            cdt.addCondition(AppConditions.TAG, tagList);
            message.setConditions(cdt);
    
            IPushResult ret = push.pushMessageToApp(message, "msg_toApp");
    
            if (ret != null && ret.getResponse() != null && ret.getResponse().containsKey("result")) {
                System.out.println(ret.getResponse().toString());
                if (ret.getResponse().get("result").toString().equals("ok")) {
                    return true;
                }
            }
            return false;
        }
    
        /**
         * 对单个用户推送透传消息
         *
         * @param alias
         * @param title
         * @param content
         * @return
         */
        public static boolean pushTransMessageToSingle(String cid, String msg) {
            TransmissionTemplate template = transTemplate(cid, msg);
            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(cid);
            IPushResult ret = null;
            try {
                ret = push.pushMessageToSingle(message, target);
            } catch (RequestException e) {
                e.printStackTrace();
                ret = push.pushMessageToSingle(message, target, e.getRequestId());
            }
            if (ret != null && ret.getResponse() != null && ret.getResponse().containsKey("result")) {
                System.out.println(ret.getResponse().toString());
                if (ret.getResponse().get("result").toString().equals("ok") && ret.getResponse().containsKey("status")) {
                    return true;
                }
            }
            return false;
        }
    
        public static void pushMessageToIBatch(List<String> alias, String msg) {
            IBatch batch = push.getBatch();
            IPushResult ret = null;
            try {
                for (int i = 0; i < alias.size(); i++) {
                    // 构建客户a的透传消息a
                    constructClientTransMsg(alias.get(i), msg, batch);
                }
                // 构建客户B的点击通知打开网页消息b
                // constructClientLinkMsg(CID_B,"msgB",batch);
                ret = batch.submit();
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println(ret.getResponse().toString());
        }
    
        private static NotificationTemplate notificationTemplate(String title, String text, String obj) {
            NotificationTemplate template = new NotificationTemplate();
            // 设置APPID与APPKEY
            template.setAppId(appId);
            template.setAppkey(appKey);
            // 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动
            template.setTransmissionType(1);
            template.setTransmissionContent(obj);
            // 设置定时展示时间
            // template.setDuration("2015-01-16 11:40:00", "2015-01-16 12:24:00");
            Style0 style = new Style0();
            // 设置通知栏标题与内容
            style.setTitle(title);
            style.setText(text);
            // 配置通知栏图标
            style.setLogo("XXX");
            // 配置通知栏网络图标
            //style.setLogoUrl("");
            // 设置通知是否响铃,震动,或者可清除
            style.setRing(true);
            style.setVibrate(true);
            style.setClearable(true);
            template.setStyle(style);
    
            return template;
        }
    
        private static TransmissionTemplate transTemplate(String cid, String msg) {
            TransmissionTemplate template = new TransmissionTemplate();
            // 设置APPID与APPKEY
            template.setAppId(appId);
            template.setAppkey(appKey);
            template.setTransmissionContent(msg);
            template.setTransmissionType(0); // 这个Type为int型,填写1则自动启动app
    
            return template;
        }
    
        //点击通知打开应用模板
        public static void constructClientTransMsg(String cid, String msg, IBatch batch) throws Exception {
    
            SingleMessage message = new SingleMessage();
            NotificationTemplate template = new NotificationTemplate();
    //        TransmissionTemplate template = new TransmissionTemplate();//自定义模板
            template.setAppId(appId);
            template.setAppkey(appKey);
            template.setTransmissionContent(msg);//消息内容
            template.setTransmissionType(1); // 这个Type为int型,填写1则自动启动app
            Style0 style = new Style0();        // 设置通知栏标题与内容
            style.setTitle("合同管理");
            style.setText(msg);        // 配置通知栏图标
            style.setLogo("");        // 配置通知栏网络图标
            style.setLogoUrl("");//网络图标地址
            // 设置通知是否响铃,震动,或者可清除
            style.setRing(true);
            style.setVibrate(true);
            style.setClearable(true);
            template.setStyle(style);
    
            message.setData(template);
            message.setOffline(true);
            message.setOfflineExpireTime(2 * 60 * 60 * 1000);
    
            // 设置推送目标,填入appid和clientId
            Target target = new Target();
            target.setAppId(appId);
            target.setClientId(cid);
            batch.add(message, target);
        }
    
        //点击通知打开网页消息
        public static void constructClientLinkMsg(String cid, String msg, IBatch batch) throws Exception {
    
            SingleMessage message = new SingleMessage();
            LinkTemplate template = new LinkTemplate();
            template.setAppId(appId);
            template.setAppkey(appKey);
            template.setTitle("title");
            template.setText(msg);
            template.setLogo("push.png");
            template.setLogoUrl("logoUrl");
            template.setUrl("http://www.baidu.com");
    
            message.setData(template);
            message.setOffline(true);
            message.setOfflineExpireTime(60 * 1000);
    
            // 设置推送目标,填入appid和clientId
            Target target = new Target();
            target.setAppId(appId);
            target.setClientId(cid);
            batch.add(message, target);
        }
    
        public static void main(String[] args) throws IOException {
    
            IIGtPush push = new IGtPush(host, appKey, masterSecret);
            IBatch batch = push.getBatch();
    
            try {
                //构建客户a的透传消息a
                GetuiUtils.constructClientTransMsg(CID_A, "msgA", batch);
                //构建客户B的点击通知打开网页消息b
    //            constructClientLinkMsg(CID_B, "msgB", batch);
            } catch (Exception e) {
                e.printStackTrace();
            }
            batch.submit();
        }
    }

    三、controller应用

    package com.zsplat.contract.controller;
    
    import com.gexin.rp.sdk.base.IBatch;
    import com.zsplat.contract.model.ZsFundFlow;
    import com.zsplat.contract.model.ZsGoods;
    import com.zsplat.contract.model.ZsGoodsFlow;
    import com.zsplat.contract.model.ZsPubDoctor;
    import com.zsplat.contract.service.*;
    import com.zsplat.contract.util.DateUtil;
    import com.zsplat.contract.util.GetuiUtils;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.Resource;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * @author ZhouPan
     * @version V1.0
     * @ClassName: messageQuartz
     * @Description: TODO(这个类的作用是 : 定时发送消息)
     * @date 2018/9/12 20:07
     */
    @Component(value = "messageQuartz")
    public class messageQuartz {
        @Resource
        private GoodsFlowService goodsFlowService;
        @Resource
        private ContractService contractService;
        @Resource
        private MessageService messageService;
        @Resource
        private PubDoctorService pubDoctorService;
        @Resource
        private FundFlowService fundFlowService;
    
        private static int CALC = 0;
    
        @Scheduled(cron="30 * * * * ?")
    //    @Scheduled(cron = "0 0 9 * * ? ") //每天早上9:00触发
        public void sendMessage() {
            Map<String, Object> paramsMap = new HashMap<String, Object>();
            try {
                IBatch batch = GetuiUtils.push.getBatch();
                /*货物流推送   0:备货;1:生产;2:包装;3:发货;4:到场;5:验收;6:移交;*/
                List<ZsGoodsFlow> ZsGoodsFlowList = goodsFlowService.queryGoodsFlow(paramsMap);
                /*资金流消息定时推送   0:预付款;1:进度款;2:发货款;3:收货款;4:验收款;5:质保金;*/
                List<ZsFundFlow> zsFundFlowsList = fundFlowService.queryFundFlow(paramsMap);
                for (int i = 0; i < zsFundFlowsList.size(); i++) {
                    ZsFundFlow zsFundFlow = zsFundFlowsList.get(i);
                    if (zsFundFlow.getTime1() != null) {
                        int days = DateUtil.differentDaysByMillisecond(new Date(), zsFundFlow.getTime1());
                        if (days == 7) {
                            //发送的信息详情
                            String sendContent = "";
                            ZsGoods goodsModel = null;
                            if (zsFundFlow.getType().equals("0")) {
                                goodsModel = zsFundFlow.getGoodsModel();
                                //发送的信息详情
                                sendContent = goodsModel.getContractName() + "下的" + goodsModel.getGoodsName() + "还有7天就要预付款,请提前做好准备,准备结款";
                            } else if (zsFundFlow.getType().equals("1")) {
                                goodsModel = zsFundFlow.getGoodsModel();
                                //发送的信息详情
                                sendContent = goodsModel.getContractName() + "下的" + goodsModel.getGoodsName() + "还有7天就要进度款,请提前做好准备,准备结款";
                            } else if (zsFundFlow.getType().equals("2")) {
                                goodsModel = zsFundFlow.getGoodsModel();
                                //发送的信息详情
                                sendContent = goodsModel.getContractName() + "下的" + goodsModel.getGoodsName() + "还有7天就要发货款,请提前做好准备,准备结款";
                            } else if (zsFundFlow.getType().equals("3")) {
                                goodsModel = zsFundFlow.getGoodsModel();
                                //发送的信息详情
                                sendContent = goodsModel.getContractName() + "下的" + goodsModel.getGoodsName() + "还有7天就要收货款,请提前做好准备,准备结款";
                            } else if (zsFundFlow.getType().equals("4")) {
                                goodsModel = zsFundFlow.getGoodsModel();
                                //发送的信息详情
                                sendContent = goodsModel.getContractName() + "下的" + goodsModel.getGoodsName() + "还有7天就要验收款,请提前做好准备,准备结款";
                            } else if (zsFundFlow.getType().equals("5")) {
                                goodsModel = zsFundFlow.getGoodsModel();
                                //发送的信息详情
                                sendContent = goodsModel.getContractName() + "下的" + goodsModel.getGoodsName() + "还有7天就要质保金,请提前做好准备,准备结款";
                            } else {
                                continue;
                            }
                            Map<String, Object> goodsMap = new HashMap<String, Object>();
                            goodsMap.put("deptName", goodsModel.getDeptName());
                            List<ZsPubDoctor> zsPubDoctors = pubDoctorService.selectByRoleIdAndDept(goodsMap);
                            ZsPubDoctor createUserModel = goodsModel.getCreateUserModel();//创建货物的用户
                            boolean flag = true;//默认创建人不是领导
                            for (int j = 0; j < zsPubDoctors.size(); j++) {
                                Map<String, Object> messageMap = new HashMap<String, Object>();//消息实体参数
                                ZsPubDoctor zsPubDoctor = zsPubDoctors.get(j);
                                if (zsPubDoctor.getId() == createUserModel.getId()) {
                                    flag = false;
                                }
                                if(zsPubDoctor.getRole().getId()==49){
                                    if (zsFundFlow.getType().equals("5")) {
                                        messageMap.put("contractNumber", goodsModel.getContractNumber());
                                        messageMap.put("contractName", goodsModel.getContractName());
                                        messageMap.put("goodId", goodsModel.getId());
                                        messageMap.put("goodName", goodsModel.getGoodsName());
                                        messageMap.put("node", "1");
                                        messageMap.put("type", zsFundFlow.getType());
                                        messageMap.put("content", sendContent);
                                        messageMap.put("acceptId", zsPubDoctor.getId());
                                        messageMap.put("acceptName", zsPubDoctor.getRealname());
                                        messageMap.put("createTime", new Date());
                                        Integer messageId = messageService.addMessage(messageMap);
                                        GetuiUtils.constructClientTransMsg(zsPubDoctor.getClientId(), sendContent, batch);
                                        batch.submit();
                                    } else {
                                        continue;
                                    }
                                } else {
                                    messageMap.put("contractNumber", goodsModel.getContractNumber());
                                    messageMap.put("contractName", goodsModel.getContractName());
                                    messageMap.put("goodId", goodsModel.getId());
                                    messageMap.put("goodName", goodsModel.getGoodsName());
                                    messageMap.put("node", "1");
                                    messageMap.put("type", zsFundFlow.getType());
                                    messageMap.put("content", sendContent);
                                    messageMap.put("acceptId", zsPubDoctor.getId());
                                    messageMap.put("acceptName", zsPubDoctor.getRealname());
                                    messageMap.put("createTime", new Date());
                                    Integer messageId = messageService.addMessage(messageMap);
                                    GetuiUtils.constructClientTransMsg(zsPubDoctor.getClientId(), sendContent, batch);
                                    batch.submit();
                                }
                            }
                            if (flag) {
                                Map<String, Object> messageMap = new HashMap<String, Object>();//消息实体参数
                                messageMap.put("contractNumber", goodsModel.getContractNumber());
                                messageMap.put("contractName", goodsModel.getContractName());
                                messageMap.put("goodId", goodsModel.getId());
                                messageMap.put("goodName", goodsModel.getGoodsName());
                                messageMap.put("node", "1");
                                messageMap.put("type", zsFundFlow.getType());
                                messageMap.put("content", sendContent);
                                messageMap.put("acceptId", createUserModel.getId());
                                messageMap.put("acceptName", createUserModel.getRealname());
                                messageMap.put("createTime", new Date());
                                Integer messageId = messageService.addMessage(messageMap);
                                GetuiUtils.constructClientTransMsg(createUserModel.getClientId(), sendContent, batch);
                                batch.submit();
                            }
                            //goodsMap.put("contractNumber",goodsModel.getContractNumber());
                            //合同编号
                            //List<ZsContract> zsContractList = contractService.queryContract(new HashMap<String, Object>());
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    四、app(mui+h5)首页

      获取token

            var clientId = null;
            if (mui.os.ios) {
                clientId = plus.push.getClientInfo().token;
            }
            if (mui.os.android) {
                clientId = plus.push.getClientInfo().clientid;
            }                

    html页面

    document.addEventListener("plusready", function() {
                    var message = document.getElementById("message");
                    // 监听点击消息事件
                    plus.push.addEventListener("click", function(msg) {
                        // 判断是从本地创建还是离线推送的消息
                        switch(msg.payload) {
                            case "LocalMSG":
                                outSet("点击本地创建消息启动:");
                                break;
                            default:
                                outSet("点击离线推送消息启动:");
                                break;
                        }
                        // 提示点击的内容
                        plus.ui.alert(msg.content);
                        // 处理其它数据
                        logoutPushMsg(msg);
                    }, false);
                    // 监听在线消息事件
                    plus.push.addEventListener("receive", function(msg) {
                        mui.openWindow({
                            url: "../setting/message.html",
                            id: "message",
                            extras: {}
                        });
                        if(msg.aps) { // Apple APNS message
                            outSet("接收到在线APNS消息:");
                        } else {
                            outSet("接收到在线透传消息:");
                        }
                        logoutPushMsg(msg);
                    }, false);
                }, false);
  • 相关阅读:
    1052 Linked List Sorting (25 分)
    1051 Pop Sequence (25 分)
    1050 String Subtraction (20 分)
    1049 Counting Ones (30 分)
    1048 Find Coins (25 分)
    1047 Student List for Course (25 分)
    1046 Shortest Distance (20 分)
    1045 Favorite Color Stripe (30 分)
    1044 Shopping in Mars (25 分)
    1055 The World's Richest (25 分)
  • 原文地址:https://www.cnblogs.com/zhou-pan/p/11158107.html
Copyright © 2011-2022 走看看