进行推送的关键在于构建一个PushPayload对象。以下示例一般的构建对象的用法。
1、快速地构建推送对象:所有平台,所有设备,内容为ALERT的通知:
publicstatic PushPayload buildPushObject_all_all_alert(){
return PushPayload.alertAll(ALERT);
}
2、构建推送对象:所有平台,推送目标是别名为”alias1”,通知内容为ALERT。
publicstatic PushPayload buildPushObject_all_alias_alert() {
return PushPayload.newBuilder()
.setPlatform(Platform.all())
.setAudience(Audience.alias("alias1"))
.setNotification(Notification.alert(ALERT))
.build();
}
3、构建推送对象:平台是Android,推送目标是tag为”tag1”的设备,内容是Android通知ALERT,并且标题为TITLE。
publicstatic PushPayload buildPushObject_android_tag_alertWithTitle(){
return PushPayload.newBuilder()
.setPlatform(Platform.android())
.setAudience(Audience.tag("tag1"))
.setNotification(Notification.android(ALERT, TITLE, null))
.build();
}
4、//构建推送对象:平台是 iOS,推送目标是 "tag1", "tag_all" 的交集,推送内容同时包括通知与消息 -
//通知信息是 ALERT,角标数字为 5,通知声音为 "happy",并且附加字段 from = "JPush";消息内容是 MSG_CONTENT。
//通知是 APNs 推送通道的,消息是 JPush 应用内消息通道的。APNs 的推送环境是“生产”(如果不显式设置的话,Library 会默认指定为开发)
publicstatic PushPayload buildPushObject_ios_tagAnd_alertWithExtrasAndMessage(){
return PushPayload.newBuilder()
.setPlatform(Platform.ios())
.setAudience(Audience.tag_and("tag1","tag_all"))
.setNotification(Notification.newBuilder()
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(ALERT)
.setBadge(5)
.setSound("happy")
.addExtra("from", "JPush")
.build())
.build())
.setMessage(Message.content(MSG_CONTENT))
.setOptions(Options.newBuilder()
.setApnsProduction(true)
.build())
.build();
}
5、//构建推送对象:平台是Andorid与 iOS,推送目标是("tag1" 与 "tag2" 的并集)且("alias1" 与 "alias2" 的并集),
//推送内容是 - 内容为 MSG_CONTENT 的消息,并且附加字段 from = JPush。
publicstatic PushPayload buildPushObject_ios_audienceMore_messageWithExtras() {
return PushPayload.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.newBuilder()
.addAudienceTarget(AudienceTarget.tag("tag1", "tag2"))
.addAudienceTarget(AudienceTarget.alias("alias1", "alias2"))
.build())
.setMessage(Message.newBuilder()
.setMsgContent(MSG_CONTENT)
.addExtra("from", "JPush")
.build())
.build();
}
进行推送的关键在于构建一个 PushPayload 对象。推送如下:
publicvoid push(){
JPushClient jPushClient = new JPushClient(masterSecret, appKey, 3);
PushPayload pushPayload = buildPushObject_all_all_alert();
try{
PushResult pushResult = jPushClient.sendPush(pushPayload);
}catch(Exception e){
e.printStackTrace();
}
}
platform
JPush当前支持Android、iOS、Windows Phone三个平台的推送。其关键字分别为:”android”、”ios”、”winphone”。
推送到所有平台:{“platform”:”all”}。
指定特定推送平台:{“platform”:[“android”,”ios”]}
audience
推送设备对象,表示一条推送可以被推送到哪些设备列表。确认推送设备对象,JPush提供了多种方式,如:别名、标签、注册ID、分群、广播等。
all
如果要发广播(全部设备),则直接写”all”。
广播外的设备选择方式,如下几种:
关键字 | 含义 | 类型 | 说明 | 备注 |
tag | JSON Array | 标签 | 数组。多个标签之间是OR的关系,即取并集 | 用标签来进行大规模的设备属性、用户属性分群。一次推送最多20个。 有效的tag组成:字母(区分大小写)、数字、下划线、汉字。 限制:每一个tag的长度限制为40字节。(判断长度需采用UTF-8编码) |
tag_and | JSON Array | 标签 AND | 数组。多个标签之间是AND关系,即取交集。 | 注册与tag区分。一次推送最多20个。 |
alias | JSON Array | 别名 | 数组。多个别名之间是OR关系,即取并集。 | 用别名来标识一个用户。一个设备只能绑定一个别名,但多个设备可以绑定同一个别名。一次推送最多1000个。 有效的alias组成:字母(区分大小写)、数字、下划线、汉字。 限制:每一个tag的长度限制为40字节。(判断长度需采用UTF-8编码) |
registration_id | JSON Array | 注册ID | 数组。多个注册ID之间是OR关系,即取并集。 | 设备标识。一次推送最多1000个 |
这几种类型可以并存。并存时多项的隐含关系是AND,及取交集。
推送给全部(广播):
{
“platform”:”all”,
“audience”:”all”,
“notification”:{
“alert”:”Hi,JPush”,
“android”:{},
“ios”:{
“extras”:{“newsid”:321}
}
}
}
推送给多个标签(只要在任何一个标签范围内都满足):在深圳、广州、或者北京
{
“audience”:{
“tag”:[“深圳”,”广州”,”北京”]
}
}
推送给多个标签(需要同时在多个标签范围内):在深圳并且是“女”
{
“audience”:{
“tag_and”:[“深圳”,”女”]
}
}
推送给多个别名:
{
“audience”:{
“alias”:[“4314”,”892”,”4531”]
}
}
推送给多个注册ID:
{
“audience”:{
“registration_id”:[“2342aasd23”,”7878565qew”,”3234sfds”]
}
}
可同时推送指定多类推送目标:在深圳或者广州,并且是“女”“会员”
{
“audience”:{
“tag”:[“深圳”,”广州”]
“tag_and”:[“女”,”会员”]
}
}
notification
“通知”对象,的一条推送的实体内容对象之一(另一个是”消息”),是会作为”通知”推送到客户端的。
其下属性包含4种,3个平台属性,以及一个”alert”属性。
alert:通知的内容在各个平台上,都可能只有这一个最基本的属性”alert”。
这个位置的”alert”属性(直接在notification对象下),是一个快捷定义,各个平台的alert信息如果都一样,则不可定义。如果各平台有定义,则覆盖这里的定义。
{
“notification”:{
“alert”:”Hello,JPush”
}
}
上面定义的notification对象,将被推送到”platform”指定的多个平台,并且其通知alert信息都一样。
android
Android平台上的通知。
支持的字段有:
关键字 | 类型 | 选项 | 含义 | 说明 |
alert | string | 必填 | 通知内容 | 这里指定了,则会覆盖上级统一的alert信息;内容可以为空字符串,则表示不展示到通知栏 |
title | string | 可选 | 通知标题 | 如果指定了,则通知到原来展示App名称的地方,将展示成这个字段 |
builder_id | int | 可选 | 通知栏样式ID | Android SDK可设置通知栏样式,这里根据样式ID来指定该使用哪套样式 |
extras | JSON Object | 可选 | 扩展字段 | 这里自定义JSON格式的key/value信息,以供业务使用 |
{
“notification”:{
“android”:{
“alert”:”hello,JPush”,
“title”:”JPush test”,
“builder_id”:3,
“extras”:{
“news_id”:134,
“my_key”:”a value”
}
}
}
}
message
应用内消息。或者称作:自定义消息,透传消息。
此部分内容不会展示到通知栏上,JPush SDK收到消息内容后透传给App。App需要自行处理。
iOS平台上,有此部分内容,才会推送应用内消息通道。
Windows Phone平台上,暂不支持应用内消息。
消息包含如下字段:
关键字 |
类型 | 选项 | 含义 |
msg_content | String | 必填 | 消息内容本身 |
title | String | 可选 | 消息标题 |
content_type | String | 可选 | 消息内容类型 |
extras | JSON Object | 可选 | JSON格式的可选参数 |
options
推送可选项:
关键字 | 类型 | 选项 | 含义 | 说明 |
sendno | int | 可选 | 推送序号 | 作为API调用标识,API返回时被原样返回 |
time_to_live | int | 可选 | 离线消息保留时长(秒) | 推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。默认为86400(1天),最长10天。设置为0表示不保留离线消息,只有推送当前在线的用户可以收到 |
override_msg_id |
long | 可选 | 要覆盖的消息ID | 如果当前的推送要覆盖之前的一条推送,这里填写前一条推送的msg_id就会产生覆盖消息,即:1)该msg_id离线收到的消息是覆盖后的内容;2)即使该msg_id Android端用户已经收到,如果通知栏还未消除,则新的消息内容会覆盖之前这条通知;覆盖功能起作用的时限是:1天。如果在覆盖指定时限内该msg_id不存在,则返回1003错误,提示不是一次有效的消息覆盖操作,当前的消息不会被推送 |
apns_production | boolean | 可选 | APNs是否生产环境 | true表示推送生产环境,false表示要推送开发环境,如果不指定则为推送生产环境。官方API默认为开发环境 |
big_push_duration | int | 可选 | 定速推送时长(分钟) | 又名缓慢推送,把原本尽可能快的推送速度,降低下来,给定的n分钟内,均匀地向这次推送的目标用户推送。最大值为1400,未设置则不是定速推送 |
APNS:苹果推送通知服务