前言
- 在 极光推送官网 注册并创建好应用(本文代码中测试的是安卓系统)
- 引入极光推送jar包:JPush API Java Library
- 阅读极光推送api文档:服务端 REST API 概述
- 极光推送的消息有三种:notification(通知)、message(自定义消息)、和 schedule(定时消息),这里主要介绍通知和定时消息
- notification(通知):消息会展示在通知栏
- message(自定义消息):消息不会展示在通知栏,消息内容会透传给 App,需要 App 自行处理。
- schedule(定时消息):消息会展示在通知栏,推送时间必须大于当前时间,api有单独的调用限制 官方文档
- 本文为原创,转载请注明:https://blog.xinpapa.com/2017/11/21/jpush/
推送通知消息
- 开发前需要先详细阅读官方文档,需要特别注意的是极光api调用次数的限制。免费版本各 API 频率限制如下表:
API 类型 | 频率(次/分钟) |
---|---|
Push API v3 | 600 |
Report-API | 2400 |
Device-API | 600 |
- 推送通知消息代码如下:
public class JPushUtils { //填写自己的appKey和masterSecret private static final String appKey = ""; private static final String masterSecret = ""; //推送消息的方法 public static PushResult push(PushPayload payload) { JPushClient jpushClient = new JPushClient(masterSecret, appKey, null, ClientConfig.getInstance()); try { //推送消息 PushResult pushResult = jpushClient.sendPush(payload); return pushResult; } catch (APIConnectionException e) { // Connection error, should retry later } catch (APIRequestException e) { // Should review the error, and fix the request } return null; } //测试方法 public static void main(String[] args) { //消息设置 Options.Builder builder = Options.newBuilder(); builder.setTimeToLive(86400L * 10);//离线消息保留时长:推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。 builder.setApnsProduction(false);//True 表示推送生产环境,False 表示要推送开发环境 //消息的自定义参数,用于给app端传参数,用户看不到 Map<String, String> extras = new HashMap<>(); extras.put("参数1", "1"); //创建消息 PushPayload payload = PushPayload.newBuilder() .setPlatform(Platform.all())//设置接受的平台 .setAudience(Audience.all())//接收推送的用户设置 all表示所有设备 .setNotification(Notification.android("通知名称", "标题", extras))//推送的内容(安卓和ios这里不一样) .setOptions(builder.build()) .build(); //发送消息 PushResult pushResult = push(payload); //消息发送成功后,返回pushResult对象的参数如下 long msg_id = pushResult.msg_id;//消息id,可以用此id查询消息发送情况 int sendno = pushResult.sendno;//API 调用标识 int statusCode = pushResult.statusCode;//消息状态码 boolean resultOK = pushResult.isResultOK();//消息是否成功 int rateLimitQuota = pushResult.getRateLimitQuota();//当前 AppKey 一个时间窗口内可调用次数 int rateLimitRemaining = pushResult.getRateLimitRemaining();//当前时间窗口剩余的可用次数 int rateLimitReset = pushResult.getRateLimitReset();//距离时间窗口重置剩余的秒数 int responseCode = pushResult.getResponseCode();//请求状态码 } }
推送定时消息
- 需要特别注意的是,在定时消息文档最下面有调用限制,限制如下:
定时最多有效数(当前未过期数)与周期最多有效数(当前未过期数)总数 100个。超过后失败。
最大频率当前为100/分。
periodical任务的最大跨度为12个月。 - 推送定时消息代码如下:
public class JPushUtils { //填写自己的appKey和masterSecret private static final String appKey = ""; private static final String masterSecret //推送定时消息的方法,和推送通知消息类似,只是多了两个参数 public static ScheduleResult push(PushPayload payload, String name, String time) { JPushClient jpushClient = new JPushClient(masterSecret, appKey, null, ClientConfig.getInstance()); try { //推送定时消息 ScheduleResult singleSchedule = jpushClient.createSingleSchedule(name, time, payload); return singleSchedule; } catch (APIConnectionException e) { // Connection error, should retry later } catch (APIRequestException e) { // Should review the error, and fix the request } return null; } //测试方法 public static void main(String[] args) { //消息设置 Options.Builder builder = Options.newBuilder(); builder.setTimeToLive(86400L * 10);//离线消息保留时长:推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。 builder.setApnsProduction(false);//True 表示推送生产环境,False 表示要推送开发环境 //消息的自定义参数,用于给app端传参数,用户看不到 Map<String, String> extras = new HashMap<>(); extras.put("参数1", "1"); //创建消息 PushPayload payload = PushPayload.newBuilder() .setPlatform(Platform.all())//设置接受的平台 .setAudience(Audience.all())//接收推送的用户设置 .setMessage( Message.newBuilder() .setTitle("标题") .setMsgContent("消息内容") .setContentType("类型")//消息的类型(自己定义) .addExtras(extras)//自定义参数 .build() ) .setOptions(builder.build()) .build(); //推送定时消息(推送时间必须大于当前时间,否则推送任务创建失败) ScheduleResult scheduleResult = push(payload, "定时推送", "2017-11-21 17:49:47"); } }