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());
- }
- }
jpush 延迟推送的栗子的更多相关文章
- atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99
atitit.web 推送实现方案集合(2)---百度云,jpush 极光推送 ,个推的选型比较.o99 1.1. 云推送有推送次数或频率的限制吗? 1 1.2. 推送的消息长度 1 1.3. 离线消 ...
- Jpush极光推送的一些心得
在集成极光推送的时候,test完全正常.部署到服务器后只发送一条推送之后推送不继续发送.经排查: 2018-06-28 10:24:26.394 [ThreadPoolTaskExecutor-4] ...
- 使用JPush(极光推送)实现远程通知
使用JPush(极光推送)实现远程通知 远程推送是APP 必备的功能, 现在第三方的 SDK 已经做的非常完备了, 在 iOS10.0出来之后, 极光推送也及时更新了他的 SDK, 今天小试了一下效果 ...
- Laravel 集成 JPush 极光推送指北
我是一个 Laravel 小白,我是一个 Laravel 小白,我是一个 Laravel 小白(默念三遍再往下读,如果非小白就不用看了). Laravel 使用 Composer 来管理代码依赖.所以 ...
- JPush Android 推送如何区分开发、生产环境
我们 Android 开发者在使用极光推送时可能会发现,在通过官方控制台进行推送时.只有 iOS 区分了开发和生产环境,而 Android 则没有.但实际开发中又确实经常需要针对开发和生产环境分别来推 ...
- RabbitMQ 延迟队列,消息延迟推送
目录 应用场景 消息延迟推送的实现 测试结果 应用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货.在我们签收商品后,物流系统会在七天后延时发送一个消息给 ...
- Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 下面是一些知识点介绍,后期将会带领大家进行代码实战: 一.Android实现推送方式解决方案: 1.推 ...
- 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)
这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...
- Android JPush(极光推送)的使用教程
首先进入官网https://www.jpush.cn/,先注册一个账号. 注册号以后,创建应用 1.点击右上角进入个人中心 2.点击创建应用 3.在创建应用界面输入自己项目的应用名和应用的包名,输入后 ...
随机推荐
- iOS 之 Quartz2D
1. Quartz2D 之 简单介绍 2. Quartz2D 之 简单使用 3. Quartz2D 之 绘制文本
- js原生继承之——构造函数式继承实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- JIRA描述默认值设置
JIRA描述默认值设置 Setting a Default Value in the Description Field 转自https://confluence.atlassian.com/jira ...
- Sql server2014 内存优化表 本地编译存储过程
参考文献:http://www.infoq.com/cn/news/2013/09/Compiled-Queries http://www.bianceng.cn/database/SQLServer ...
- log4j.appender.stdout.layout.ConversionPattern
http://501565246-qq-com.iteye.com/blog/1991881 http://wenku.baidu.com/link?url=e4Z9v9CY_gwRxHrggzHXx ...
- 解决Ubuntu 16.04 软件中心闪退
就是上面这个Ubuntu软件中心,类似如应用市场,今天不知怎么回事竟然抽风了,打开之后几秒就闪退了,导致我安装sublime一致失败,百度之后才知道这是16.04版本的一个毛病,按照我的性格,手机软件 ...
- Wireshark网络抓包(二)——过滤器
一.捕获过滤器 选中捕获选项后,就会弹出下面这个框,在红色输入框中就可以编写过滤规则. 1)捕获单个IP地址 2)捕获IP地址范围 3)捕获广播或多播地址 4)捕获MAC地址 5)捕获所有端口号 6) ...
- Android几行代码实现实时监听微信聊天
实现效果: 实时监听当前聊天页面的最新一条消息,如图: 实现原理: 同样是利用AccessibilityService辅助服务,关于这个服务类还不了解的同学可以先看下我上一篇关于 ...
- 图论——Dijkstra算法
图论其实是比较难的一种题型,但是一些模板题,是没有什么太大难度的! 这里给大家带来的是迪杰斯特拉(Dijkstra)算法. 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄 ...
- js判断为空Null与字符串为空简写方法
下面就是有关判断为空的简写方法. 代码如下: if (variable1 !== null || variable1 !== undefined || variable1 !== '') { v ...