1. 为什么需要uni push2.0消息推送是移动应用最基础也最重要的功能之一。想象一下你正在开发一个外卖APP用户下单后需要实时收到订单状态变更通知或者是一个社交APP用户需要及时收到好友消息提醒。这些场景都离不开稳定可靠的消息推送服务。uni push2.0是DCloud推出的新一代推送服务相比传统方案有几个明显优势全链路支持同时覆盖在线推送用户APP在前台运行和离线推送APP在后台或关闭状态厂商通道集成自动对接华为、小米、OPPO等手机厂商的系统级推送通道大幅提升送达率开发成本低一套代码同时支持iOS和Android平台省去了原生开发的适配工作云函数支持可以直接在uniCloud中编写推送逻辑无需自建服务器我在实际项目中使用过多个推送方案uni push2.0最大的感受就是配置简单、送达率高。特别是在安卓设备上通过厂商通道的离线推送几乎能做到100%送达这对电商类应用来说简直是刚需。2. 前期准备工作2.1 开通uniCloud服务首先需要确保你的项目已经开通uniCloud服务。这里推荐使用阿里云版本稳定性更好。具体操作在HBuilderX中右键项目目录选择创建uniCloud云开发环境选择阿里云作为服务商等待环境初始化完成如果项目已经创建过uniCloud环境可以跳过这一步。我建议新手先在测试项目上练习熟悉流程后再应用到正式项目。2.2 生成推送证书推送证书是保证消息安全送达的关键。iOS和Android的证书生成方式不同Android证书生成访问DCloud官方文档获取SHA256指纹在各大应用市场开发者后台配置签名信息下载各厂商的配置文件iOS证书生成登录Apple开发者账号创建APNs证书导出.p12文件上传到uniPush控制台这里有个常见坑点Android证书需要对应应用签名的SHA256值如果后期修改了签名文件必须重新配置所有厂商通道。我就曾经因为更换签名导致推送失效排查了半天才发现问题。3. uni push2.0详细配置3.1 控制台基础配置登录uni-app开发者中心找到uniPush 2.0配置页面如果没有应用需要先创建新应用为应用添加平台信息iOS和Android需要分别配置上传前面生成的证书文件配置应用包名和Bundle ID特别注意Android平台需要配置各厂商的离线推送参数。以华为为例应用ID在华为开发者后台创建应用时分配应用密钥同上回调地址用于接收推送状态回执配置完成后建议先保存不要立即启用。等所有参数检查无误后再开启推送服务。3.2 厂商通道特殊配置厂商通道是提升安卓推送到达率的关键。各家配置略有不同小米通道需要申请推送权限配置默认通知样式设置消息分类OPPO通道需要单独申请推送权限有每日推送限额必须配置通知图标vivo通道需要上传签名文件配置消息分类设置测试设备实测下来华为和小米的通道稳定性最好OPPO和vivo偶尔会有延迟。建议在代码中对不同厂商做兼容处理。4. 编写推送云函数4.1 创建云函数在uniCloud/cloudfunctions目录下新建云函数右键点击新建云函数勾选uni-cloud-push扩展库输入函数名称如uni-push基础推送代码示例use strict; const uniPush uniCloud.getPushManager({ appId:__UNI__XXXXXX // 替换为你的应用ID }) exports.main async (event, context) { const data JSON.parse(event.body) return await uniPush.sendMessage({ getui_alias: data.alias, // 使用别名推送 title: data.title, content: data.content, force_notification: true, // 强制显示通知 payload: data.payload // 自定义数据 }) }这个示例实现了最基本的推送功能。实际项目中你可能需要添加错误处理逻辑推送频率限制用户标签支持A/B测试功能4.2 部署和调用编写完成后右键云函数选择上传部署在uniCloud控制台找到该函数复制调用URL调用示例uni.request({ url: 你的云函数URL, method: POST, data: { alias: user123, title: 订单通知, content: 您的订单已发货, payload: { orderId: 123456 } }, success(res) { console.log(推送成功, res) } })5. 客户端消息处理5.1 监听推送消息在App.vue的onLaunch中添加消息监听onLaunch() { // #ifdef APP-PLUS const pushMessageCallback (res) { const { data } res if (res.type receive) { // 前台收到消息 console.log(收到推送, data) } else { // 点击通知栏 uni.navigateTo({ url: /pages/order/detail?id${data.payload.orderId} }) } } uni.onPushMessage(pushMessageCallback) // #endif }5.2 安卓通知渠道配置安卓8.0以上需要配置通知渠道// #ifdef APP-ANDROID const plugin uni.requireNativePlugin(DCloud-PushSound) if (plugin) { plugin.setCustomPushChannel({ channelId: order_channel, channelDesc: 订单通知, importance: 3 // 重要程度 }) } // #endif不同重要程度会影响通知的显示方式1最低不发出声音3默认发出声音但不弹出4高弹出通知5最高立即弹出6. 调试与优化技巧6.1 常见问题排查推送不成功时可以按照以下步骤排查检查证书是否过期特别是iOS确认设备token是否有效查看厂商通道配置是否正确检查云函数日志是否有报错测试在线推送和离线推送我常用的调试方法是先在控制台发送测试推送确认基础功能正常后再进行业务集成。6.2 性能优化建议合并推送对同一用户的多个通知合并发送智能调度根据用户活跃时间选择推送时段A/B测试对比不同文案的点击率标签管理建立用户画像实现精准推送频率控制避免过度推送导致用户关闭通知实际项目中推送策略需要根据业务特点不断调整。比如电商APP大促期间可以适当增加推送频率而工具类APP则要保持克制。
从零到一:uni push2.0全链路配置与实战推送指南
1. 为什么需要uni push2.0消息推送是移动应用最基础也最重要的功能之一。想象一下你正在开发一个外卖APP用户下单后需要实时收到订单状态变更通知或者是一个社交APP用户需要及时收到好友消息提醒。这些场景都离不开稳定可靠的消息推送服务。uni push2.0是DCloud推出的新一代推送服务相比传统方案有几个明显优势全链路支持同时覆盖在线推送用户APP在前台运行和离线推送APP在后台或关闭状态厂商通道集成自动对接华为、小米、OPPO等手机厂商的系统级推送通道大幅提升送达率开发成本低一套代码同时支持iOS和Android平台省去了原生开发的适配工作云函数支持可以直接在uniCloud中编写推送逻辑无需自建服务器我在实际项目中使用过多个推送方案uni push2.0最大的感受就是配置简单、送达率高。特别是在安卓设备上通过厂商通道的离线推送几乎能做到100%送达这对电商类应用来说简直是刚需。2. 前期准备工作2.1 开通uniCloud服务首先需要确保你的项目已经开通uniCloud服务。这里推荐使用阿里云版本稳定性更好。具体操作在HBuilderX中右键项目目录选择创建uniCloud云开发环境选择阿里云作为服务商等待环境初始化完成如果项目已经创建过uniCloud环境可以跳过这一步。我建议新手先在测试项目上练习熟悉流程后再应用到正式项目。2.2 生成推送证书推送证书是保证消息安全送达的关键。iOS和Android的证书生成方式不同Android证书生成访问DCloud官方文档获取SHA256指纹在各大应用市场开发者后台配置签名信息下载各厂商的配置文件iOS证书生成登录Apple开发者账号创建APNs证书导出.p12文件上传到uniPush控制台这里有个常见坑点Android证书需要对应应用签名的SHA256值如果后期修改了签名文件必须重新配置所有厂商通道。我就曾经因为更换签名导致推送失效排查了半天才发现问题。3. uni push2.0详细配置3.1 控制台基础配置登录uni-app开发者中心找到uniPush 2.0配置页面如果没有应用需要先创建新应用为应用添加平台信息iOS和Android需要分别配置上传前面生成的证书文件配置应用包名和Bundle ID特别注意Android平台需要配置各厂商的离线推送参数。以华为为例应用ID在华为开发者后台创建应用时分配应用密钥同上回调地址用于接收推送状态回执配置完成后建议先保存不要立即启用。等所有参数检查无误后再开启推送服务。3.2 厂商通道特殊配置厂商通道是提升安卓推送到达率的关键。各家配置略有不同小米通道需要申请推送权限配置默认通知样式设置消息分类OPPO通道需要单独申请推送权限有每日推送限额必须配置通知图标vivo通道需要上传签名文件配置消息分类设置测试设备实测下来华为和小米的通道稳定性最好OPPO和vivo偶尔会有延迟。建议在代码中对不同厂商做兼容处理。4. 编写推送云函数4.1 创建云函数在uniCloud/cloudfunctions目录下新建云函数右键点击新建云函数勾选uni-cloud-push扩展库输入函数名称如uni-push基础推送代码示例use strict; const uniPush uniCloud.getPushManager({ appId:__UNI__XXXXXX // 替换为你的应用ID }) exports.main async (event, context) { const data JSON.parse(event.body) return await uniPush.sendMessage({ getui_alias: data.alias, // 使用别名推送 title: data.title, content: data.content, force_notification: true, // 强制显示通知 payload: data.payload // 自定义数据 }) }这个示例实现了最基本的推送功能。实际项目中你可能需要添加错误处理逻辑推送频率限制用户标签支持A/B测试功能4.2 部署和调用编写完成后右键云函数选择上传部署在uniCloud控制台找到该函数复制调用URL调用示例uni.request({ url: 你的云函数URL, method: POST, data: { alias: user123, title: 订单通知, content: 您的订单已发货, payload: { orderId: 123456 } }, success(res) { console.log(推送成功, res) } })5. 客户端消息处理5.1 监听推送消息在App.vue的onLaunch中添加消息监听onLaunch() { // #ifdef APP-PLUS const pushMessageCallback (res) { const { data } res if (res.type receive) { // 前台收到消息 console.log(收到推送, data) } else { // 点击通知栏 uni.navigateTo({ url: /pages/order/detail?id${data.payload.orderId} }) } } uni.onPushMessage(pushMessageCallback) // #endif }5.2 安卓通知渠道配置安卓8.0以上需要配置通知渠道// #ifdef APP-ANDROID const plugin uni.requireNativePlugin(DCloud-PushSound) if (plugin) { plugin.setCustomPushChannel({ channelId: order_channel, channelDesc: 订单通知, importance: 3 // 重要程度 }) } // #endif不同重要程度会影响通知的显示方式1最低不发出声音3默认发出声音但不弹出4高弹出通知5最高立即弹出6. 调试与优化技巧6.1 常见问题排查推送不成功时可以按照以下步骤排查检查证书是否过期特别是iOS确认设备token是否有效查看厂商通道配置是否正确检查云函数日志是否有报错测试在线推送和离线推送我常用的调试方法是先在控制台发送测试推送确认基础功能正常后再进行业务集成。6.2 性能优化建议合并推送对同一用户的多个通知合并发送智能调度根据用户活跃时间选择推送时段A/B测试对比不同文案的点击率标签管理建立用户画像实现精准推送频率控制避免过度推送导致用户关闭通知实际项目中推送策略需要根据业务特点不断调整。比如电商APP大促期间可以适当增加推送频率而工具类APP则要保持克制。