极光推送Java服务端工具类封装-简单易用直接复用
?
一、业务场景
最近接到一个工作上的新需求,接入极光推送:
1、在固定业务场景下触发一条APP通知信息给APP用户,比如订单发货后立即推送一条发货的APP通知提醒用户已发货;这类通知是被动的业务推送需要在具体的业务中埋入极光推送触发;
2、主动推送信息给APP用户,即在系统平台后台开发一个极光推送的平台页面,能编辑推送目标、推送平台、推送内容、定时和即时等等内容,点击推送后主动触发;比如发公告通知、发活动通知、新版本更新提醒等。
?
二、极光推送客户端、服务端、服务器
首先这三者之间关系要搞清楚。
服务器:泛指极光的服务器;
客户端:可以理解为iOS客户端和Android客户端,通过客户端SDK与服务器进行交互,包括连接、长连接、接收消息、反馈信息、注册APP用户等,主要作用可以看作与极光服务器长连接,接收服务器分发的消息;
服务端:可以简单理解为利用极光提供的服务端SDK根据自己实际业务自定义开发推送信息的功能;
三者之间交互:利用服务端SDK开发推送数据到极光服务器,极光服务器根据接收到的推送数据发送推送消息给匹配的客户端。
?
三、极光推送Java服务端工具类封装
1、需要了解的几个推送对象
推送平台:需要推送到哪些手机平台:iOS、Android、所有平台;
推送目标:需要推送到哪些APP用户,有三种推送方式:广播方式(所有人都能收到)、按标签(某一相同属性类的人能收到)、按别名(某个人能收到);
推送内容:推送的信息内容;
推送标题:就是标题;
推送的Notification内容体:标题、内容、附加内容;
推送的Message内容体:标题、内容、附加内容;
这里Notification和Message,即通知和消息概念是不一样的:
通知:发送后会在系统通知栏收到展现,同时响铃或振动提醒用户;
消息:以透传的形式传递给客户端,无显示,发送后不会在系统通知栏展现,第三方应用后需要开发者写代码才能看到;
?
总结:开发的服务端功能就是把以上信息封装起来然后发送给极光服务器,极光服务器再发送给匹配的客户端。
?
2、封装的极光推送Java服务端工具类
?① JPushUtil 推送工具类,提供了以下四种推送方法:
?
class="java"> /**
* JPUSH推送 - 立即
* 注:由于免费版极光限制了单次别名推送上限1000,这里适合别名单推名单在1000个以内
* 1000以上使用批量推送方法
*/
public boolean sendPush(JPushPayload jPushPayload);
/**
* JPUSH推送- 定时
* 注:由于免费版极光限制了单次别名推送上限1000,这里适合别名单推名单在1000个以内
* 1000以上使用批量推送方法
*/
public boolean sendPushSchedule(String name, String time, JPushPayload jPushPayload);
/**
* 批量推送
* 注:由于免费版极光限制了单次别名推送名单上限1000个,这里做了分批次推送
*/
public boolean sendPushes(JPushPayload jPushPayload);
/**
* * 批量推送(定时)
* 注:由于免费版极光限制了单次别名名单推送上限1000个,这里做了分批次推送
*/
public void sendPushesSchedule(final String name, final String time, JPushPayload jPushPayload);
?
具体推送的实现已经封装好,把重点放到怎样去构建好一个 JPushPayload 对象,下面看看JPushPayload具体是什么。
?
?② JPushPayload 推送封装信息对象
JPushPayload 类封装了推送所需的必须信息:?
?
private JPushMessage jPushMessage;
private JPushNotification jPushNotification;
private String platform; //推送平台
private String audience; //推送观众
JPushNotification 封装了Notification对象
?
?
private String notificationTitle; //推送标题
private String notificationContent; //推送内容
private JPushExtras jPushExtras; //附加字段
?JPushMessage 封装了Message对象
private String msgContent; //message内容
private String msgTitle; //message标题
private JPushExtras jPushExtras; //message附加内容
?JPushExtras 封装了按业务需求自定义的附加内容字段(这个类的字段根据具体业务需求自行定义)
private int pageType; //推送落地页标识
private String pkid = ""; //主键参数
?
四、推送实现思路
1、所有推送信息都封装在 JPushPayload 类中,所以整个推送思路就是构建好 JPushPayload 对象,可以作为表单对象封装;
2、JPushPayload 类封装了推送平台、推送目标、推送通知信息对象、推送message信息对象,需要分别构建好这些内容;
3、推送方法一共四种:
? ① sendPush(JPushPayload jPushPayload)? 限:1000个别名alias、20个标签tag以下的推送(立即推送)
? ② sendPushSchedule(String name, String time, JPushPayload jPushPayload)限:1000个别名alias、20个标签tag以下的推送(定时推送)
? ③ sendPushes(JPushPayload jPushPayload) 批量不限制别名alias、标签tag 个数(立即推送)
? ④ sendPushesSchedule(final String name, final String time, JPushPayload jPushPayload) 批量不限制别名alias、标签tag个数(定时推送)
??
? 下面是一个调用工具类测试类:
public static void main(String[] args) throws Exception{
JPushPayload jPushPayload = new JPushPayload();
//设置推送平台:所有平台、IOS、Android
jPushPayload.setPlatform(JPushPayload.PlatformDesc.所有平台.getValue());
//设置推送目标:所有人、按别名推送、按标签推送
jPushPayload.setAudience(JPushPayload.AudienceDesc.别名.getValue());
//如果是按别名推送、按标签推送必须构建推送名单List,所有人不用再构建
ArrayList aliasList = new ArrayList();
//别名和标签是根据自己业务自行定义,如:每个用户手机号可作为别名定位每个用户、VIP用户作为tag定位一类用户
aliasList.add("1242342341");
jPushPayload.setAliases(aliasList);
//构建推送Notification具体信息对象(标题、内容、附加内容)
JPushNotification notification = new JPushNotification();
notification.setNotificationTitle("notify_title");
notification.setNotificationContent("notify_content");
//附加内容构建:JPushExtras类字段可根据自己具体业务调整
JPushExtras notificationExtras = new JPushExtras();
//我的业务:传递给客户端(IOS、Android)作为接收通知后页面跳转逻辑依据
notificationExtras.setPageType(JPushExtras.PageTypeDesc.会员中心首页.getValue());
jPushPayload.setjPushNotification(notification);
//构建推送Message具体信息对象(标题、内容、附加内容)
JPushMessage message = new JPushMessage();
message.setMsgTitle("msg_title");
message.setMsgContent("msg_content");
jPushPayload.setjPushMessage(message);
//推送
JPushUtil.sendPush(jPushPayload);
}
?工具类完整代码我已放到GitHub,可自行Git,欢迎大家不断完善,这只是个基本功能的工具。
GitHub:https://github.com/JimmieRan/JPush_Java_SDK.git