推送插件,支持苹果、华为、小米、VIVO、OPPO、魅族、极光推送。
iOS注意事项:如果项目中有用到融云聊天插件,请将融云聊天插件更新到最新版本,否则可能无法正常使用推送服务。
首先在各个推送平台上注册应用,然后获取所需参数。开放平台地址及插件所需参数如下:
平台 | 地址 | 需要填写的参数 |
---|---|---|
小米 | https://dev.mi.com/console/appservice/push.html | XIAOMI_APP_ID、XIAOMI_APP_KEY |
OPPO | https://push.oppo.com/ | OPPO_APP_KEY、OPPO_APP_SECRET |
VIVO | https://dev.vivo.com.cn/openAbility/pushNews | VIVO_APP_ID、VIVO_APP_KEY |
魅族 | http://push.meizu.com/ | MEIZU_APP_ID、MEIZU_APP_KEY |
极光 | https://www.jiguang.cn/ | JPUSH_APPKEY |
为提高getBindInfo
返回速度,若未配置对应产商,请填写unknown
,勿填错误值。如果填写非unknown
的错误值,原生将会使用错误值去尝试获取token,将会触发重试机制,导致getBindInfo
15s后才会有结果返回。
申请华为推送服务时需要SHA256证书指纹
,因APPCloud平台提供了默认的打包证书,所以可使用以下指纹。
3C:DE:B9:39:70:BF:1E:45:79:C3:DC:37:89:2D:4F:68:C5:45:09:37:CA:D8:38:66:A7:E4:46:E1:E1:37:8F:3C
D7:3E:32:11:B9:FF:16:76:33:B2:8A:37:46:48:92:9C:D9:1E:9B:B5:AA:72:CD:E6:A2:9A:BB:22:25:50:BD:95
MIUI上的小米推送,受通知过滤的影响。如需用户感知所有通知,请参考MIUI通知过滤的开发者说明。
VIVO手机安装APP后通知默认处于关闭状态,需要用户手动开启,开启步骤可参考VIVO通知开启步骤。
如果要注册通知监听,则必须在程序启动时deviceready
事件中进行注册。
适配small icon
,格式和样式要求:
Alpha
透明通道的PNG
图片。透明
的。白色
。padding
。72*72
官方示例如下:
small icon
制作好后,添加方式🈶️两种:
(1). 存放到 www/push
目录,文件名为 small_icon.png
;
(2). 通过 HOOK
添加,操作步骤点击查看
集成华为推送须知,从1.2.4
版本开始,华为推送升级为官方的v2
版本,配置方式较1.2.4
之前的版本有所不同,详情点击查看。
PushNotification.getBindInfo(success, fail)
参数 | 类型 | 说明 |
---|---|---|
succes(bindInfo) | function | 成功回调,bindInfo格式见下表 |
fail(error) | function | 失败回调,格式为:{'errCode':-1,'errMsg':''} |
华为参考文档、 小米参考文档、 魅族参考文档、 VIVO参考文档、 OPPO参考文档
bindInfo格式
参数 | 类型 | 说明 |
---|---|---|
applicationId | string | 应用ID |
manufacturer | string | 推送厂商名称,如xiaomi ,meizu ,apple 等 |
pushChannel | map | 推送通道信息,格式为{"通道名": "deviceToken"}
|
注意事项
1.3.2(含)
版本之后manufacturer
由设备厂商
变更为推送厂商
,可通过pushChannel[${manufacturer}]
读取厂商token1.3.2(含)
版本之后备用通道由xiaomi
变更为jiguang
,可通过pushChannel['jiguang']
读取备用通道token// 示例
PushNotification.getBindInfo(
function success(result) {
console.log("success", result);
},
function fail(error) {
console.log("error", error);
}
);
// 成功回调示例
{
"applicationId": "com.mysoft.androidtest",
"manufacturer": "huawei",
"pushChannel": {
"jiguang": "....",
"huawei": "...."
}
}
PushNotification.addEventListener(callback)
参数 | 类型 | 说明 |
---|---|---|
callback | object | 通知状态回调,具体释义如下 |
仅支持iOS
仅支持安卓极光推送
// 示例
PushNotification.addEventListener({
onTouched: function(data) {
console.log("onTouched", data);
},
onReceived: function(data) {
console.log("onReceived", data);
},
onPassThrough: function(data) {
console.log("onPassThrough", data);
},
onError: function(error) {
console.log("onError", error);
}
});
PushNotification.clearPushBadgeNumber()
PushNotification.setPushBadgeNumber(count)
自定义铃声支持 mp3,wav
iOS 自定义铃声文件需预下载至指定目录下 cordova.file.applicationStorageDirectory + 'Library/Sounds/';
Android 自定义铃声文件与config.json配置文件,添加方式🈶️两种:
(1). 铃声文件和config.json提前放置在 www/voice
目录下;
实际填写的内容 点击查看
//config.json
[
{
"channelName": "mpush",
"channelId": "mpush",
"channelDescription": "mpush描述",
"fileName": "mpush"//配置fileName时不用加扩展名
},
{
"channelName": "test",
"channelId": "test",
"channelDescription": "test描述",
"fileName": "test"
}
]
(2). 通过 HOOK
添加,操作步骤 点击查看
OPPO 小米需在厂商的开发者后台配置channel;
华为必须申请重要推送权限;
Android 8 以上 OPPO 小米 华为 支持系统推送自定义铃声,不支持的机型可使用小米push;
不支持系统推送的机型可使用小米push透传,需要应用保活;
自定义铃声需用户手动开启声音设置方可使用;
iOS 声音播放时长与通知横幅展示时长相关,横幅消失及播放停止。
如通知类型被归为 ‘营销通知’ 需联系厂商解除。
// ios 服务端示例
{
"aps": {
"content-available": 1,
"alert": {
"title": "Push Notification",
"body": "Notification from APNs Provider."
},
"badge": 9,
"sound": "default"//自定义铃声名称
},
"presentNotifiInForeground":1//该key存在,前台不展示横幅与声音;key不存在,展示横幅与声音;与value值无关
}
// xiaomi 服务端示例
{
"pass_through": 1,// 透传类型;0:在系统通知栏进行展示;1:消息推送至app中(不在系统通知栏展示);
"extra.channel_id": "mpush",// mpush为厂商的开发者后台配置channel
"extra.sound_uri": "android.resource://com.mysoft.engineertool/raw/mpush", //mpush为文件名称
"payload": "{\"fileName\":\"mpush\"}"//mpush为文件名称,使用透传时必传
}
// huawei 服务端示例
{
"notification": {
"sound": "raw/mpush",//mpush为文件名称
"channel_id": "mpush",// mpush为厂商的开发者后台配置channel
"importance": "HIGH"
}
}
// OPPO 服务端示例
{
"channel_id": "mpush",// mpush为厂商的开发者后台配置channel
}
注意:仅支持iOS和华为手机
进入华为控制台: https://developer.huawei.com/consumer/cn/service/josp/agc/index.html
点击我的项目
选择目标项目(此处以移动销售为例)
检查SHA256证书指纹
检查改地方是填写了注意事项里3里的指纹,若没有,请先添加。
下载agconnect-services.json
将下载好的文件保存,添加方式🈶️两种:
(1). 存放到 www/push
目录,文件名为 agconnect-services.json
;
(2). 通过 HOOK
添加,操作步骤 点击查看
hook下载
链接:add_small_icon.js hook上传
:Android
、before_prepare
、文件点击上传HOOK
add_small_icon.js,并点击添加按钮。
hook编辑
:add_small_icon
.js的编辑,将图标链接修改成小图标链接,如下图红框位置为替换位置
hook下载
链接:add_huawei_agconnect_services.jshook上传
:Android
、before_prepare
、文件点击上传HOOK
add_huawei_agconnect_services.js,并点击添加按钮。
hook编辑
:add_huawei_agconnect_services
.js的编辑
将 在华为开发者后台下载的agconnect-services.json文件中的内容复制到,如下图红框位置
hook下载
链接:add_custom_ringtone.jshook上传
:Android
、before_prepare
、文件点击上传HOOK
add_custom_ringtone.js,并点击添加按钮。
hook编辑
:add_custom_ringtone
.js的编辑使用极光推送,JPUSH_APPKEY填入申请的值,华为、小米、vivo、oppo、魅族的配置值填写`unknown`。
1、按对应渠道商推送,例如华为手机请走华为渠道。
2、默认通道作为补充,对上传的devicetoken进行判断,若如对应厂商通道的deviceToken未取到,则推给默认渠道。
getBindInfo是一个需要等待对应厂商以及默认厂商通道返回deviceToken的接口。为了确保数据的可靠性,我们设置了一个15秒的失败重试机制,原生将每隔1s尝试获取对应厂商的deviceToken,总共尝试15次。
不一定能获取到deviceToken,特别是同意隐私政策后初次调用,成功率不是很高。为了通过上架审核,该插件不会在同意隐私政策前进行初始化,导致第一次调用的时候,部分厂商获取deviceToken耗时较久,测试数据显示小米初始化到获取deviceToken有时能耗时2分钟多,所以尝试的15s是无法获取到的。
1.同意隐私政策后,调用PushNotification.getBindInfo(success, fail)方法,当做初始化,不做业务处理,其目的是为了给其初始化去获取token时间。
2.对于应用程序的杀死和重启,建议在重新启动时、后台回到前台时调用getBindInfo方法,以获取deviceToken,若值出现变化,将其值刷新到后端。
3.对于getBindInfo获取的内容进行判断,如果没有获取到后台需要推送对应渠道的deviceToken,请进行重试获取。
一定注意getBindInfo是一个耗时方法,为了避免在应用程序开发过程中出现用户卡顿问题。请避免用户点击了某个按钮,需要等待getBindInfo后才进行跳转。比如登录时,需等待getBindInfo方法返回结果后才进行登录接口请求,从而影响程序的流畅性。
小米、oppo、vivo的deviceToken对应官方文档中的regID,华为对应官方文档的Token。
小米: 1、app卸载重装或者清除数据后重新注册,这种情况下会生成一个新的deviceToken,而老的deviceToken会失效;2、在MIUI上,app卸载时,如果能成功上报,则deviceToken会被判定失效;3、设备超过3个月没有和小米push服务器建立长连接;
vivo:手机14天不联网或应用卸载会触发解订阅与设备解除订阅关系,deviceToken失效。解订阅再重新订阅会重新启用这个deviceToken,异常情况下会生成新的regId.
华为:清除应用数据(例如卸载应用并重新安装、设备恢复出厂设置等)后重新打开应用。
oppo:该ID在用户设备刷机、卸载应用、设备30天之内未有联网行为时失效。
1.打开允许通知; 2.过滤规则设为重要消息;
Vivo不支持自定义渠道,不支持设置channelid;
1、点击小米官网 登录后点击如图所示【管理中心】
2、接着点击【应用服务】栏下的【消息推送】
3、点击对应需要配置的应用栏的【创建推送】
5、点击【消息分类管理】下的【chanel列表】 接着点【新建】
6、创建内容如图示例,注意此处红框自定义铃声的填写,此处无需写文件后缀名,只写文件名称。
7、创建成功,通过官方审核后,会多了一个channel列表,如下图所示
8、根据6、7的信息我们填写需要前端配置的信息,示例如下,如何配置到项目里详情 点击查看
{
"channelName": "新工单", //对应图7的【通知类别名称】
"channelId": "100655", //对应图7的【通知类别id,小米生成的
"channelDescription": "新工单提醒",//对应图7的【通知类别描述】
"fileName": "new_task"//对应图8自定义铃声 (sound_url) 红框 raw/后的内容,注意无需文件后缀名
}
1、点击[oppo开放平台]https://open.oppomobile.com/ 登录
2、点击右上角【管理中心】
3、下拉点击开发服务栏下的【OPPO PUSH】
4、进入应用列表后,切换成需要配置的应用
5、点击左侧【配置管理】栏下的【新建通道】,通道配置
通道适配官网相关链接
目前数据处理位置为中国区的应用不支持自定义通知渠道推送服务。华为创建channel通道详细步骤