极光推送Java服务端工具类封装-简单易用直接复用_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 极光推送Java服务端工具类封装-简单易用直接复用

极光推送Java服务端工具类封装-简单易用直接复用

 2018/2/9 3:56:09  ranji13  程序员俱乐部  我要评论(0)
  • 摘要:极光推送Java服务端工具类封装-简单易用直接复用一、业务场景最近接到一个工作上的新需求,接入极光推送:1、在固定业务场景下触发一条APP通知信息给APP用户,比如订单发货后立即推送一条发货的APP通知提醒用户已发货;这类通知是被动的业务推送需要在具体的业务中埋入极光推送触发;2、主动推送信息给APP用户,即在系统平台后台开发一个极光推送的平台页面,能编辑推送目标、推送平台、推送内容、定时和即时等等内容,点击推送后主动触发;比如发公告通知、发活动通知、新版本更新提醒等。二、极光推送客户端
  • 标签:服务端 工具 Java 服务

极光推送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<String> aliasList = new ArrayList<String>();
        //别名和标签是根据自己业务自行定义,如:每个用户手机号可作为别名定位每个用户、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

发表评论
用户名: 匿名