push
是指从服务器主动给手机端发送消息。
- App平台
uni-app
提供了 uni push 服务,这是一个包括客户端和服务器的统一服务,整合了苹果APNs、华为、小米、OPPO、魅族等多家厂商的推送和个推的独立推送,不管客户端还是服务器,一套代码多端推送。因本文档内容有限,单独写了一篇详细的 uni push 业务介绍,请仔细阅读 https://ask.dcloud.net.cn/article/35622。
uni push 推送的开发API文档:https://www.html5plus.org/doc/zh_cn/push.html
- 小程序平台小程序平台的类似概念叫做
模板消息
。
以微信为例,开发者的服务器发送消息给微信的服务器,微信服务器会发送一条模板消息,折叠到微信的消息列表中的服务通知里。它属于后台开发,和手机端无关。
微信模板消息文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/template-message.html
支付宝模板消息文档:https://docs.alipay.com/mini/introduce/message
百度模板消息文档:https://smartprogram.baidu.com/docs/develop/third/api/
注意:以下API暂停维护,仅为向下兼容而保留。App端 uni push 的API请使用 https://www.html5plus.org/doc/zh_cn/push.html
uni.subscribePush(OBJECT)
开启推送
平台差异说明:
- 5+AppOBJECT 参数说明
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
provider | String | 是 | 分享推送提供商,通过 uni.getProvider 获取 |
success | Function | 否 | 接口调用成功的回调 |
fail | Function | 否 | 接口调用失败的回调函数 |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
示例
uni.getProvider({
service: 'push',
success: function (res) {
console.log(res.provider)
// 个推的名称为 igexin
if (~res.provider.indexOf('igexin')) {
uni.subscribePush({
provider: 'igexin',
success: function (res) {
console.log('success:' + JSON.stringify(res));
}
});
}
}
});
uni.unsubscribePush(OBJECT)
关闭推送。
平台差异说明
- 5+AppOBJECT 参数说明
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
provider | String | 是 | 分享推送提供商,通过 uni.getProvider 获取 |
success | Function | 否 | 接口调用成功的回调 |
fail | Function | 否 | 接口调用失败的回调函数 |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
示例
uni.unsubscribePush({
provider: 'igexin',
success: function (res) {
console.log('success:' + JSON.stringify(res));
}
});
uni.onPush(OBJECT)
监听透传数据。
平台差异说明
- 5+AppOBJECT 参数说明
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
provider | String | 是 | 分享推送提供商,通过 uni.getProvider 获取 |
callback | Function | 否 | 接收到透传数据回调,回调参数(Object):messageId(消息id)、data(消息内容) |
success | Function | 否 | 接口调用成功的回调 |
fail | Function | 否 | 接口调用失败的回调函数 |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
示例
uni.onPush({
provider: 'igexin',
success: function () {
console.log('监听透传成功');
},
callback: function (data) {
console.log("接收到透传数据:" + JSON.stringify(data));
}
});
uni.offPush(OBJECT)
移除监听透传数据。
平台差异说明
- 5+AppOBJECT 参数说明
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
provider | String | 是 | 分享推送提供商,通过uni.getProvider获取 |
success | Function | 否 | 接口调用成功的回调 |
fail | Function | 否 | 接口调用失败的回调函数 |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
示例
uni.offPush({
provider: 'igexin',
success: function () {
console.log('取消监听透传成功');
},
fail: function () {
console.log('fail');
}
});
FAQ
Q:为什么真机测试推送可以用,打包后就失败呢?A:HBuilder 真机运行环境下,第三方支付 SDK 的配置信息是 HBuilder 这个应用。这个配置信息是不能动态修改的,因此涉及到第三方 SDK 的配置,需要打包自定义基座进行测试。真机运行自定义基座包使用说明
Q:用到了推送功能,在打包原生应用时,需要注意什么呢?A:如果是云打包,首先勾选权限配置,manifest.json->App 模块权限配置->Push。然后,manifest.json->App SDK 配置->推送,按照提示申请相应平台的信息,并填写。最后,勾选并填写完成后再进行打包即可。如果是离线打包,自行在原生工程中配置SDK,并确保选择了推送模块。
发现错误?想参与编辑?在 GitHub 上编辑此页面!