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

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

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

      

  1. // 比赛结束的推送消息
  2. @Override
  3. public void sendMessageForGameOver(String gameId) {
  4.  
  5. ExecutorService fixedThreadPool = Executors.newFixedThreadPool(100);
  6. fixedThreadPool.execute(new MessageForGameOver(gameId));
  7. }
  1. class MessageForGameOver implements Runnable {
  2. private String gameId;
  3. public MessageForGameOver(String gameId) {
  4. this.gameId = gameId;
  5. }
  6. public void startEvent(){
  7. try{
  8. //获取主队的所有球员的Id
  9. Game gameOverDto=gameService.getGameRaw(gameId);
  10. String homeTeamId = gameOverDto.getHomeTeamId();
  11. List<String> homeTeamUserIds = getUserIdsByTeamId(homeTeamId);
  12. //获取客队的所有球员的Id
  13. String guestTeamId = gameOverDto.getGuestTeamId();
  14. List<String> guestTeamUserIds = getUserIdsByTeamId(guestTeamId);
  15.  
  16. PushMessageDto homeTeamDto = genPushMessageDtoService.genPushMessageDtoForGameOver(gameOverDto, homeTeamUserIds, gameOverDto.getGuestTeamId());
  17. PushMessageDto guestTeamDto = genPushMessageDtoService.genPushMessageDtoForGameOver(gameOverDto, guestTeamUserIds, gameOverDto.getHomeTeamId());
  18. PushMessage pushMessage = new PushMessage();
  19. pushMessage.setBizid(gameId);
  20. pushMessage.setBiztype(2);
  21. pushMessage.setProcessStatus(2);
  22. pushMessage.setProcessCount(0);
  23. pushMessage.setCreatedTime(new Date());
  24. pushMessage.setUpdatedTime(new Date());
  25. PushMessage message = pushMessageService.insertSelective(pushMessage);
  26.  
  27. saveMessageDetailService.saveMessageDetailForGameOver(gameOverDto); // 消息内容保存到本地的
  28. sendMessageToJpush(homeTeamDto, guestTeamDto, message); // 发送消息
  29. }catch (Exception e){
  30. log.error("消息发送出错"+e.getMessage());
  31. }
  32. }
  33.  
  34. @Override
  35. public void run() { // 线程 启动 延迟 10 分钟
  36. try {
  37. Thread.sleep(10*60*1000);
  38. } catch (InterruptedException e) {
  39. e.printStackTrace();
  40. }
  41. startEvent();
  42. }
  43. }

  

  1. private void sendMessageToJpush(PushMessageDto homeTeamDto, PushMessageDto guestTeamDto, PushMessage message) {
  2. Boolean flag = false;
  3.  
  4. if (homeTeamDto != null) {
  5. CallBackMessage callBackMessage = sendMessage(homeTeamDto); // 这里主要是这个方法来发送消息
  6. if (callBackMessage.getCode() == 200) {
  7. flag = true;
  8. message.setProcessCount(1);
  9. message.setProcessStatus(3);
  10. pushMessageService.updateByPrimaryKeySelective(message);
  11. }else {
  12. message.setProcessCount(1);
  13. message.setProcessStatus(4);
  14. message.setFailureReason(callBackMessage.getErrorMessage());
  15. pushMessageService.updateByPrimaryKeySelective(message);
  16. }
  17. }
  18.  
  19. if (guestTeamDto != null) {
  20. CallBackMessage callBackMessage = sendMessage(guestTeamDto);
  21. if (callBackMessage.getCode() == 200) {
  22. message.setProcessCount(1);
  23. message.setProcessStatus(3);
  24. pushMessageService.updateByPrimaryKeySelective(message);
  25. }else{
  26. message.setProcessCount(1);
  27. message.setProcessStatus(4);
  28. message.setFailureReason(callBackMessage.getErrorMessage());
  29. pushMessageService.updateByPrimaryKeySelective(message);
  30. }
  31. }
  32. }

  

  1. @Override
  2. public CallBackMessage sendMessage(PushMessageDto pushMessageDto) { // 发送消息的地方
  3. JPushClient jPushClient;
  4. if ("basketball".equals(pushMessageDto.getSportType())) {
  5. jPushClient = new JPushClient(SECRET, APP_KEY, 3); // jpush 提供的类
  6. } else if ("football".equals(pushMessageDto.getSportType())) {
  7. jPushClient = new JPushClient(SECRET_NEW, APP_KEY_NEW, 3);
  8. } else {
  9. String errMsg = "Connection error, unknown sport type, cannot choose app key. Sport type: " +
  10. pushMessageDto.getSportType();
  11. log.error(errMsg);
  12. return new CallBackMessage(404, "error", errMsg);
  13. }
  14. PushPayload payload = buildPushObject_ios_audienceMore_messageWithExtras(pushMessageDto);
  15. try {
  16. if (payload != null) {
  17. Iterator it = pushMessageDto.getUserIds().iterator();
  18. String value = null;
  19. while (it.hasNext()){
  20. value = (String)it.next();
  21. System.out.println(value);
  22. log.info("JPush发送get用户,用户ID 为"+value);
  23. }
  24. PushResult result = jPushClient.sendPush(payload); // 发送到jpush
  25. return new CallBackMessage(200, "ok", "success");
  26. }
  27. return new CallBackMessage(500, "error", "初始化参数失败,这些用户都没有设置过alias!");
  28. } catch (APIConnectionException e) {
  29. log.error("Connection error, should retry later,errorMessage:" + e.getMessage());
  30. return new CallBackMessage(404, "error", "Connection error, should retry later,errorMessage" + e.getMessage());
  31. } catch (APIRequestException e) {
  32. log.error("HTTP Status: " + e.getStatus());
  33. log.error("Error Code: " + e.getErrorCode());
  34. log.error("Error Message: " + e.getErrorMessage());
  35. return new CallBackMessage(e.getErrorCode(), e.getStatus() + "", e.getErrorMessage());
  36. }
  37. }

  

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

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

    atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99 1.1. 云推送有推送次数或频率的限制吗? 1 1.2. 推送的消息长度 1 1.3. 离线消 ...

  2. Jpush极光推送的一些心得

    在集成极光推送的时候,test完全正常.部署到服务器后只发送一条推送之后推送不继续发送.经排查: 2018-06-28 10:24:26.394 [ThreadPoolTaskExecutor-4] ...

  3. 使用JPush(极光推送)实现远程通知

    使用JPush(极光推送)实现远程通知 远程推送是APP 必备的功能, 现在第三方的 SDK 已经做的非常完备了, 在 iOS10.0出来之后, 极光推送也及时更新了他的 SDK, 今天小试了一下效果 ...

  4. Laravel 集成 JPush 极光推送指北

    我是一个 Laravel 小白,我是一个 Laravel 小白,我是一个 Laravel 小白(默念三遍再往下读,如果非小白就不用看了). Laravel 使用 Composer 来管理代码依赖.所以 ...

  5. JPush Android 推送如何区分开发、生产环境

    我们 Android 开发者在使用极光推送时可能会发现,在通过官方控制台进行推送时.只有 iOS 区分了开发和生产环境,而 Android 则没有.但实际开发中又确实经常需要针对开发和生产环境分别来推 ...

  6. RabbitMQ 延迟队列,消息延迟推送

    目录 应用场景 消息延迟推送的实现 测试结果 应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给 ...

  7. Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 下面是一些知识点介绍,后期将会带领大家进行代码实战: 一.Android实现推送方式解决方案: 1.推 ...

  8. 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)

    这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...

  9. Android JPush(极光推送)的使用教程

    首先进入官网https://www.jpush.cn/,先注册一个账号. 注册号以后,创建应用 1.点击右上角进入个人中心 2.点击创建应用 3.在创建应用界面输入自己项目的应用名和应用的包名,输入后 ...

