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

    首先需求是这样的:  在比赛结束后的 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 延迟推送的栗子的更多相关文章

  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. Angular - - ngIf、ngSwitch、ngHide/ngShow

    在组合这些ng指令写到一篇文章里的时候,基本是有规则的,野兽把功能相似相近的一类大多会组合到一起,方便理解和记忆. 这篇的三个指令也都是对DOM元素的操作,页面上显示/隐藏的判断,添加/移除的判断. ...

  2. 负载均衡 Lvs nat 模式笔记

    nat技术(网络地址转换) 缺点就是进入和返回都通过调度器的服务器,未来可能会成为瓶颈 实验:nat 模式 先在调度器安装ipvsadm 后再添加网卡,后面就连不上网了(yum -y install ...

  3. apache 添加 ssl_module

    下载httpd2.2.6,以前用http2.2.4会出问题(出现个什么lib的错误) ./configure --prefix=/usr/local/apache --enable-ssl --ena ...

  4. 【bzoj4198】 Noi2015—荷马史诗

    http://www.lydsy.com/JudgeOnline/problem.php?id=4198 (题目链接) 题意 一篇文章n个单词,每个出现了${w_i}$次,用k进制数代替单词,使得任意 ...

  5. Spring3.2AOP实现需要添加的三个包

    Spring3.2AOP实现需要添加的三个包 http://down.51cto.com/data/1001395 http://down.51cto.com/data/519542

  6. jQuery如何实现点击页面获得当前点击元素

    获得jquery对象: function foo(e){ var obj = $(e.target); }

  7. 原生javascript实现图片放大镜效果

    当我们在电商网站上购买商品时,经常会看到这样一种效果,当我们把鼠标放到我们浏览的商品图片上时,会出现类似放大镜一样的一定区域的放大效果,方便消费者观察商品.今天我对这一技术,进行简单实现,实现图片放大 ...

  8. Bootstrap入门(四)表格

    Bootstrap入门(四)表格 <table>标签 首先,引入bootstrap的css文件,然后表格内容放在一个class为table的<table>标签中(class=& ...

  9. Nancy简单实战之NancyMusicStore(六):写在最后

    前言 由于公司搬家后,住的地方离上班的地方远了N倍,以前是走路十多分钟就可以到公司的,上班时间也从9:00提早到8:30 现在每天上班都是先坐公交,然后再坐地铁,在这段路上比较浪费时间而且每天都是要6 ...

  10. printf 格式化输出

    i,d   十进制整数 x,X    十六进制无符号整数 o       八进制无符号整数 u       无符号十进制整数 c       单一字符 s       字符串 e E    指数形式浮 ...