• 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);
  • 相关阅读:
    @codeforces
    @atcoder
    @loj
    @atcoder
    @atcoder
    @loj
    @atcoder
    @atcoder
    @atcoder
    @uoj
  • 原文地址:https://www.cnblogs.com/zhou-pan/p/11158107.html
Copyright © 2020-2023  润新知