一.unipush简述
服务器主动向客户端发送消息的技术。无需客户端持续轮询服务器,即可获得即时数据。
二.应用场景
- 用户消息通知
当 APP 用户相关状态或者系统功能状态变化时(如用户订单通知、交易提醒、物流通知、升级提醒、社交互动提醒等),可对用户进行及时告知,或者促使用户完成特定操作。 - 离线语音播报
它也是一种用户消息推送,实现原理其实是自定义通知提醒铃声 - 营销促活通知
在日常营销推广、促销活动等场景下(如双11大促、产品上新、重要资讯等),APP可对目标用户进行定向通知栏消息+应用内消息推送,吸引用户参与活动,提升日活。 - 基于uniCloud的IM、聊天、客服、棋牌游戏交互等
例如:DCloud基于uni-push2开发并开源了uni-im详情:uniapp.dcloud.net.cn/uniCloud/un…
另外棋牌游戏等,需要客户端被动接收消息的需求都可以用uni-push实现。
三.推送方式
1.离线推送
仅APP端支持,当应用被用户关闭,或者运行到后台时,手机厂商为了省电或释放内存,会终止App后台联网。
消息将通过不会离线的手机厂商通道,下发到手机系统推送服务模块;
此时客户端会自动创建通知栏消息,展示在系统消息中心(如图所示)但客户端监听不到消息内容;当用户点击通知栏消息后,会将APP唤醒此时APP才能监听到消息内容。
2.在线推送
当应用在线时,不会创建“通知栏消息”,此时客户端会立即监听到消息内容。
如果你希望当应用在线时,也通过“通知栏消息”来提醒用户;可以通过以下两种方式实现:
- 监听到消息内容后,根据业务需要自己判断是否要创建“通知栏消息”,需要就调用创建本地消息API uni.createPushMessage手动创建通知栏消息。
- 服务端执行推送时,传递参数
force_notification:true,客户端就会自动创建“通知栏消息”(此时你监听不到消息内容),当用户点击通知栏消息后,APP才能监听到消息内容。
以上两种方案各有优劣,方案一更加灵活;比如:客服功能,客户端接收到聊天消息时,应用如果已经打开聊天对话页面,就直接将监听到的推送内容,渲染到页面。如果应用未打开聊天页,则调用api创建“通知栏消息”提醒用户;此时你还可以执行一些其他逻辑,比如将tabBar的消息中心加红点等。方案二比较简便,客户端无需额外编写代码,自动创建通知栏消息;但仅适用于不关心客户端行为就创建“通知栏消息”的场景,如广告营销内容的推送等。
四.客户端监听推送消息
监听推送消息的代码,需要在收到推送消息之前被执行。所以应当写在应用一启动就会触发的生命周期onLaunch中。
APP端真机运行注意:
- 如果启用了离线推送,必须:经过发行原生app云打包后,客户端才能监听到推送消息。标准HBuilder运行基座无法使用。
- 离线推送时,Android手机厂商通道推送需设置消息渠道id,否则会被限制频次和静默推送(静音且需下拉系统通知栏才可见)
- 如果Android应用进入后台后(App未销毁),点击通知消息无法拉起App,请检查设备是否有禁止后台弹出界面,路径>>设置-应用管理-测试应用-权限管理-后台弹出界面,(一般是小米、oppo、 vivo设备)。