Donut 推送插件配置使用
使用推送插件前,如果需要使用离线推送,首先要完成 Android 和 iOS 推送服务的厂商配置,点击后续动作和应用内指定界面使用默认配置即可;如果只需要使用在线推送则无需配置厂商通道。
Android 端配置
配置插件
- 在可视化界面添加插件,填写插件 ID 和版本号,勾选启用此插件
插件 ID 为:wx369499c8a9c4c19e
当前版本号为:8.1.107
- 设置 Donut 多端 SDK for Android 版本
推送插件需要在主进程运行。所需的 Donut 多端 SDK for Android 最低版本为 1.3.13,推荐使用最新的 SDK。
厂商配置
- 配置 manifestPlaceholders
Push 插件集成了 vivo、HONOR 推送,需要配置 manifestPlaceholders。
选中 project.miniapp.json 文件,点击右上角按钮转为 json 格式的配置文件。然后在 mini-android 节点下新增配置,填写对应的 manifestPlaceholders:
"manifestPlaceholders": {
"VIVO_APPKEY": "***",
"VIVO_APPID": "***",
"HONOR_APPID": "***"
}
如不使用 vivo 和 HONOR 推送,也不能删除此处配置,否则会导致构建失败。
使用时将 *** 替换为自己的 APPKEY 和 APPID。
HONOR_APPID、VIVO_APPKEY 和 VIVO_APPID 可从推送控制台获取。
HONOR_APPID 为:
VIVO_APPKEY 和 VIVO_APPID 分别为:
- 构建应用时依赖的 Gradle 插件配置:
集成 HUAWEI、HONOR、FCM 推送时要依赖各自的 Gradle 插件。
在工程目录新增 Gradle 插件配置文件push.config.json,跟 project.miniapp.json 文件同文件夹。
在插件配置文件中填入 push.config.json
push.config.json 配置文件如下,可根据实际情况增加/删除 Gradle 插件。例如不需要 FCM,可以删去
project -> dependencies -> com.google.gms:google-services:4.3.15 和 app -> plugins -> com.google.gms.google-services
{
"project": {
"dependencies": [
"com.huawei.agconnect:agcp:1.6.0.300",
"com.google.gms:google-services:4.3.15",
"com.hihonor.mcs:asplugin:2.0.1.300"
]
},
"app": {
"plugins": [
"com.huawei.agconnect",
"com.hihonor.mcs.asplugin",
"com.google.gms.google-services"
]
}
}
- 原生应用资源文件配置
可参考 Android 配置原生资源
推送需要的原生应用资源分为两类:
- 推送服务运行时需要从配置文件读取 appid、appkey、businessID 等信息,需要把 相应的 timpush-configs.json 文件放到 assets 文件夹打包到 apk 中;
timpush-configs.json 文件可以从推送控制台直接下载:
- HUAWEI、HONOR、FCM 的 Gradle 插件在构建时,需要读取各自的配置文件,就要把相应的配置文件放在 app 目录下 。
各厂商的配置文件需要分别去厂商的推送控制台下载。
新建目录和文件结构如下:(可参考miniapp.zip)
然后在工程中配置资源文件:
iOS 端配置
厂商配置
请先按照 donut app生成iOS应用需要的 P12证书+描述文件,后续配置时会使用到生成 iOS 证书和 Provisioning Profile 生成应用的 p12 证书 + 描述文件(这里特别注意,正常来说到这个阶段,你APP里已经有第一个描述文件了,所以执行这个文档步骤的时候,将已有bundleID作为前缀,拼接.pushservice,用拼接后的字符串作为新的bundleID去生成impushservice.mobileprovision描述文件。如果你是从零开始的项目,完全没有过描述文件的,那就把这个步骤走两遍生成对应文件。)Apple Developer 平台 Bundle ID 配置指引 配置时请勾选 Push Notification 、 App Group 等能力 以及 Donut 建议的Access WiFi Information、Associated Domains、Hotspot、Wireless Accessory Configuration 等能力多端应用 Bundle ID 配置 移动应用与多端应用绑定&生成应用的描述文件需要准备的文件如下图: 当您进行完所有的配置后,点击 donut 运行程序时会有提示框引导您使用以下文件。
tuikitdemo_dev.mobileprovision 是您 App 的描述文件
同时在 donut 控制台里绑定移动应用的BundleID 。Donut 开发平台
impushservice.mobileprovision 是您的NSE推送插件描述文件,需要对应project.miniapp.json 的 NSE 文件中对 pushservice 的配置
配置插件
- 在可视化界面添加插件,填写插件 ID 和版本号,勾选启用此插件
插件ID:wx369499c8a9c4c19e 版本号:8.1.103
2.在project.miniapp.json 文件中对 pushservice 配置:
内容格式为:project.miniapp.json
"mini-plugin": {
"ios": [
{
"open": true,
"pluginId": "wx369499c8a9c4c19e",
"pluginVersion": "8.1.103",
"isFromLocal": false,
"loadWhenStart": true,
"appexProfiles": {
"NSE": {
"enable": true,
"bundleID": "com.tencent.xxxxxxx.pushservice",
"profilePath": "impushservice.mobileprovision",
"distributeProfilePath": "impushservice.mobileprovision"
}
},
"resourcePath": "wx369499c8a9c4c19e.json"
}
]
}
3.wx369499c8a9c4c19e.json 文件中的配置:
wx369499c8a9c4c19e.json 的内容格式为 wx369499c8a9c4c19e.json
businessID为必传项,请先按照文档上传证书到推送控制台,之后控制台会为您分配此ID。即时通信 IM iOS-推送服务-文档中心-腾讯云TIMPushAppGroupID为可选项,当您需要使用 TPush 组件统计推送抵达率时,推荐您配置,之后按照快速接入进行使用。即时通信 IM iOS-推送服务-文档中心-腾讯云
{
"TIMPushAppGroupID": "group.com.tencent.xxxxxxxx.xa",
"businessID":"11111"
}
- 设置 Donut 多端 SDK for iOS 版本
从 iOS SDK >= 1.2.5 开始,支持在 JS 侧监听来自 推送插件的点击事件。所需的 Donut 最低版本为 1.2.5,推荐使用最新的 SDK。
推送插件使用
- 加载插件
调用 wx.miniapp.loadNativePlugin 方法加载插件:
App({
onLaunch: function () {
wx.miniapp.loadNativePlugin({
pluginId: "wx369499c8a9c4c19e",
success: (plugin) => {
console.log('load plugin success ', plugin)
},
fail: (e) => {
console.log('load plugin fail', e)
}
})
}
})
- 注册事件监听
加载插件成功之后,先注册插件事件监听;后调用插件的 init 方法。用户点击通知栏后,会发送事件,可根据事件内容进行页面跳转。(FCM 推送不支持点击事件通知)
const listener = (param) => {
console.log('onMiniPluginEvent', JSON.stringify(param))
}
App({
onLaunch: function () {
wx.miniapp.loadNativePlugin({
pluginId: "wx369499c8a9c4c19e",
success: (plugin) => {
console.log('load plugin success ', plugin)
plugin.onMiniPluginEvent(listener)
plugin.init() // iOS不需要执行这个方法
},
fail: (e) => {
console.log('load plugin fail', e)
}
})
}
})
事件监听数据:
目前只支持点击通知栏事件:
{"data":{"entity":{"action":1,"chatType":1,"content":"哈哈","faceUrl":"https://im.sdk.qcloud.com/download/tuikit-resource/avatar/avatar_26.png","nickname":"Bernie","sendTime":0,"sender":"xlmz","version":1},"timPushFeatures":{"fcmNotificationType":0,"fcmPushType":0}}}
- 设置 registrationID (可选,非必要,默认会分配)
registrationID是设备的推送标识 ID,如果您不主动设置它,在调用registerPush方法时系统会为您分配一个默认的标识 ID。请注意,如果您卸载并重新安装应用,标识ID 会发生改变。
如果您希望将标识 ID 与您应用中的特定账号对应起来,您可以主动设置一个标识ID。请确保在调用 registerPush 方法之前设置好标识 ID。
例如,您可以将标识 ID 设置为"99618",通过 restApi 即可向标识 ID 为 “99618” 的设备发送推送。
plugin.setRegistrationID({ registrationID: "99618"}, (ret)=>{
console.log("setRegistrationID" + ret.errCode + " " + ret.errMsg)
})
回调数据:
成功:{"errCode":0,"errMsg":"success"}
失败:{"errCode":errorCode,"errMsg":"errorMsg"}
- 注册 Push
插件加载成功之后,注册推送,注册成功后可接收推送,回调中带有此次注册的推送 token
sdkAppID 和 appKey 可以在推送控制台获取:
plugin.registerPush({ sdkAppID: xxx , appKey: "xxx" }, (ret)=>{
console.log("registerPush " + ret.errCode + " " + ret.errMsg)
console.log("registerPush token = " + ret.data.token)
})
回调数据:
成功:{"errCode":0,"errMsg":"success","data":{"token":"OPPO_CN_8ed8e53d92454b29b7ef076d9d4e9834"}}
失败:{"errCode":errorCode,"errMsg":"errorMsg"}
- 获取 registrationID
在注册 Push 成功之后,可以获取到 registrationID
plugin.getRegistrationID({}, (ret)=>{
console.log("getRegistrationID " + ret.errCode + " " + ret.errMsg + " " + ret.data.registrationID)
})
回调数据:
成功: {"errCode":0,"errMsg":"success","data":{"registrationID":"99618"}}
失败:{"errCode":errorCode,"errMsg":"errorMsg"}
- 反注册 Push
plugin.unRegisterPush({}, (ret)=>{
console.log("unRegister " + ret.errCode + " " + ret.errMsg)
})
回调数据:
成功:{"errCode":0,"errMsg":"success"}
失败:{"errCode":errorCode,"errMsg":"errorMsg"}
推送测试
完成上述配置后,要向设备下发推送进行测试。有两个步骤:
- 获取 registrationID
a. 加载插件后,直接调用 registerPush 方法注册推送,注册成功后,可通过 getRegistrationID 方法获取到 registrationID。
b. 也可以先通过 setRegistrationID 方法设置自定义的 registrationID,再进行注册。
- 用 restApi 发送推送消息
调用 restApi 进行单发推送 或 全员推送 ,成功后,就会收到推送。
在单发推送时,restApi 请求的 To_Account 字段填入上一步获取到的 registrationID。
例如,registrationID 是 "99618",则 restApi 请求 URL 为:
https://console.tim.qq.com/v4/tpush/batch?usersig={admin 用户的userSig}&identifier=admin&sdkappid={您的 sdkAppID}&random=99999999&contenttype=json
(使用时 URL 中大括号及大括号内的内容替换为实际值)
请求包为:
{
"From_Account": "admin",
"To_Account": ["99618"], // 数组大小范围在[1,500]之间
"MsgRandom": 3674128,
"OfflinePushInfo": {
"PushFlag": 0, // 0表示进行离线推送,1表示不进行离线推送
"Title": "离线推送标题",
"Desc": "离线推送内容",
"Ext":"点击事件通知数据" // 可选
}
}
常见问题
- 插件配置之后,调用 wx.miniapp.loadNativePlugin 方法,报错:load plugin fail
首先请检查配置的插件 ID 前后有没有空格,再检查版本号是否正确。
- 更新了插件,但是构建时还是用的原来的基座 apk,插件的修改没生效
清除缓存没用,需要修改 project.miniapp.json 文件才能重新构建远程基座 apk,改一下应用的 version code 再进行构建即可。
- Android targetSdkVersion 设置为 ≥33 后接收不到推送
推送插件暂时不支持申请 POST_NOTIFICATIONS 权限。请将 targetSdkVersion 设置为 <33 或者在应用中自行申请通知权限。
原文:企业微信文档
仅是为了记录学习之用,如有侵权,请联系删除。