java SDK服务端推送 --极光推送(JPush)

网址:https://blog.csdn.net/duyusean/article/details/86581475

消息推送在APP应用中越来越普遍,来记录一下项目中用到的一种推送方式,对于Andriod它并没有自己的原生推送机制,一种简单的推送方式是采用第三方推送服务的方式,即通过嵌入SDK使用第三方提供的推送服务,主流的有百度云推送,极光推送,友盟,个推、亚马逊等等。本篇博文只介绍采用极光推送的方式。
        如果你是一个新手,建议你先看完本篇博客,然后在去看官网,这样也许上手会快一些。
关键步骤:1.在极光官网先注册一个账号,创建一个应用,获取AppKey、Master Secret (官网:https://www.jiguang.cn/)
2.在java项目中导入依赖的jar包,如果你是maven项目,在pom文件中添加依赖即可。
3.创建一个JPushUtil类,代码放在下面。
 
详细步骤1.登录极光官网,注册一个账号2.选择“开发者服务”—“极光推送”—“立即体验”

3.创建一个应用

4.点击新创建的应用,获取AppKey和Master Secret

5.在java项目中导入依赖包,(可参考官网:https://docs.jiguang.cn/jpush/server/sdk/java_sdk/#_2)maven 方式将下边的依赖条件放到你项目的 maven pom.xml 文件里。
<dependency>    <groupId>cn.jpush.api</groupId>    <artifactId>jpush-client</artifactId>    <version>3.3.9</version></dependency>jar 包方式请到 Release页面下载相应版本的发布包。
依赖包slf4j / log4j (Logger)gson (Google JSON Utils)其中 slf4j 可以与 logback, log4j, commons-logging 等日志框架一起工作,可根据你的需要配置使用。
如果使用 Maven 构建项目,则需要在你的项目 pom.xml 里增加:
    <dependency>        <groupId>cn.jpush.api</groupId>        <artifactId>jiguang-common</artifactId>        <version>1.1.3</version>    </dependency>    <dependency>        <groupId>io.netty</groupId>        <artifactId>netty-all</artifactId>        <version>4.1.6.Final</version>        <scope>compile</scope>    </dependency>    <dependency>        <groupId>com.google.code.gson</groupId>        <artifactId>gson</artifactId>        <version>2.3</version>    </dependency>    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-api</artifactId>        <version>1.7.7</version>    </dependency>     <!-- For log4j -->    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-log4j12</artifactId>        <version>1.7.7</version>    </dependency>    <dependency>        <groupId>log4j</groupId>        <artifactId>log4j</artifactId>        <version>1.2.17</version>    </dependency>如果不使用 Maven 构建项目,则项目 libs/ 目录下有依赖的 jar 可复制到你的项目里去。
6.创建JPushUtil类,该类中给出了使用与Android和ios的方法,以及两者都适用的方法,代码如下: /** * 极光推送工具类 * Created by DUYU on 2019/1/17. */public class JPushUtil {     // 设置好账号的app_key和masterSecret是必须的    private static String APP_KEY = "fcc67*************ba80d76";    private static String MASTER_SECRET = "a4c45*************cc0";      //极光推送>>Android    //Map<String, String> parm是我自己传过来的参数,可以自定义参数    public static void jpushAndroid(Map<String, String> parm) {         //创建JPushClient(极光推送的实例)        JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);        //推送的关键,构造一个payload        PushPayload payload = PushPayload.newBuilder()                .setPlatform(Platform.android())//指定android平台的用户                .setAudience(Audience.all())//你项目中的所有用户//                .setAudience(Audience.alias(parm.get("alias")))//设置别名发送,单发,点对点方式                //.setAudience(Audience.tag("tag1"))//设置按标签发送,相当于群发//                .setAudience(Audience.registrationId(parm.get("id")))//registrationId指定用户                 .setNotification(Notification.android(parm.get("msg"), parm.get("title"), parm))  //发送内容                .setOptions(Options.newBuilder().setApnsProduction(true).setTimeToLive(7200).build())                // apnProduction指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式) 不用设置也没关系                // TimeToLive 两个小时的缓存时间                .setMessage(Message.content(parm.get("msg")))//自定义信息                .build();         try {            PushResult pu = jpushClient.sendPush(payload);            System.out.println(pu.toString());        } catch (APIConnectionException e) {            e.printStackTrace();        } catch (APIRequestException e) {            e.printStackTrace();        }    }     //极光推送>>ios    //Map<String, String> parm是我自己传过来的参数,可以自定义参数    public static  void jpushIOS(Map<String, String> parm) {         //创建JPushClient        JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);        PushPayload payload = PushPayload.newBuilder()                .setPlatform(Platform.ios())//ios平台的用户                .setAudience(Audience.all())//所有用户                //.setAudience(Audience.registrationId(parm.get("id")))//registrationId指定用户                .setNotification(Notification.newBuilder()                        .addPlatformNotification(IosNotification.newBuilder()                                .setAlert(parm.get("msg"))                                .setBadge(+1)                                .setSound("happy")//这里是设置提示音(更多可以去官网看看)                                .addExtras(parm)                                .build())                        .build())                .setOptions(Options.newBuilder().setApnsProduction(false).build())                .setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build())//自定义信息                .build();         try {            PushResult pu = jpushClient.sendPush(payload);            System.out.println(pu.toString());        } catch (APIConnectionException e) {            e.printStackTrace();        } catch (APIRequestException e) {            e.printStackTrace();        }    }       //极光推送>>All所有平台    public static void jpushAll(Map<String, String> parm) {         //创建JPushClient        JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);        //创建option        PushPayload payload = PushPayload.newBuilder()                .setPlatform(Platform.all())  //所有平台的用户                .setAudience(Audience.registrationId(parm.get("id")))//registrationId指定用户                .setNotification(Notification.newBuilder()                        .addPlatformNotification(IosNotification.newBuilder() //发送ios                                .setAlert(parm.get("msg")) //消息体                                .setBadge(+1)                                .setSound("happy") //ios提示音                                .addExtras(parm) //附加参数                                .build())                        .addPlatformNotification(AndroidNotification.newBuilder() //发送android                                .addExtras(parm) //附加参数                                .setAlert(parm.get("msg")) //消息体                                .build())                        .build())                .setOptions(Options.newBuilder().setApnsProduction(true).build())//指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式)                .setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build())//自定义信息                .build();        try {            PushResult pu = jpushClient.sendPush(payload);            System.out.println(pu.toString());        } catch (APIConnectionException e) {            e.printStackTrace();        } catch (APIRequestException e) {            e.printStackTrace();        }    } }7.DEMO测试类public class demo {     public static void main(String[] args) {         //设置推送参数        //这里可以自定义推送参数了        Map<String, String> parm = new HashMap<String, String>();        //设置提示信息,内容是文章标题        parm.put("msg","收到请联系发送人");        parm.put("title","这里是title");        parm.put("alias","abc");        JPushUtil.jpushAndroid(parm);    } }测试结果:

8.极光后台查看在极光后台可以查看推送历史,登录极光后台,在应用的下方点击“推送”

选择Api

点击“操作”查看详情

9。参数信息:(来自于官方文档https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/#platform)
platform:推送平台JPush 当前支持 Android, iOS, Windows Phone 三个平台的推送。其关键字分别为:"android", "ios", "winphone"。
如果目标平台为 iOS 平台,推送 Notification 时需要在 options 中通过 apns_production 字段来设定推送环境。True 表示推送生产环境,False 表示要推送开发环境; 如果不指定则为推送生产环境;一次只能推送给一个环境。
 
推送到所有平台:
{ "platform" : "all" }指定特定推送平台:
{ "platform" : ["android", "ios"] } 
audience:推送目标推送设备对象,表示一条推送可以被推送到哪些设备列表。确认推送设备对象,JPush 提供了多种方式,比如:别名、标签、注册 ID、分群、广播等。
all如果要发广播(全部设备),则直接填写 “all”。
推送目标广播外的设备选择方式,有如下几种:
关键字类型含义说明备注tagJSON Array标签OR数组。多个标签之间是 OR 的关系,即取并集。用标签来进行大规模的设备属性、用户属性分群。 一次推送最多 20 个。有效的 tag 组成:字母(区分大小写)、数字、下划线、汉字、特殊字符@!#$&*+=.|¥。限制:每一个 tag 的长度限制为 40 字节。(判断长度需采用 UTF-8 编码)tag_andJSON Array标签AND数组。多个标签之间是 AND 关系,即取交集。注意与 tag 区分。一次推送最多 20 个。tag_notJSON Array标签NOT数组。多个标签之间,先取多标签的并集,再对该结果取补集。一次推送最多 20 个。aliasJSON Array别名数组。多个别名之间是 OR 关系,即取并集。用别名来标识一个用户。一个设备只能绑定一个别名,但多个设备可以绑定同一个别名。一次推送最多 1000 个。有效的 alias 组成:字母(区分大小写)、数字、下划线、汉字、特殊字符@!#$&*+=.|¥。限制:每一个 alias 的长度限制为 40 字节。(判断长度需采用 UTF-8 编码)registration_idJSON Array注册ID数组。多个注册 ID 之间是 OR 关系,即取并集。设备标识。一次推送最多 1000 个。客户端集成 SDK 后可获取到该值。segmentJSON Array用户分群 ID在页面创建的用户分群的 ID。定义为数组,但目前限制一次只能推送一个。目前限制是一次只能推送一个。abtestJSON ArrayA/B Test ID在页面创建的 A/B 测试的 ID。定义为数组,但目前限制是一次只能推送一个。目前限制一次只能推送一个。 
以上几种类型至少需要有其一。如果值数组长度为 0,表示该类型不存在。
这几种类型可以并存,多项的隐含关系是 AND,即取几种类型结果的交集。
例如:
"audience" : { "tag" : [ "tag1", "tag2" ], "tag_and" : [ "tag3", "tag4"], "tag_not" : [ "tag5", "tag6"] }
先计算 "tag" 字段的结果 tag1或tag2=A;
再计算 "tag_and" 字段的结果 tag3且tag4=B;
再计算 "tag_not" 字段的结果 非(tag5或tag6)=C
"audience" 的最终结果为 A且B且C 。
notification:通知
 
message:自定义消息
 
options:可选参数推送可选项。
当前包含如下几个可选项:
关键字类型选项含义说明sendnoint可选推送序号纯粹用来作为 API 调用标识,API 返回时被原样返回,以方便 API 调用方匹配请求与返回。值为 0 表示该 messageid 无 sendno,所以字段取值范围为非 0 的 int.time_to_liveint可选离线消息保留时长(秒)推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。默认 86400 (1 天),最长 10 天。设置为 0 表示不保留离线消息,只有推送当前在线的用户可以收到。该字段对 iOS 的 Notification 消息无效。override_msg_idlong可选要覆盖的消息 ID如果当前的推送要覆盖之前的一条推送,这里填写前一条推送的 msg_id 就会产生覆盖效果,即:1)该 msg_id 离线收到的消息是覆盖后的内容;2)即使该 msg_id Android 端用户已经收到,如果通知栏还未清除,则新的消息内容会覆盖之前这条通知;覆盖功能起作用的时限是:1 天。如果在覆盖指定时限内该 msg_id 不存在,则返回 1003 错误,提示不是一次有效的消息覆盖操作,当前的消息不会被推送;该字段仅对 Android 有效。apns_productionboolean可选APNs 是否生产环境True 表示推送生产环境,False 表示要推送开发环境;如果不指定则为推送生产环境。但注意,JPush 服务端 SDK 默认设置为推送 “开发环境”。该字段仅对 iOS 的 Notification 有效。apns_collapse_idstring可选更新 iOS 通知的标识符APNs 新通知如果匹配到当前通知中心有相同 apns-collapse-id 字段的通知,则会用新通知内容来更新它,并使其置于通知中心首位。collapse id 长度不可超过 64 bytes。big_push_durationint可选定速推送时长(分钟)又名缓慢推送,把原本尽可能快的推送速度,降低下来,给定的 n 分钟内,均匀地向这次推送的目标用户推送。最大值为 1400。未设置则不是定速推送。
————————————————版权声明:本文为CSDN博主「杜_小妖」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/duyusean/article/details/86581475

原文地址:https://www.cnblogs.com/zxtceq/p/11966818.html

时间: 2024-07-31 14:29:07

java SDK服务端推送 --极光推送(JPush)的相关文章

Android客户端与PHP服务端通信(四)---极光推送示例工程分析

概述 上一节,描述了注册极光推送并使用其例子的方法,这一节准备研究一下示例工程的框架,为移植它做准备. 分析例程源码 首先分析一下例程的源码结构,建议对照着JPUSH的官方文档(http://docs.jpush.io/)分析,我就是这样做的. 注册应用后,下载的示例工程结构如下, ExampleApplication.java:该类为应用程序定制了一个Application类,因为调用JPush的SDK时,需要调用JPush提供的init()函数API,而按照官方文档的说明"init 只需要在

Android客户端与PHP服务端通信(三)---极光推送使用

概述 推送消息的方式有很多,在这里我选择了极光推送.本节分为上下两部分,首先通过注册极光推送并使用其Demo程序来看一下推送的效果,然后再一步一步的修改到自己的应用上. 注册登录极光推送 开发人员基本上都了解使用第三方的库,很多都需要注册才能使用,极光推送也不例外.直接登录极光推送官网https://www.jpush.cn/,注册自己的账号,注册的流程就不介绍了,这个都会.注册完直接登录, 登录后,可以由下图看到自己还没有创建任何应用. 创建应用 点击"创建应用",界面变为下图. 按

高效率完成一次接入80个手游渠道SDK——游戏接入SDK服务端篇

1 概要    通常,游戏开发商并不会只在一个渠道上线他们的游戏,接入越多的渠道,代表着可能获取越多的用户,但同时也代表着越多的接入SDK工作量.工期和费用.一款游戏要有足够的用户,甚至需要接入30家以上的各种渠道,以保障自己的市场覆盖率. 单个SDK接入流程在一位有经验的全职客户端程序.一位全职服务端程序员.一位全职QA处理的情况下,需要3天时间才能完成.因此当一款产品面对30个甚至更多不同需求的渠道SDK时,人员成本和时间成本就会急剧增加.所以我们需要一个通用接口,来处理各种渠道的需求,这就

TYPESDK手游聚合SDK服务端设计思路与架构之三:流程优化之订单保存与通知

经过前两篇文字的分析与设计,我们已经可以搭建出一个能够支持多游戏多渠道的聚合SDK服务端,但这只是理想化状态下的一个简化模型.如果接入渠道的逻辑都是按照理想化的简化过程来构建,那么对于支付的请求,我们可以简化成这样几步: 游戏客户端创建订单. 游戏客户端(通过TYPESDK客户端)调用渠道lib库中相应接口,发起支付. 用户在弹出的支付窗口完成支付. TYPESDK服务端等待渠道服务端的回调,收到回调后通知游戏服务端. 游戏服务端执行发货动作. 但是显然这个简化流程在实际上线时是不够满足需求的,

搭建一个java web服务端

最近也是做了一个简单的java web 项目,由于以前也是没接触过,在这里记录下搭建一个web服务端的过程. 一般我们做一个服务端要么在本地自己的电脑上先安装环境,一般是windows系统,主要安装jdk + tomcat + mysql,这些安装教程网上都有,也很简单,我这里就不多说了,我要讲的是在一个远程linux服务器上搭建web服务端环境. 对于一个liunx服务器,我们可以使用xshell等终端工具登录来操作远程服务器,使用xshell的好处是,我们可以使用rz ,sz命令上传上载文件

Unity手游之路&lt;二&gt;Java版服务端使用protostuff简化protobuf开发

http://blog.csdn.net/janeky/article/details/17151465 开发一款网络游戏,首先要考虑的是客户端服务端之间用何种编码格式进行通信.之前我们介绍了Unity游戏前端使用protobuf的方法.今天我们来谈谈服务端如何使protobuf.游戏服务端语言百花齐放,除了比较传统的c/c++外,Java,Erlang,Python都有很多团队在使用. 今天推荐一下Java作为服务端开发语言.国内很多出色的页游和手游都是采用Java作为服务端语言的.比如<神曲

TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各种渠道的SDK.而且这些渠道接口的具体接入字段和接入逻辑,每个月以至每周,都可能发生或大或小的变动.在这样一个复杂的应用场景下,我们应该如何设计一个足够强大而又足够灵活的SDK服务端呢? 首先我们需要厘清,在整个应用场景中,TYPESDK所处的位置,以及它所需要实现的核心功能. 图1 如图1所示,T

Android服务端开发1-使用Eclipse搭建Java Web服务端

本篇博客介绍如何使用Eclipse来创建一个Java Web程序,为后面讲通过Android客户端跟服务端进行交互打下基础,关于服务端可以选用的程序很多,主流的搭配是Android客户端+PHP服务端,我们也可以使用Android客户端+Java EE服务端这样的搭配,就看公司是以哪种方式提供了. 创建一个Java Web程序,没有特别复杂的流程,我们先准备一下原材料: 1. Eclipse(注:这个不是ADT Bundle,最好到官网下载针对开发Java EE的IDE,如果可以的话,选中MyE

利用控制台承载SignalR作为服务端、及第三方推送信息

一 首先建立一个控制台需要引用一些组件 特别要注意引用Microsoft.Owin.Host.HttpListener别忘了这个组件,不引用他可能程序正常运行不会报错,但服务器一直开启失败(我之前就是掉过这个坑了) 二.建立一个控制台程序且建立集线器类MsgHub继承Microsoft.AspNet.SignalR.Hub 三.初始化服务端 四.调用InitSinalR方法即可启用成功服务端 到此完成服务端程序,客户端只需要请求上面地址即可运行 五.写到这只是完成了客户和服务消息传递,怎么将第三