diff --git a/README.md b/README.md index 905251e..034a496 100644 --- a/README.md +++ b/README.md @@ -15,13 +15,13 @@ ## 1. 集成 引入sdk包 ```xml - + io.github.jpush jiguang-sdk - 5.1.11 + 5.1.12 ``` diff --git a/example-for-spring/pom.xml b/example-for-spring/pom.xml index 5a174c5..ea3a086 100644 --- a/example-for-spring/pom.xml +++ b/example-for-spring/pom.xml @@ -13,7 +13,7 @@ io.github.jpush example-for-spring - 5.1.11 + 5.1.12 8 @@ -26,7 +26,7 @@ io.github.jpush jiguang-sdk - 5.1.11 + 5.1.12 diff --git a/jiguang-sdk/pom.xml b/jiguang-sdk/pom.xml index 8a12a02..317fc12 100644 --- a/jiguang-sdk/pom.xml +++ b/jiguang-sdk/pom.xml @@ -7,13 +7,13 @@ io.github.jpush jiguang-sdk-java - 5.1.11 + 5.1.12 ../pom.xml io.github.jpush jiguang-sdk - 5.1.11 + 5.1.12 jar diff --git a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/PushSendParam.java b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/PushSendParam.java index e51b871..cf0fe78 100644 --- a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/PushSendParam.java +++ b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/PushSendParam.java @@ -16,7 +16,6 @@ @Data public class PushSendParam { - @JsonProperty("cid") @JsonInclude(JsonInclude.Include.NON_NULL) private String cid; @@ -37,36 +36,64 @@ public class PushSendParam { @JsonProperty("platform") private Object platform; + /** + * 推送参数 + */ @JsonProperty("options") @JsonInclude(JsonInclude.Include.NON_NULL) private Options options; + /** + * 通知内容体,是被推送到客户端的内容。 + * 与 message 一起二者必须有其一,可以二者并存。 + */ @JsonProperty("notification") @JsonInclude(JsonInclude.Include.NON_NULL) private NotificationMessage notification; + /** + * 消息内容体,是被推送到客户端的内容。 + * 与 notification 一起二者必须有其一,可以二者并存。 + */ @JsonProperty("message") @JsonInclude(JsonInclude.Include.NON_NULL) private CustomMessage custom; + /** + * 实时活动内容体。 + * 不可与 notification 或 message 等并存。 + */ @JsonProperty("live_activity") @JsonInclude(JsonInclude.Include.NON_NULL) private LiveActivityMessage liveActivity; + /** + * 面向于通知栏消息类型,需搭配notification参数一起使用,对于通知权限关闭的用户可设置启用此功能。 + * 不可与 message 同时并存。 + */ @JsonProperty("inapp_message") @JsonInclude(JsonInclude.Include.NON_NULL) private InAppMessage inApp; + /** + * 自定义消息转厂商通知内容体。 + * 与 message 一起使用。 + */ @JsonProperty("notification_3rd") @JsonInclude(JsonInclude.Include.NON_NULL) private ThirdNotificationMessage thirdNotificationMessage; + /** + * 短信渠道补充送达内容体 + */ @JsonProperty("sms_message") @JsonInclude(JsonInclude.Include.NON_NULL) private SmsMessage smsMessage; + /** + * 回调参数 + */ @JsonProperty("callback") @JsonInclude(JsonInclude.Include.NON_NULL) private Callback callback; - } diff --git a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/custom/CustomMessage.java b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/custom/CustomMessage.java index 620edfd..3c9df30 100644 --- a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/custom/CustomMessage.java +++ b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/custom/CustomMessage.java @@ -10,32 +10,32 @@ @Data @JsonIgnoreProperties(ignoreUnknown = true) public class CustomMessage { - - @JsonProperty("title") - @JsonInclude(JsonInclude.Include.NON_NULL) - public String title; - + /** + * 消息内容本身。 + */ @JsonProperty("msg_content") @JsonInclude(JsonInclude.Include.NON_NULL) public String content; - @JsonProperty("alternate_title") - @JsonInclude(JsonInclude.Include.NON_NULL) - public String alternateTitle; - - @JsonProperty("alternate_content") + /** + * 消息标题。 + */ + @JsonProperty("title") @JsonInclude(JsonInclude.Include.NON_NULL) - public String alternateContent; + public String title; + /** + * 消息内容类型,开发者可根据自身业务定义具体类型。 + */ @JsonProperty("content_type") @JsonInclude(JsonInclude.Include.NON_NULL) public String contentType; /** * 这里的Object,可以是基础数据类型 + * JSON 格式的可选参数 */ @JsonProperty("extras") @JsonInclude(JsonInclude.Include.NON_NULL) public Map extras; - } diff --git a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/notification/NotificationMessage.java b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/notification/NotificationMessage.java index 82600a1..2683a16 100644 --- a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/notification/NotificationMessage.java +++ b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/notification/NotificationMessage.java @@ -20,10 +20,6 @@ public class NotificationMessage { @JsonInclude(JsonInclude.Include.NON_NULL) private String alert; - @JsonProperty("alternate_alert") - @JsonInclude(JsonInclude.Include.NON_NULL) - private String alternateAlert; - @JsonProperty("android") @JsonInclude(JsonInclude.Include.NON_NULL) private Android android; @@ -40,112 +36,253 @@ public class NotificationMessage { @JsonInclude(JsonInclude.Include.NON_NULL) private QuickApp quickApp; + /** + * iOS VOIP 功能。该类型推送支持和 iOS 的 Notification 通知并存,详见 voip:https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push#voip + */ @JsonProperty("voip") @JsonInclude(JsonInclude.Include.NON_NULL) - private Map voip; + private Map voip; @Data public static class Android { + /** + * 这里指定后会覆盖上级统一指定的 alert 信息。 + * 内容可以为空字符串,表示不展示到通知栏。 + * 各推送通道对此字段的限制详见 推送限制:https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push#%E7%9B%B8%E5%85%B3%E5%8F%82%E8%80%83 + */ @JsonProperty("alert") @JsonInclude(JsonInclude.Include.NON_NULL) private String alert; + /** + * 如果指定了,则通知里原来展示 App 名称的地方,将展示 title。 + * 各推送通道对此字段的限制详见 推送限制:https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push#%E7%9B%B8%E5%85%B3%E5%8F%82%E8%80%83 + */ @JsonProperty("title") @JsonInclude(JsonInclude.Include.NON_NULL) private String title; + /** + * Android SDK 可 设置通知栏样式:https://docs.jiguang.cn/jpush/client/Android/android_api#%E9%80%9A%E7%9F%A5%E6%A0%8F%E6%A0%B7%E5%BC%8F%E5%AE%9A%E5%88%B6-api + * 根据样式 ID 来指定通知样式。 + * android 8.0 开始建议采用 NotificationChannel 配置:https://docs.jiguang.cn/jpush/client/Android/android_api#notificationchannel-%E9%85%8D%E7%BD%AE + */ @JsonProperty("builder_id") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer builderId; + /** + * 根据 channel ID 来指定通知栏展示效果,不超过 1000 字节。 + * Android 8.0 开始可以进行 NotificationChannel 配置:https://docs.jiguang.cn/jpush/client/Android/android_api#notificationchannel-%E9%85%8D%E7%BD%AE + * options.third_party_channel 下的小米、OPPO 和华为厂商参数也有 channel_id 字段,若有填充,则优先使用,若无填充则以本字段定义为准。 + */ @JsonProperty("channel_id") @JsonInclude(JsonInclude.Include.NON_NULL) private String channelId; + /** + * 完全依赖 rom 厂商对 category 的处理策略。 + * 说明1:华为从 2023.09.15 开始基于《华为消息分类标准》 对其本地通知进行管控推送,参考:《华为本地通知频次及分类管控通知》 ,此字段值对应华为「本地通知」category取值,开发者通过极光服务发起推送时如果传递了此字段值,请务必按照华为官方要求传递,极光会自动适配华为本地通知importance取值,无需开发者额外处理。 + * 说明2:考虑到一次推送包含多个厂商用户的情况,建议此处传递的字段值要和您APP开发代码中创建的channel效果对应(category值一致),最好创建新的channelId,避免曾经已经创建了无法修改。 + * 官方category分类取值规则也可参考华为消息分类对应表 + */ @JsonProperty("category") @JsonInclude(JsonInclude.Include.NON_NULL) private String category; + /** + * 默认为 0,范围为 -2~2。 + * 说明1:华为从 2023.09.15 开始基于《华为消息分类标准》 对其本地通知进行管控推送,参考:《华为本地通知频次及分类管控通知》 ,开发者通过极光服务发起推送时,如果有传递此字段值,请注意此字段要和 category 同时使用;反之,如果传了category,没传递此值时极光会自动帮您适配处理优先级。 + * priority = -2 时,对应华为本地通知 importance 级别为 IMPORTANCE_MIN;priority = 0 时,对应华为本地通知 importance 级别为 IMPORTANCE_DEFAULT。 + * 官方消息优先级取值规则也可参考华为消息分类对应表 + * 极光取值 -2 ~-1 对应 FCM 取值 normal,极光取值 0~2 对应 FCM 取值 high。 + */ @JsonProperty("priority") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer priority; + /** + * 用来指定通知栏样式类型,默认为 0。 + * 1:bigText + * 2:Inbox + * 3:bigPicture + */ @JsonProperty("style") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer style; + /** + * 可选范围为 -1~7 ,默认按照 -1 处理。 + * 即0111二进制,左数第二位代表 light,第三位代表 vibrate,第四位代表 sound。 0:不生效,1:生效。 + * 如: Notification.DEFAULT_ALL = -1 ,Notification.DEFAULT_SOUND = 1, Notification.DEFAULT_VIBRATE = 2, Notification.DEFAULT_LIGHTS = 4 的任意 “or” 组合。 + */ @JsonProperty("alert_type") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer alertType; + /** + * 当 style = 1 时可用,内容会被通知栏以大文本的形式展示出来。 + * 若没有填充 厂商 big_text, 则也默认使用该 big_text 字段展示。 + * 支持 api 16 以上的 rom。 + */ @JsonProperty("big_text") @JsonInclude(JsonInclude.Include.NON_NULL) private String bigText; /** * 这里的Object,可以是基础数据类型,也可以是Map + * 当 style = 2 时可用, json 的每个 key 对应的 value 会被当作文本条目逐条展示。 + * 若没有填充 厂商 inbox,则默认使用该 inbox 字段展示。 + * 支持 api 16 以上的 rom。 */ @JsonProperty("inbox") @JsonInclude(JsonInclude.Include.NON_NULL) private Map inbox; + /** + * 使用详情参见 设置大图片文档:https://docs.jiguang.cn/jpush/practice/set_icon#android%E3%80%82 + * 当 style = 3 时可用,目前支持 .jpg 和 .png 格式的图片。 + * 支持网络图片 url、本地图片的 path、 极光 media_id(推荐使用),如果是 http/https 的 url,会自动下载;如果要指定开发者准备的本地图片就填 sdcard 的相对路径。 + * 若没有填充 厂商 big_pic_path,则默认使用该字段展示。 + * 支持 api 16 以上的 rom。 + */ @JsonProperty("big_pic_path") @JsonInclude(JsonInclude.Include.NON_NULL) private String bigPicture; /** * 这里的Object,可以是基础数据类型,也可以是Map + * 这里自定义 JSON 格式的 Key / Value 信息,以供业务使用。 + * 针对部分厂商跳转地址异常,可通过 third_url_encode 兼容处理,详情参考 厂商通道无法跳转问题分析:https://docs.jiguang.cn/jpush/faq/tech_faq#%E5%8E%82%E5%95%86%E9%80%9A%E9%81%93%E6%97%A0%E6%B3%95%E8%B7%B3%E8%BD%AC%EF%BC%9F + * 当通知内容超过厂商的限制时,厂商通道会推送失败,可以在 extras 中配置 xx_content_forshort 参数传入对应厂商的通知内容,详情可展开表格查看。 */ @JsonProperty("extras") @JsonInclude(JsonInclude.Include.NON_NULL) private Map extras; + /** + * 使用详情参见 设置图标文档:https://docs.jiguang.cn/jpush/practice/set_icon#android%E3%80%82 + * 图标大小不超过 30 k(注:从 JPush Android SDK v4.0.0 版本开始,图片大小限制提升至 300 k)。 + * 支持网络图片 url、本地图片的 path、 极光 media_id(推荐使用),如果是 http/https 的 url,会自动下载;如果要指定开发者准备的本地图片就填 sdcard 的相对路径。 + * 此字段值,若是 media_id, 则对其它厂商通道生效,若非 media_id,则对走华硕通道和极光通道下发的消息生效,不影响请求走其它厂商通道。 + * 若没有填充 厂商 large_icon ,则默认使用该 large_icon 字段展示。 + */ @JsonProperty("large_icon") @JsonInclude(JsonInclude.Include.NON_NULL) private String largeIcon; + /** + * 使用详情参见 设置图标文档:https://docs.jiguang.cn/jpush/practice/set_icon#android%E3%80%82 + * 图标大小不超过 30 k (注:从 JPush Android SDK v4.0.0 版本开始,图片大小限制提升至 300 k)。 + * 支持以 http 或 https 开头的网络图片和通过极光图片上传接口得到的 media_id 值(推荐使用)。 + * 此字段值,若是 media_id, 则对其它厂商通道生效,若非 media_id,则对走华硕通道和极光通道下发的消息生效,不影响请求走其它厂商通道。 + * 若没有填充 厂商 small_icon_uri,则默认使用该 small_icon_uri 字段展示。 + */ @JsonProperty("small_icon_uri") @JsonInclude(JsonInclude.Include.NON_NULL) private String smallIcon; + /** + * 该字段仅对消息走极光通道下发生效。 + * 该字段能辅助解决部分设备小图标显示灰白情况,但最终还是依赖系统本身支持情况,建议开发者在设计UI图标时就做好适配工作。 + * 需要搭配 Android JPush SDK v5.5.0 及其以上版本使用。 + */ + @JsonProperty("icon_bg_color") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String iconBgColor; + + /** + * 使用 intent 里的 url 指定点击通知栏后跳转的目标页面; + * SDK<422 的版本此字段值仅对走华硕通道和极光自有通道下发生效,不影响请求走其它厂商通道。 + * SDK≥422 的版本,API 推送时建议填写 intent 字段,否则点击通知可能无跳转动作。此字段支持以下三种类型: + * 1. 跳转到目标页: + * intent:#Intent;action=action 路径;component= 包名 /Activity 全名;end + * (OPPO 和 FCM 通道必须传 "action 路径", 其他厂商必须传 "Activity 全名", 否则将出现对应厂商无法跳转问题) + * 2. 跳转到 deeplink 地址: + * scheme://test?key1=val1&key2=val2 + * 3. 应用首页: intent:#Intent;action=android.intent.action.MAIN;end (固定为此地址) + */ @JsonProperty("intent") @JsonInclude(JsonInclude.Include.NON_NULL) private Intent intent; + /** + * 用于指定开发者想要打开的 activity,值为 activity 节点的 “android:name”属性值。 + * 适配华为、小米、vivo 厂商通道跳转。 + * Jpush SDK≥V4.2.2,可不再填写本字段,仅设置 intent 字段即可。 + */ @JsonProperty("uri_activity") @JsonInclude(JsonInclude.Include.NON_NULL) private String uriActivity; + /** + * 用于指定开发者想要打开的 activity,值为 "activity"-"intent-filter"-"action" 节点的 "android:name" 属性值。 + * 适配 oppo、fcm 跳转。 + * Jpush SDK≥V4.2.2,可不再填写本字段,仅设置 intent 字段即可,但若需兼容旧版 SDK 必须填写该字段 + */ @JsonProperty("uri_action") @JsonInclude(JsonInclude.Include.NON_NULL) private String uriAction; + /** + * 此属性目前仅针对华为 EMUI 8.0 及以上、小米 MIUI 6 及以上、vivo、荣耀设备生效。 + * 此字段如果不填,表示不改变角标数字(小米设备由于系统控制,不论推送走极光通道下发还是厂商通道下发,即使不传递依旧是默认 +1 的效果)。 + * 取值范围为:1-99,若设置了取值范围内的数字,下一条通知栏消息配置的 badge_add_num 数据会和原角标数量进行相加,建议取值为 1。 + * 举例:badge_add_num 取值为 1,原角标数为 2,发送此角标消息后,应用角标数显示为 3。 + * 针对华为 / 荣耀通道,若 badge_set_num 与 badge_add_num 同时存在,则以 badge_set_num 为准;若“badge_add_num”和“badge_set_num”都设置为空,则应用角标数字默认加1。 + */ @JsonProperty("badge_add_num") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer badgeAddNumber; + /** + * 此属性目前仅针对华为 EMUI 8.0 及以上、荣耀设备走厂商通道时生效,若 badge_set_num 与 badge_add_num 同时存在,则以 badge_set_num 为准;若“badge_add_num”和“badge_set_num”都设置为空,则应用角标数字默认加1。 + * 取值范围为:0-99,若设置了取值范围内的数字,对应下一条通知栏消息配置的 badge_set_num 数字则为角标数值,举例:badge_set_num 取值为 1,无论应用之前角标数为多少,发送此角标消息后,应用角标数均显示为 1。 + */ @JsonProperty("badge_set_num") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer badgeSetNumber; + /** + * 仅华为和荣耀通道推送时生效,此值如果填写非主 Activity 类,以厂商限制逻辑为准。 + * 若需要实现角标累加功能,需配合 badge_add_num 使用,二者需要共存,缺少其一不可。 + * 若需要实现角标固定值功能,需配合 badge_set_num 使用,二者需要共存,缺少其一不可。 + */ @JsonProperty("badge_class") @JsonInclude(JsonInclude.Include.NON_NULL) private String badgeClass; + /** + * 填写 Android 工程中 /res/raw/ 路径下铃声文件名称,无需文件名后缀. + * 注意:针对 Android 8.0 以上,当传递了 channel_id 时,此属性不生效。 + */ @JsonProperty("sound") @JsonInclude(JsonInclude.Include.NON_NULL) private String sound; + /** + * 此属性不填写,SDK 默认立即展示;此属性填写,则以填写时间点为准才开始展示。 + * JPush Android SDK v3.5.0 版本开始支持。 + */ @JsonProperty("show_begin_time") @JsonInclude(JsonInclude.Include.NON_NULL) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime showBeginTime; + /** + * 此属性不填写,SDK 会一直展示;此属性填写,则以填写时间点为准,到达时间点后取消展示。 + * JPush Android SDK v3.5.0 版本开始支持。 + */ @JsonProperty("show_end_time") @JsonInclude(JsonInclude.Include.NON_NULL) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime showEndTime; + /** + * 值为 "1" 时,APP 在前台会弹出/展示通知栏消息。 + * 值为 "0" 时,APP 在前台不会弹出/展示通知栏消息。 + * 注:默认情况下 APP 在前台会弹出/展示通知栏消息,JPush Android SDK v3.5.8 版本开始支持。 + */ @JsonProperty("display_foreground") @JsonInclude(JsonInclude.Include.NON_NULL) private String displayForeground; @@ -162,6 +299,9 @@ public static class Intent { public static class IOS { /** * 这里的Object,可以是String类型,也可以是Map + * 这里指定内容将会覆盖上级统一指定的 alert 信息。 + * 内容为空则不展示到通知栏。 + * 支持字符串形式也支持官方定义的 alert payload 结构,在该结构中包含 title 和 subtitle 等官方支持的 key。 */ @JsonProperty("alert") @JsonInclude(JsonInclude.Include.NON_NULL) @@ -169,38 +309,67 @@ public static class IOS { /** * 这里的Object,可以是String类型,也可以是Map + * 普通通知: string 类型,如果无此字段,则此消息无声音提示;有此字段,如果找到了指定的声音就播放该声音,否则播放默认声音,如果此字段为空字符串,iOS 7 为默认声音,iOS 8 及以上系统为无声音。说明:JPush 官方 SDK 会默认填充声音字段,提供另外的方法关闭声音,详情查看各 SDK 的源码。 + * 告警通知: JSON Object , 支持官方定义的 payload 结构,在该结构中包含 critical 、name 和 volume 等官方支持的 key 。 + * 自定义铃声说明:格式必须是 Linear PCM、MA4(IMA/ADPCM)、alaw,μLaw 的一种,将声频文件放到项目 bundle 目录中,且时长要求 30s 以下,否则就是系统默认的铃声,详见 自定义铃声:https://docs.jiguang.cn/jpush/practice/custom_ringtone#apns-%E9%80%9A%E9%81%93%E9%80%9A%E7%9F%A5%E5%AE%9E%E7%8E%B0 */ @JsonProperty("sound") @JsonInclude(JsonInclude.Include.NON_NULL) private Object sound; + /** + * 可设置为 N、+N、-N,N 的取值范围为 [0,99]。若上传的角标值 value 为 10,表示角标会设置为 N、10+N、10-N(值小于 0 时默认清除角标)。 + * 为 0 或空字符串,则表示清除角标。 + * 如果不填,表示不改变角标数字。 + * JPush 官方服务端 SDK 会默认填充 badge 值为 "+1",详情参考:badge +1:https://community.jiguang.cn/article/464967 + */ @JsonProperty("badge") @JsonInclude(JsonInclude.Include.NON_NULL) private String badge; + /** + * 推送的时候携带 "content-available":true,说明是 Background Remote Notification,如果不携带此字段则是普通的 Remote Notification。 + * 详情参考:Background Remote Notification:https://docs.jiguang.cn/jpush/client/iOS/ios_new_fetures#ios-7-background-remote-notification + */ @JsonProperty("content-available") @JsonInclude(JsonInclude.Include.NON_NULL) private Boolean contentAvailable; + /** + * iOS 10 新增的 Notification Service Extension 功能,用于上报每条 APNs 信息的送达状态,使用该功能需要客户端实现 Service Extension 接口 ,并在服务端使用 mutable-content 字段完成设置。 + * true:说明支持 iOS 10 的 UNNotificationServiceExtension 功能。 + * 如果不携带此字段则是普通的 Remote Notification,无法统计抵达数据。 + */ @JsonProperty("mutable-content") @JsonInclude(JsonInclude.Include.NON_NULL) private Boolean mutableContent; + /** + * iOS 8 开始支持,设置 APNs payload 中的 "category" 字段值。 + */ @JsonProperty("category") @JsonInclude(JsonInclude.Include.NON_NULL) private String category; /** * 这里的Object,可以是基础数据类型,也可以是Map + * 这里自定义 Key / value 信息,以供业务使用,详情参考 如何设置右侧图标/大图片 和 iOS 通知点击跳转。 */ @JsonProperty("extras") @JsonInclude(JsonInclude.Include.NON_NULL) private Map extras; + /** + * ios 的远程通知通过该属性来对通知进行分组,同一个 thread-id 的通知归为一组。 + */ @JsonProperty("thread-id") @JsonInclude(JsonInclude.Include.NON_NULL) private String threadId; + /** + * ios 15 的通知级别,取值只能是 active,critical,passive,time-sensitive 中的一个。 + * 详情参考:UNNotificationInterruptionLevel:https://developer.apple.com/documentation/usernotifications/unnotificationinterruptionlevel + */ @JsonProperty("interruption-level") @JsonInclude(JsonInclude.Include.NON_NULL) private String interruptionLevel; @@ -208,49 +377,89 @@ public static class IOS { @Data public static class HMOS { + /** + * 这里指定后会覆盖上级统一指定的 alert 信息。 + * 内容不可以是空字符串,否则推送厂商会返回失败。 + */ @JsonProperty("alert") @JsonInclude(JsonInclude.Include.NON_NULL) private String alert; + /** + * 如果指定了,则通知里原来展示 App 名称的地方,将展示 title。否则使用WebPortal配置的默认title。 + */ @JsonProperty("title") @JsonInclude(JsonInclude.Include.NON_NULL) private String title; + /** + * 此字段由于厂商为必填字段,效果也完全依赖 rom 厂商对 category 的处理策略,请开发者务必填写。极光内部对此字段实际未进行必填校验,请开发者按照必填处理。 + * 此字段值对应官方「云端category」取值,开发者通过极光服务发起推送时如果传递了此字段值,请务必按照官方要求传递,官方category分类取值规则也可参考鸿蒙消息分类标准:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/push-noti-classification-0000001727885246#section1521814368537 + */ @JsonProperty("category") @JsonInclude(JsonInclude.Include.NON_NULL) private String category; + /** + * 要求传递网络地址,使用HTTPS协议,取值样例:https://example.com/image.png。 + * 图标大小不超过 30 k,图片长*宽<12800像素。 + */ @JsonProperty("large_icon") @JsonInclude(JsonInclude.Include.NON_NULL) private String largeIcon; + /** + * 支持跳转到应用首页、deeplink 地址和Action跳转三种类型: + * 1. 跳转应用首页:固定 action.system.home + * 2. 跳转到 deeplink 地址: scheme://test?key1=val1&key2=val2 + * 3. 跳转到 action 地址: com.test.action + * 说明:此字段由于厂商为必填字段,请开发者务必填写。极光内部对此字段实际未进行必填校验,请开发者按照必填处理。 + */ @JsonProperty("intent") @JsonInclude(JsonInclude.Include.NON_NULL) private Android.Intent intent; + /** + * 此字段如果不填,表示不改变角标数字 + * 取值范围为:1-99,若设置了取值范围内的数字,下一条通知栏消息配置的 badge_add_num 数据会和原角标数量进行相加,建议取值为 1。 + * 举例:badge_add_num 取值为 1,原角标数为 2,发送此角标消息后,应用角标数显示为 3。 + */ @JsonProperty("badge_add_num") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer badgeAddNumber; + /** + * 此字段如果不填,表示不改变角标数字 + * 取值范围为:0-99,若设置了取值范围内的数字,对应下一条通知栏消息配置的 badge_set_num 数字则为角标数值,举例:badge_set_num 取值为 1,无论应用之前角标数为多少,发送此角标消息后,应用角标数均显示为 1。 + */ @JsonProperty("badge_set_num") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer badgeSetNumber; /** - * 这里的Object,可以是基础数据类型,也可以是Map + * 测试消息标识: + * false:正常消息(默认值) + * true:测试消息 */ - @JsonProperty("extras") - @JsonInclude(JsonInclude.Include.NON_NULL) - private Map extras; - @JsonProperty("test_message") @JsonInclude(JsonInclude.Include.NON_NULL) private Boolean isTest; + /** + * 输入一个唯一的回执 ID 指定本次下行消息的回执地址及配置,该回执 ID 可以在鸿蒙回执参数配置中查看。 + */ @JsonProperty("receipt_id") @JsonInclude(JsonInclude.Include.NON_NULL) private String receiptId; + /** + * 这里的Object,可以是基础数据类型,也可以是Map + * 这里自定义 JSON 格式的 Key / Value 信息,以供业务使用。 + */ + @JsonProperty("extras") + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map extras; + /** * 通知栏样式类型,默认为0,0:普通样式 2:多文本样式 */ @@ -260,6 +469,7 @@ public static class HMOS { /** * 这里的Object,可以是基础数据类型,也可以是Map + * 对应 style 的取值类型 2。 */ @JsonProperty("inbox") @JsonInclude(JsonInclude.Include.NON_NULL) diff --git a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/notification/ThirdNotificationMessage.java b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/notification/ThirdNotificationMessage.java index 8b98bf0..d4f4562 100644 --- a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/notification/ThirdNotificationMessage.java +++ b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/notification/ThirdNotificationMessage.java @@ -10,48 +10,102 @@ @Data @JsonIgnoreProperties(ignoreUnknown = true) public class ThirdNotificationMessage { - + /** + * 补发通知标题,如果为空则默认为应用名称。 + */ @JsonProperty("title") @JsonInclude(JsonInclude.Include.NON_NULL) private String title; + /** + * 补发通知的内容,如果存在 notification_3rd 这个 key,content 字段不能为空,且值不能为空字符串。 + */ @JsonProperty("content") private String content; + /** + * 使用 intent 里的 url 指定点击通知栏后跳转的目标页面; + * SDK<422 的版本此字段值仅对走华硕通道和极光自有通道下发生效,不影响请求走其它厂商通道。 + * SDK≥422 的版本,API 推送时建议填写 intent 字段,否则点击通知可能无跳转动作。此字段支持以下三种类型: + * 1. 跳转到目标页: + * intent:#Intent;action=action 路径;component= 包名 /Activity 全名;end + * (OPPO 和 FCM 通道必须传 "action 路径", 其他厂商必须传 "Activity 全名", 否则将出现对应厂商无法跳转问题) + * 2. 跳转到 deeplink 地址: + * scheme://test?key1=val1&key2=val2 + * 3. 应用首页: intent:#Intent;action=android.intent.action.MAIN;end (固定为此地址) + */ @JsonProperty("intent") @JsonInclude(JsonInclude.Include.NON_NULL) private Intent intent; + /** + * 用于指定开发者想要打开的 activity,值为 activity 节点的 “android:name”属性值。 + * 适配华为、小米、vivo 厂商通道跳转。 + * Jpush SDK≥V4.2.2,可不再填写本字段,仅设置 intent 字段即可。 + */ @JsonProperty("uri_activity") @JsonInclude(JsonInclude.Include.NON_NULL) private String uriActivity; + /** + * 用于指定开发者想要打开的 activity,值为 "activity"-"intent-filter"-"action" 节点的 "android:name" 属性值。 + * 适配 oppo、fcm 跳转。 + * Jpush SDK≥V4.2.2,可不再填写本字段,仅设置 intent 字段即可,但若需兼容旧版 SDK 必须填写该字段 + */ @JsonProperty("uri_action") @JsonInclude(JsonInclude.Include.NON_NULL) private String uriAction; + /** + * 桌面图标对应的应用入口 Activity 类,比如“com.test.badge.MainActivity”。 + * 仅华为和荣耀通道推送时生效,此值如果填写非主 Activity 类,以厂商限制逻辑为准。 + * 若需要实现角标累加功能,需配合 badge_add_num 使用,二者需要共存,缺少其一不可。 + * 若需要实现角标固定值功能,需配合 badge_set_num 使用,二者需要共存,缺少其一不可。 + */ @JsonProperty("badge_class") @JsonInclude(JsonInclude.Include.NON_NULL) private String badgeClass; + /** + * 设置角标数字累加值,在原角标的基础上进行累加,取值范围为:1-99。 + * 此属性目前仅针对华为 EMUI 8.0 及以上、小米 MIUI 6 及以上、vivo、荣耀设备走厂商通道时生效。 + * 此字段如果不填,表示不改变角标数字(小米设备由于系统控制,不论推送走极光通道下发还是厂商通道下发,即使不传递依旧是默认 +1 的效果)。 + * 若设置了取值范围内的数字,下一条通知栏消息配置的 badge_add_num 数据会和原角标数量进行相加,建议取值为1。 + * 举例:badge_add_num 取值为1,原角标数为2,发送此角标消息后,应用角标数显示为3。 + * 针对华为/荣耀通道,如果 badge_set_num 与 badge_add_num 同时存在,则以 badge_set_num 为准。 + */ @JsonProperty("badge_add_num") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer badgeAddNumber; + /** + * 设置角标数字固定值,取值范围为:0-99。 + * 此属性目前仅针对华为 EMUI 8.0 及以上、荣耀设备走厂商通道时生效,如果 badge_set_num 与 badge_add_num 同时存在,则以 badge_set_num 为准。 + * 取值范围为:0-99,若设置了取值范围内的数字,对应下一条通知栏消息配置的 badge_set_num 数字则为角标数值,举例:badge_set_num 取值为 1,无论应用之前角标数为多少,发送此角标消息后,应用角标数均显示为1。 + */ @JsonProperty("badge_set_num") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer badgeSetNumber; + /** + * 填写 Android 工程中 /res/raw/ 路径下铃声文件名称,无需文件名后缀。 + * 注意:针对 Android 8.0 以上,当传递了 channel_id 时,此属性不生效。 + */ @JsonProperty("sound") @JsonInclude(JsonInclude.Include.NON_NULL) private String sound; + /** + * 根据 channel ID 来指定通知栏展示效果,不超过 1000 字节。 + * Android 8.0 开始可以进行 NotificationChannel 配置:https://docs.jiguang.cn/jpush/client/Android/android_api#notificationchannel-%E9%85%8D%E7%BD%AE + */ @JsonProperty("channel_id") @JsonInclude(JsonInclude.Include.NON_NULL) private String channelId; /** * 这里的Object,可以是基础数据类型,也可以是Map + * 扩展字段;这里自定义 JSON 格式的 Key / Value 信息,以供业务使用。 */ @JsonProperty("extras") @JsonInclude(JsonInclude.Include.NON_NULL) @@ -63,5 +117,4 @@ public static class Intent { @JsonInclude(JsonInclude.Include.NON_NULL) private String url; } - } diff --git a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/sms/SmsMessage.java b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/sms/SmsMessage.java index 495f71b..7d1ba4c 100644 --- a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/sms/SmsMessage.java +++ b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/message/sms/SmsMessage.java @@ -10,25 +10,44 @@ @Data @JsonIgnoreProperties(ignoreUnknown = true) public class SmsMessage { - - @JsonProperty("temp_id") + /** + * 短信发送的延迟时间,若在设定的时间内没有推送成功,则下发短信。 + * 设置为 0,表示立即发送短信,即通知和短信并发。 + * 设置不为 0,表示若在设定的时间内没有推送成功,则进行短信补发。 + * 单位为秒,不能超过 24 小时。 + * 该参数仅对 android 和 iOS 平台有效。 + */ + @JsonProperty("delay_time") @JsonInclude(JsonInclude.Include.NON_NULL) - private Integer tempId; + private Integer delayTime; + /** + * 签名 ID,该字段为空则使用应用默认签名。 + */ @JsonProperty("signid") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer signId; - @JsonProperty("delay_time") - @JsonInclude(JsonInclude.Include.NON_NULL) - private Integer delayTime; - - @JsonProperty("active_filter") + /** + * 短信补充的内容模板 ID,没有填写该字段即表示不使用短信补充功能。 + */ + @JsonProperty("temp_id") @JsonInclude(JsonInclude.Include.NON_NULL) - private Boolean activeFilter; + private Integer tempId; + /** + * 短信模板中的参数。 + */ @JsonProperty("temp_para") @JsonInclude(JsonInclude.Include.NON_NULL) private Map tempParams; + /** + * active_filter 字段用来控制是否对补发短信的用户进行活跃过滤。 + * 默认为 true ,做活跃过滤。 + * 为 false,则不做活跃过滤。 + */ + @JsonProperty("active_filter") + @JsonInclude(JsonInclude.Include.NON_NULL) + private Boolean activeFilter; } diff --git a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/options/Options.java b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/options/Options.java index a7fb9f3..e3ed32a 100644 --- a/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/options/Options.java +++ b/jiguang-sdk/src/main/java/cn/jiguang/sdk/bean/push/options/Options.java @@ -11,61 +11,94 @@ @Data @JsonIgnoreProperties(ignoreUnknown = true) public class Options { - + /** + * 纯粹用来作为 API 调用标识,API 返回时被原样返回,以方便 API 调用方匹配请求与返回。 + * 值为 0 表示该 messageid 无 sendno,所以字段取值范围为非 0 的 int。 + */ @JsonProperty("sendno") @JsonInclude(JsonInclude.Include.NON_NULL) private Long sendNo; - @JsonProperty("override_msg_id") - @JsonInclude(JsonInclude.Include.NON_NULL) - private Long overrideMsgId; - - @JsonProperty("apns_production") - @JsonInclude(JsonInclude.Include.NON_NULL) - private Boolean apnsProduction; - + /** + * 推送当前用户不在线时,为该用户保留多长时间的离线消息,以便其上线时再次推送。 + * 默认 86400 (1 天),普通用户最长 3 天, VIP 用户最长 10 天。设置为 0 表示不保留离线消息,只有推送当前在线的用户可以收到。 + * 该字段对 iOS 的 Notification 消息无效。 + */ @JsonProperty("time_to_live") @JsonInclude(JsonInclude.Include.NON_NULL) private Long timeToLive; - @JsonProperty("alternate_set") - @JsonInclude(JsonInclude.Include.NON_NULL) - private Boolean alternateEnable; - - @JsonProperty("portal_extra") - @JsonInclude(JsonInclude.Include.NON_NULL) - private PortalExtra portalExtra; - - @JsonProperty("target_event") + /** + * 如果当前的推送要覆盖之前的一条推送,这里填写前一条推送的 msg_id 就会产生覆盖效果,即: + * 该 msg_id 离线收到的消息是覆盖后的内容,即使该 msg_id Android 端用户已经收到,如果通知栏还未清除,则新的消息内容会覆盖之前这条通知。 + * 覆盖功能起作用的时限是:1 天,如果在覆盖指定时限内该 msg_id 不存在,则返回 1003 错误,提示不是一次有效的消息覆盖操作,当前的消息不会被推送。 + * 该字段仅对 Android 有效仅支持极光通道、小米通道、魅族通道、OPPO 通道、FCM 通道、荣耀通道和华为通道(EMUI10 及以上的设备)。 + */ + @JsonProperty("override_msg_id") @JsonInclude(JsonInclude.Include.NON_NULL) - private List targetEvent; + private Long overrideMsgId; - @JsonProperty("third_party_channel") + /** + * 该字段仅对 iOS 的 Notification 有效,如果不指定则为推送生产环境。注意:JPush 服务端 SDK 默认设置为推送 “开发环境”。 + * true:表示推送生产环境。 + * false:表示推送开发环境。 + */ + @JsonProperty("apns_production") @JsonInclude(JsonInclude.Include.NON_NULL) - private Map thirdPartyChannel; + private Boolean apnsProduction; + /** + * APNs 新通知如果匹配到当前通知中心有相同 apns-collapse-id 字段的通知,则会用新通知内容来更新它,并使其置于通知中心首位。 + * collapse id 长度不可超过 64 bytes。 + */ @JsonProperty("apns_collapse_id") @JsonInclude(JsonInclude.Include.NON_NULL) private String apnsCollapseId; + /** + * 又名缓慢推送,把原本尽可能快的推送速度,降低下来,给定的 n 分钟内,均匀地向这次推送的目标用户推送;最大值为 1400。 + * 最多能同时存在 20 条定速推送。 + * 未设置则不是定速推送。 + */ @JsonProperty("big_push_duration") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer bigPushDuration; + /** + * 参考:https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push#third_party_channel-%E8%AF%B4%E6%98%8E + */ + @JsonProperty("third_party_channel") + @JsonInclude(JsonInclude.Include.NON_NULL) + private Map thirdPartyChannel; + + /** + * 极光不对指定的消息类型进行判断或校准,会以开发者自行指定的消息类型适配 Android 厂商通道。不填默认为 0。 + * 0:代表运营消息。 + * 1:代表系统消息。 + * 此字段优先级最高,会覆盖 options.third_party_channel.vivo.classification 设置的值。 + */ @JsonProperty("classification") @JsonInclude(JsonInclude.Include.NON_NULL) private Integer classification; - @JsonProperty("geofence") + /** + * 目标转化事件支持传递「自定义事件」和「极光预置事件」,目前支持Android和iOS平台(要求JPush SDK ≥ 5.0.0 ,且JCore ≥ 4.2.0),支持通知消息和应用内消息两种消息类型。 + * 自定义事件:需集成极光分析SDK,开发者在极光分析产品中自行创建的业务事件(如:加入购物车、浏览商品等),详情参考 如何创建自定义事件 和 SDK如何上报自定义事件 + * 极光预置事件:极光推送SDK默认支持,无需开发者创建,也无需集成极光分析SDK,系统已预置;目标支持的预置事件有2个:jg_app_show(应用切换到前台)、jg_app_hide(应用切换到后台)。 + * 代码示例:{"options": {"target_event": ["jg_app_show"]}} + */ + @JsonProperty("target_event") @JsonInclude(JsonInclude.Include.NON_NULL) - private Map geofence; + private List targetEvent; /** * 测试消息标识,指定鸿蒙平台通知和自定义消息推送配置,优先级大于hmos通知体内的test_message字段 + * false:正常消息(默认值) + * true:测试消息 */ @JsonProperty("test_message") @JsonInclude(JsonInclude.Include.NON_NULL) - private Boolean testMessage; + private Boolean isTest; /** * 华为回执ID,指定鸿蒙平台通知和自定义消息推送配置,优先级大于hmos通知体内的receipt_id字段 @@ -74,12 +107,35 @@ public class Options { @JsonInclude(JsonInclude.Include.NON_NULL) private String receiptId; - @Data - @JsonIgnoreProperties(ignoreUnknown = true) - public static class PortalExtra { - @JsonProperty("task") - @JsonInclude(JsonInclude.Include.NON_NULL) - private String task; - } + /** + * true-使用亮屏推送,false-不使用亮屏推送,默认值false。 + * 此功能为增值付费服务,需要额外申请权限。 + * 当使用亮屏推送时,建议同时设置need_backup=true。 + * 此功能仅支持单纯通知消息,不支持自定义消息或者通知+自定义消息推送,否则请求会返回 code 码 1035。 + * 此功能不支持定速推送,否则请求会返回 code 码 1035。 + * 亮屏推送支持的时间范围是每天 7:00 - 22:00 + * 亮屏推送对于Android厂商用户的下发策略固定为在线走极光,离线走厂商。 + */ + @JsonProperty("active_push") + @JsonInclude(JsonInclude.Include.NON_NULL) + private Boolean activePush; + /** + * true-使用亮屏兜底策略,false-不使用亮屏兜底策略,默认值false。 + * 若此字段指定为true,则active_push字段值必须为true。 + * 是否使用兜底策略主要是确认离线消息到期后的处理逻辑。 + * 当使用兜底策略下发时:如果是厂商用户(离线消息到期后 0-5 分钟之内通过厂商通道下发),如果是非厂商用户(离线消息到期后,如果用户是在线状态则直接下发;如果用户离线则丢弃)。 + * 例如上午 8 点推送此条消息,设置了离线时间 2 小时。在 8:00 - 10:00 内,设备亮屏则会触发消息下发。剩余未发送的用户,在到达10:00后,0-5 分钟之内剩余消息走厂商通道下发。 + * 当不使用兜底策略下发时:离线消息到期后未下发的直接丢弃,不区分是否厂商用户。 + */ + @JsonProperty("need_backup") + @JsonInclude(JsonInclude.Include.NON_NULL) + private Boolean needBackup; + + /** + * 需先通过极光 WebPortal 创建计划标识值,创建步骤参考推送计划文档:https://docs.jiguang.cn/jpush/console/config_manage/push_plan + */ + @JsonProperty("business_operation_code") + @JsonInclude(JsonInclude.Include.NON_NULL) + private String business_operation_code; } diff --git a/pom.xml b/pom.xml index 4e73e9d..84dacc3 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ io.github.jpush jiguang-sdk-java - 5.1.11 + 5.1.12 pom Jiguang SDK For Rest Api