场景
项目要求在App内显示推送弹框消息,但极光接入了厂商通道,在App内无法做弹框,在App内弹框只能通过极光通道,这里就要通过通知下发策略来控制了。
官方文档
推送配置选择
https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/#options
配置用法
需要在option中配置third_party_channel
参数,可选的参数
可选的配置参数如下:
"third_party_channel":{
"xiaomi":{
"distribution":"jpush", // 表示纯小米用户通知栏消息下发逻辑,全部取值:jpush、ospush、secondary_push
"channel_id":"*******", //可选,2020/06 新增,由小米提供给到开发者,开发者通过此处透传;
//如果传递了此字段,也传递了 notification-android-channel_id 字段,则针对小米通道下发时,以此字段为准;
//如果此字段未传递,则以 notification-android-channel_id 字段为准。
//当 distribution 为 jpush 时,该参数实际无效
"large_icon":"jgmedia-2-14b23451-0001-41ce-89d9-987b465122da", //可选,支持极光的media_id及小米厂商的大图标id,必须配合小米大文本或者是大图片使用,否则无效
"small_icon_uri":"jgmedia-3-14b23451-0001-41ce-89d9-987b465122da", //可选,支持极光的media_id及小米厂商的小图标id
"small_icon_color":"#ABCDEF", //可选,不填充默认灰色
"big_text":"testbigtext", //可选,最多支持128个字符,配合小米style使用
"style":1 //可选,默认为0普通模式,bigText=1,bigPicture=3
"distribution_fcm":"fcm" // 可选,2020/09/15 新增,表示小米+fcm共存时下发逻辑,此处表示 fcm + 小米组合用户,消息走fcm下发
// 全部取值:jpush、fcm、pns、secondary_fcm_push(优先极光然后fcm)、secondary_pns_push(优先极光然后小米)
"distribution_customize":"first_ospush" // 可选,表示推送自定义消息优先走厂商通道下发,无效走极光通道下发
},
"huawei":{
"distribution":"secondary_push", // 表示纯华为用户通知栏消息下发逻辑,全部取值:jpush、ospush、secondary_push
"distribution_fcm":"jpush", // 可选,2020/09/15 新增,表示华为+fcm共存时下发逻辑,此处表示 fcm+华为组合用户,消息走极光下发
// 全部取值:jpush、fcm、pns、secondary_fcm_push(优先极光然后fcm)、secondary_pns_push(优先极光然后华为)
"importance":"HIGH", //可选,2020/09/21 新增,对应华为的 importance 字段,值为 String 类型,对应值分别是:“LOW”(一般消息)、“NORMAL”(重要消息)、“HIGH”(非常重要消息),不填充默认为"NORMAL"
"large_icon":"jgmedia-2-14b23451-0001-41ce-89d9-987b465122da", //可选,支持极光的media_id及网络https路径
"small_icon_uri":"jgmedia-3-14b23451-0001-41ce-89d9-987b465122da", //可选,支持极光的media_id及华为厂商本地路径
"inbox": JSONObject, //可选,配合华为style使用
"style":2, //可选,默认为0普通模式,bigText=1,Inbox=2
"only_use_vendor_style":true //只使用自身通道设置的样式,不使用android里面设置大图标/小图标/大文本等样式
},
"meizu":{
"distribution":"jpush", // 表示纯魅族用户通知栏消息下发逻辑,全部取值:jpush、ospush、secondary_push
"distribution_fcm":"pns" // 可选,2020/09/15 新增,表示魅族+fcm共存时下发逻辑,此处表示 fcm+魅族组合用户,消息走魅族下发
// 全部取值:jpush、fcm、pns、secondary_fcm_push(优先极光然后fcm)、secondary_pns_push(优先极光然后魅族)
},
"fcm":{ // 这个参数不支持 distribution_fcm 字段
"distribution":"jpush" // 表示纯 fcm 用户通知栏消息下发逻辑,全部取值:jpush、ospush、secondary_push
},
"oppo":{
"distribution":"ospush", // 表示纯 oppo 用户通知栏消息下发逻辑,全部取值:jpush、ospush、secondary_push
"channel_id":"*******", //可选,2020/06 新增,由开发者通自行去OPPO官方申请,申请通过,开发者通过过此处透传;
//如果传递了此字段,也传递了 notification-android-channel_id 字段,则针对 OPPO 通道下发时,以此字段为准;
//如果此字段未传递,则以 notification-android-channel_id 字段为准。
//当 distribution 为 jpush 时,该参数实际无效;
//当 distribution 为 secondary_push 时,限制策略走极光通道和走厂商通道逻辑一致:厂商不限制,极光也不限制;开发者如果恶意使用此字段,被转发到厂商的请求如果因配额限制导致推送无法下发问题,后台由开发者自行承担。
"distribution_fcm":"secondary_fcm_push", // 可选,2020/09/15 新增,表示oppo+fcm共存时下发逻辑,此处表示 fcm+oppo 组合用户,消息优先走极光,然后走fcm下发
// 全部取值:jpush、fcm、pns、secondary_fcm_push(优先极光然后fcm)、secondary_pns_push(优先极光然后oppo)
"large_icon":"jgmedia-2-14b23451-0001-41ce-89d9-987b465122da", //可选,支持极光的media_id及oppo厂商的大图标id
"big_pic_path":"jgmedia-1-14b23451-0001-41ce-89d9-987b465122da", //可选,配合oppo的style使用
"style":1 //可选,默认为0普通模式,bigText=1,bigPicture=3
},
"vivo":{
"distribution":"jpush", // 表示纯 vivo 用户通知栏消息下发逻辑,全部取值:jpush、ospush、secondary_push
"classification": 0, //可选,int 类型,2020/06 新增,和vivo官方字段含义一致 0 代表运营消息,1 代表系统消息,不填vivo官方默认为0
//当 distribution 为 jpush 时,该参数实际无效;
//当 distribution 为 secondary_push 时,限制策略走极光通道和走厂商通道逻辑一致:厂商不限制,极光也不限制;开发者如果恶意使用此字段,被转发到厂商的请求如果因配额限制导致推送无法下发问题,后台由开发者自行承担。
"distribution_fcm":"secondary_pns_push", // 可选,2020/09/15 新增,表示vivo+fcm共存时下发逻辑,此处表示 fcm+vivo 组合用户,消息优先走极光,然后走vivo下发
// 全部取值:jpush、fcm、pns、secondary_fcm_push(优先极光然后fcm)、secondary_pns_push(优先极光然后vivo)
"push_mode":0 //可选,2020/09/21 新增,对应 vivo 的 pushMode 字段,值为int 类型,值分别是:“0”表示正式推送;“1”表示测试推送,不填默认为0
}
}
代码实现
代码总只需要配置
distribution
即可。
{
"huawei": {
"distribution_fcm": "secondary_pns_push"
},
"oppo": {
"distribution_fcm": "secondary_pns_push"
},
"vivo": {
"distribution_fcm": "secondary_pns_push"
},
"xiaomi": {
"distribution_fcm": "secondary_pns_push"
}
}
我们在极光配置了这四家厂商通道,不要配置多余的参数,只需要配置开通厂商通道的参数,不然推送会报错。
后台代码
JsonObject object = new JsonObject();
object.addProperty("distribution","secondary_push");
Map<String, JsonObject> channelV2 = new HashMap<>();
channelV2.put("huawei",object);
channelV2.put("oppo",object);
channelV2.put("vivo",object);
channelV2.put("xiaomi",object);
// 选项配置
Options options = Options.newBuilder()
.setApnsProduction(true)
.setSendno(1)
.setTimeToLive(86400)
.setThirdPartyChannelV2(channelV2)
.build();