随机推荐

  1. iOS 之 Quartz2D

    1. Quartz2D 之 简单介绍 2. Quartz2D 之 简单使用 3. Quartz2D 之 绘制文本

  2. js原生继承之——构造函数式继承实例

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  3. JIRA描述默认值设置

    JIRA描述默认值设置 Setting a Default Value in the Description Field 转自https://confluence.atlassian.com/jira ...

  4. Sql server2014 内存优化表 本地编译存储过程

    参考文献:http://www.infoq.com/cn/news/2013/09/Compiled-Queries http://www.bianceng.cn/database/SQLServer ...

  5. log4j.appender.stdout.layout.ConversionPattern

    http://501565246-qq-com.iteye.com/blog/1991881 http://wenku.baidu.com/link?url=e4Z9v9CY_gwRxHrggzHXx ...

  6. 解决Ubuntu 16.04 软件中心闪退

    就是上面这个Ubuntu软件中心,类似如应用市场,今天不知怎么回事竟然抽风了,打开之后几秒就闪退了,导致我安装sublime一致失败,百度之后才知道这是16.04版本的一个毛病,按照我的性格,手机软件 ...

  7. Wireshark网络抓包(二)——过滤器

    一.捕获过滤器 选中捕获选项后,就会弹出下面这个框,在红色输入框中就可以编写过滤规则. 1)捕获单个IP地址 2)捕获IP地址范围 3)捕获广播或多播地址 4)捕获MAC地址 5)捕获所有端口号 6) ...

  8. Android几行代码实现实时监听微信聊天

    实现效果: 实时监听当前聊天页面的最新一条消息,如图:            实现原理: 同样是利用AccessibilityService辅助服务,关于这个服务类还不了解的同学可以先看下我上一篇关于 ...

  9. 图论——Dijkstra算法

    图论其实是比较难的一种题型,但是一些模板题,是没有什么太大难度的! 这里给大家带来的是迪杰斯特拉(Dijkstra)算法. 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄 ...

  10. js判断为空Null与字符串为空简写方法

    下面就是有关判断为空的简写方法.   代码如下: if (variable1 !== null || variable1 !== undefined || variable1 !== '') {  v ...