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.在创建应用界面输入自己项目的应用名和应用的包名,输入后 ...
随机推荐
- NodeMCU之旅(四):实现Web配置页面
引言 利用Web页面做配置可以轻松适应用户的多种设备,如Android, IOS等.本文将介绍如何在NodeMCU中实现配置页面. 接线图请参考NodeMCU之旅(三):响应配置按钮. 配置页面后端 ...
- Java语言Socket接口用法详解
Socket接口用法详解 在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Serve ...
- [转]编写高性能的Lua代码
昨天晚上闲来无事,看室友在电脑上挂机玩游戏,用的一个辅助脚本,以为是lua写的脚本在跑,实际调查发现是按键精灵的脚本. 于是在网上找相关Lua开发游戏脚本的案例,看到一个人的博客,内容很不错,学到了很 ...
- Java线程:什么是线程
一 基本概念 多任务:同一时刻运行多个程序的能力.每一个任务称为一个线程.可以同时运行一个以上线程的程序称为多线程程序. Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多 ...
- java二维码生成-谷歌(Google.zxing)开源二维码生成学习及实例
java二维码生成-谷歌(Google.zxing)开源二维码生成的实例及介绍 我们使用比特矩阵(位矩阵)的QR码编码在缓冲图片上画出二维码 实例有以下一个传入参数 OutputStream ou ...
- Bootstrap入门(六)按钮和图片
Bootstrap入门(六)按钮和图片 先引入本地的CSS文件 <link href="css/bootstrap.min.css" rel="styleshe ...
- Rabbitmq无法监听后续消息
现象: 消息队列在处理完一条消息后,无法继续监听后续消息. 首先,系统启动时要启动接收方法如下: protected void Application_Start() { RouteTable.Rou ...
- C# OpenFileDialog 使用
OpenFileDialog ofd = new OpenFileDialog(); //设置标题 ofd.Title = "选择文件"; //是否保存上次打开文件的位置 ofd. ...
- 【java设计模式】之 工厂(Factory)模式
1.工厂模式的定义 工厂模式使用的频率非常高,我们在开发中总能见到它们的身影.其定义为:Define an interface for creating an object, but let subc ...
- Apache Arrow 内存数据
1.概述 Apache Arrow 是 Apache 基金会全新孵化的一个顶级项目.它设计的目的在于作为一个跨平台的数据层,来加快大数据分析项目的运行速度. 2.内容 现在大数据处理模型很多,用户在应 ...