赞
踩
注: 直接运行项目到真机是不可行的,可通过IDE中的自定义基座,然后再运行到手机中进行测试, !!!自定义基座这种方式在使用厂家推送时不可用
注意:(应用右上角角标的显示,目前使用官方的推送是不太好实现所有机型的兼容的,目前的具体情况如下:
不同ROM接收推送消息对桌面图标的角标处理逻辑存在差别
根据接收到的推送消息处理桌面图标的角标,在uniPush后台的“iOS配置”项中可配置badge参数对角标进行设置,可取值:
默认(不设置badge参数)则角标数字不变,也可以在应用运行期调用5+ API plus.runtime.setBadgeNumber动态设置角标数字
)
1,在APP启动的之后的代码中,加入plus.push.getClientInfo().clientid,获取用户的CID,可发给后台进行绑定,(注意每次重新安装APP,CID都不相同,如果是同一用户,需要进行更新CID的操作)
onLoad(){
uni.showModal({
title:plus.push.getClientInfo().clientid
})
},
plus.push.addEventListener('click', (mes)=>{ console.log("mes") console.log(mes) /* msg.title -- 推送的标题,会在通知栏中显示 msg.content -- 推送的内容,会在通知栏中显示 msg.subtitle -- 二级标题,会在通知栏中显示 msg.palyload -- 自定义的payload内容,该内容不会展示在通知栏的通知中,可以在此处携带ID之类不想用户看到的信息 */ uni.showModal({ title:'点击了推送信息' }) }); plus.push.addEventListener('receive', (mes)=>{ console.log("mes") console.log(mes) /* msg.title -- 推送的标题,会在通知栏中显示 msg.content -- 推送的内容,会在通知栏中显示 msg.subtitle -- 二级标题,会在通知栏中显示 msg.palyload -- 自定义的payload内容,该内容不会展示在通知栏的通知中,可以在此处携带ID之类不想用户看到的信息 */ uni.showModal({ title:'接受到了推送信息' }) });
透传消息(注解:透传消息未配置厂商推送之前,只能在APP前台运行时才能被监听到,一旦后台运行或者离线之后,都不会收到推送信息,在配置了厂商的推送之后的话,则可以通过厂商的推送在APP后台或者离线时进行推送消息)
选项 | 优点 | 缺点 |
---|---|---|
unipush中的通知消息,适用于不需要杀死进程后仍接收通知的应用 | 集成简单,不需要申请每个厂商的推送通道 | 1,进程杀死后,推送则不可送达 2,应用在前台运行时,推送也会出现消息通知,不可控 |
unipush中的透传消息,不配置厂商推送 | 消息推送不会出现在通知栏,可由开发者监听到消息之后进行自定义的业务逻辑 | 程序一旦后台或者被杀死进程,都无法监听到消息推送 |
unipush中的透传消息,配置厂商推送 | 1.应用在前台运行时,可监听到消息推送,不会直接出现在手机通知栏中 2,应用后台运行后,或者进程杀死后,消息会出现在通知栏中,点击后唤起APP | 安卓每个厂商都需要申请厂商的推送,然后进行配置,比较麻烦 |
机型 | 推送方式 | 应用未读角标 | receive | click |
---|---|---|---|---|
红米K20PRO | unipush的消息通知 | 无,不可设置,(H5+的setBadgeNumber方法在小米11以上的系统中,会以通知栏的方式出现) | 没有触发 | 有触发 |
红米K20PRO | unipush的消息通知,在后续操作中配置附加消息 | 无 | 在用户手动点击通知之后才会触发 | 在点击通知之后才会触发 |
红米K20PRO | unipush的透传消息 | 无 | 应用前台运行时,可触发 | 不会触发通知栏消息 |
华为P20pro | unipush的消息通知 | 可设置 | 未监听到 | 通知栏点击可监听到该事件 |
${packageName} 代表应用包名
${title} 通知的标题
${content} 通知的内容
${payload} 其他附加参数,请用 JSON.toJSONString(payload)进行转码。可不填
intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;package=${packageName};component=${packageName}/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=${title};S.content=${content};S.payload=${payload};end
注:厂家推送需要不可用使用自定义基座或者真机运行,需要打包之后测试,
机型 | 应用未读角标 | receive | click |
---|---|---|---|
红米K20pro | 需要用户手动设置系统权限才会展示 | 在线时,会正常触发,离线时则不会 | 厂商通道的消息点击之后会触发 |
华为P20PRO | unipush的web后台推送不会出现角标,需要使用后台调用api方可出现角标 | 在线时,会正常触发,离线时则不会 | 厂商通道的消息点击之后会触发 |
苹果8,IOS13.7 | 前台运行时没有,后台运行会有,需要手动调用plus.runtime.setBadgeNumber(0),进行红点清除 | 应用后台运行时,不会触发 | 杀死进程后任然可以推送消息通知,点击事件也正常 |
UniPush开通指南 https://ask.dcloud.net.cn/article/35716
UniPush使用指南 http://ask.dcloud.net.cn/article/35622
Unipush常见问题 https://ask.dcloud.net.cn/article/36611
服务端api接口推送调用文档
https://docs.getui.com/getui/server/rest_v2/push/
// APP.VUE 的onLoad生命函数中添加下述代码 let timer = false; plus.push.addEventListener("click",(msg)=>{ // 当消息被点击进入的回调 clearTimeout(timer); timer = setTimeout(()=>{ if(plus.os.name == 'iOS'&& typeof msg.payload == 'string'){ // IOS跟安卓得到数据不一样,安卓是对象,IOS是JSON msg.payload = JSON.parse(msg.payload) } if(msg.payload){ uni.navigateTo({ url:`${msg.payload.url}` }) } },500) },false) plus.push.addEventListener("receive",(msg)=>{ // 接收到消息时进入的回调 let payloadObj = JSON.parse(msg.payload) if(payloadObj.msgType == 'LocalMSG' && plus.os.name == 'iOS'){ // 防止IOS下创建本地通知时会出现死循环的情况 return } var options = {cover:false,title:msg.title}; payloadObj.msgType = 'LocalMSG' // 添加多一个值来让ios可以判断是不是本地创建的消息 let payLoadStr = JSON.stringify(payloadObj) plus.push.createMessage(msg.content, payLoadStr, options ); },false)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。