jpush 延迟推送的栗子

这个 推送是上个月做的, 上线之后没有问题,所以,我就把 这个整套代码 整理一哈,方便以后使用。

    首先需求是这样的:  在比赛结束后的 10 钟 开始给 参加比赛的球员  发送消息,告诉他们比赛的信息和视频都已经 整理完成了,请用户观看查询。

    其实没有什么特别的内容,只是调用一下jpush的接口而已, 还要对之前的参数和接口调通之后的参数 判断分析。

      

// 比赛结束的推送消息
    @Override
    public void sendMessageForGameOver(String gameId) {

        ExecutorService fixedThreadPool = Executors.newFixedThreadPool(100);
        fixedThreadPool.execute(new MessageForGameOver(gameId));
    }
 class MessageForGameOver implements Runnable {
        private String  gameId;
        public MessageForGameOver(String  gameId) {
            this.gameId = gameId;
        }
        public void startEvent(){
            try{
                //获取主队的所有球员的Id
                Game gameOverDto=gameService.getGameRaw(gameId);
                String homeTeamId = gameOverDto.getHomeTeamId();
                List<String> homeTeamUserIds = getUserIdsByTeamId(homeTeamId);
                //获取客队的所有球员的Id
                String guestTeamId = gameOverDto.getGuestTeamId();
                List<String> guestTeamUserIds = getUserIdsByTeamId(guestTeamId);

                PushMessageDto homeTeamDto = genPushMessageDtoService.genPushMessageDtoForGameOver(gameOverDto, homeTeamUserIds, gameOverDto.getGuestTeamId());
                PushMessageDto guestTeamDto = genPushMessageDtoService.genPushMessageDtoForGameOver(gameOverDto, guestTeamUserIds, gameOverDto.getHomeTeamId());
                PushMessage pushMessage = new PushMessage();
                pushMessage.setBizid(gameId);
                pushMessage.setBiztype(2);
                pushMessage.setProcessStatus(2);
                pushMessage.setProcessCount(0);
                pushMessage.setCreatedTime(new Date());
                pushMessage.setUpdatedTime(new Date());
                PushMessage message = pushMessageService.insertSelective(pushMessage);

                saveMessageDetailService.saveMessageDetailForGameOver(gameOverDto); // 消息内容保存到本地的
                sendMessageToJpush(homeTeamDto, guestTeamDto, message); // 发送消息
            }catch (Exception e){
                log.error("消息发送出错"+e.getMessage());
            }
        }

        @Override
        public void run() {  // 线程 启动  延迟 10 分钟
            try {
                Thread.sleep(10*60*1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            startEvent();
        }
    }

  

 private void sendMessageToJpush(PushMessageDto homeTeamDto, PushMessageDto guestTeamDto, PushMessage message) {
        Boolean flag = false;

        if (homeTeamDto != null) {
            CallBackMessage callBackMessage = sendMessage(homeTeamDto);   // 这里主要是这个方法来发送消息
            if (callBackMessage.getCode() == 200) {
                flag = true;
                message.setProcessCount(1);
                message.setProcessStatus(3);
                pushMessageService.updateByPrimaryKeySelective(message);
            }else {
                message.setProcessCount(1);
                message.setProcessStatus(4);
                message.setFailureReason(callBackMessage.getErrorMessage());
                pushMessageService.updateByPrimaryKeySelective(message);
            }
        }

        if (guestTeamDto != null) {
            CallBackMessage callBackMessage = sendMessage(guestTeamDto);
            if (callBackMessage.getCode() == 200) {
                message.setProcessCount(1);
                message.setProcessStatus(3);
                pushMessageService.updateByPrimaryKeySelective(message);
            }else{
                message.setProcessCount(1);
                message.setProcessStatus(4);
                message.setFailureReason(callBackMessage.getErrorMessage());
                pushMessageService.updateByPrimaryKeySelective(message);
            }
        }
    }

  

 @Override
    public CallBackMessage sendMessage(PushMessageDto pushMessageDto) { // 发送消息的地方
        JPushClient jPushClient;
        if ("basketball".equals(pushMessageDto.getSportType())) {
            jPushClient = new JPushClient(SECRET, APP_KEY, 3);  // jpush 提供的类
        } else if ("football".equals(pushMessageDto.getSportType())) {
            jPushClient = new JPushClient(SECRET_NEW, APP_KEY_NEW, 3);
        } else {
            String errMsg = "Connection error, unknown sport type, cannot choose app key. Sport type: " +
                    pushMessageDto.getSportType();
            log.error(errMsg);
            return new CallBackMessage(404, "error", errMsg);
        }
        PushPayload payload = buildPushObject_ios_audienceMore_messageWithExtras(pushMessageDto);
        try {
            if (payload != null) {
                Iterator it = pushMessageDto.getUserIds().iterator();
                String value = null;
                while (it.hasNext()){
                    value = (String)it.next();
                    System.out.println(value);
                    log.info("JPush发送get用户,用户ID 为"+value);
                }
                PushResult result = jPushClient.sendPush(payload);  //  发送到jpush
                return new CallBackMessage(200, "ok", "success");
            }
            return new CallBackMessage(500, "error", "初始化参数失败,这些用户都没有设置过alias!");
        } catch (APIConnectionException e) {
            log.error("Connection error, should retry later,errorMessage:" + e.getMessage());
            return new CallBackMessage(404, "error", "Connection error, should retry later,errorMessage" + e.getMessage());
        } catch (APIRequestException e) {
            log.error("HTTP Status: " + e.getStatus());
            log.error("Error Code: " + e.getErrorCode());
            log.error("Error Message: " + e.getErrorMessage());
            return new CallBackMessage(e.getErrorCode(), e.getStatus() + "", e.getErrorMessage());
        }
    }

  

时间: 2024-10-05 16:27:10

jpush 延迟推送的栗子的相关文章

atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99

atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99 1.1. 云推送有推送次数或频率的限制吗? 1 1.2. 推送的消息长度 1 1.3. 离线消息的支持 2 1.4. 是否支持转义字符 2 2. 客户端身份识别机制 2 3. 绑定客户端的区别流程::jpush胜出 2 4. 文档风格比较::百度,jpush胜出 3 5. 编程sdk框架比较..个推,百度胜出 3 6. 编程风格的比较 3 6.1. 个推 3 6.2. 百度 4 6.3. J

Android JPush极光推送应用

JPush纠结了5-6个小时,一直报下面的错误,纠结! [AndroidUtil] AndroidManifest.xml missing required intent filter for PushReceiver: cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY 觉得明明是已经添加了cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY 主要问题是主包名没有弄好,才导致的错误!接下来感谢

JPush 极光推送 (集成流程)

JPush说明文档 JPush iOS 推送原理及问题 (参考:http://blog.jpush.cn/apns/) JPush iOS 初步了解推送方式 (详解: http://docs.jpush.io/client/ios_sdk/) 从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 红色部分是 APNs 推送,JPush 代理开发者的应用(需要基于开发者提供的应用证书),向苹果 APNs 服务器推送.由 APNs Se

IONIC集成jPush极光推送

一.简介: 极光推送(JPush)是独立的第三方云推送平台,致力于为全球移动应用开发者提供专业.高效的移动消息推送服务. 极光推送,英文简称 JPush,是一个面向普通开发者开放的,免费的第三方消息推送服务. 二.官网:https://www.jiguang.cn/ 首先注册一个账号,登陆平台,在控制台添加我们的应用信息 点击提交 会成一个AppKey和Master Secret这两个密钥主要用来配置服务端发送通知使用. 三.开整 官方的栗子:https://github.com/jpush/j

Java.lang.UnsatisfiedLinkError android studio集成Jpush极光推送

今天学习了极光推送,想把它集成到自己的应用里面,我的开发环境是android studio 1.2,期间遇到了错误: Couldn't load jpush174 from loader dalvik.system.PathClassLoader findLibrary returned null,原因是由于android studio不能正确的解决libjpush174.so文件造成的,解决步骤如下: 1.首先按照官网教程配置环境,链接如下:http://docs.jpush.io/guide

JPush极光推送Java服务器端API

// 对android和ios设备发送 JPushClient jpush = new JPushClient(masterSecret, appKey);   // 对android和ios设备发送,同时指定离线消息保存时间 JPushClient jpush = new JPushClient(masterSecret, appKey, timeToLive); // 指定某种设备发送 JPushClient jpush = new JPushClient(masterSecret, app

JPush 极光推送 实战

极光推送的"自定义消息"很给力啊,他不是发送一条消息到状态栏,而是直接把消息内容传到APP中需要的地方,估计很多APP的验证码就是通过这种形式搞出来的. 简介 官网:https://www.jpush.cn/ 极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度.提高应用的留存率. 主要功能 保持与服务器的长连接,以便消息能够即时推送到达客户端 接收通知与自定义消息,并向开发者App传递相关信息

JPush (极光推送) For Xamarin.Android

官方教程上讲的是 GCM (Google Cloud Messaging) , 不过 GFW 是 GCM 过不去的坎. 极光推送 JPush 是国内的一个不错的替代方案. JPush 提供的 API 易于理解, 使用也很简单, 但是要使用于 Xamarin 还是要费些周章: 要转制成 Binding Library. JPush 提供了一篇转制的示例: http://smilehyh.blog.163.com/blog/static/123343886201362110857402/ 按照过程走

JPush极光推送Java服务器端实例

import cn.jpush.api.JPushClient; import cn.jpush.api.common.resp.APIConnectionException; import cn.jpush.api.common.resp.APIRequestException; import cn.jpush.api.push.PushResult; import cn.jpush.api.push.model.Message; import cn.jpush.api.push.model.