uniapp ios添加日历提醒 uniapp定时推送提醒消息 | 您所在的位置:网站首页 › uniapp离线推送监听通知栏 › uniapp ios添加日历提醒 uniapp定时推送提醒消息 |
uniapp 集成推送功能1,在开发后台点击需要开通的应用–点击uniPush–配置对应的信息,默认情况下,Android的包名跟APPID的相同2,云打包时勾选APP模块配置–push(消息推送)–uniPush3,用户安装之后,即可使用开发者的后台–UniPush–创建推送–发送通知消息(需要有人安装打包好之后的APP才可以推送,如果没人安装过,将无法点击发送) 注: 直接运行项目到真机是不可行的,可通过IDE中的自定义基座,然后再运行到手机中进行测试, !!!自定义基座这种方式在使用厂家推送时不可用 至此,安装APP的用户将收到一个消息通知,最简单的推送集成就完成了注意:(应用右上角角标的显示,目前使用官方的推送是不太好实现所有机型的兼容的,目前的具体情况如下: 不同ROM接收推送消息对桌面图标的角标处理逻辑存在差别 小米手机:角标自动加1 (MIUI11 以下) 另:高版本MIUI 设置角标会以通知的形态发送华为手机:可以设置,走厂家通道离线推送可在服务端设置。参考可插件链接:https://ext.dcloud.net.cn/plugin?id=1680vivo手机:不会自动加1,需调用5+ API plus.runtime.setBadgeNumber动态设置角标数字oppo手机:角标自动展示,具体形态与rom相关,可能是红点或数字。(需要打开角标权限)iOS平台根据接收到的推送消息处理桌面图标的角标,在uniPush后台的“iOS配置”项中可配置badge参数对角标进行设置,可取值: “+1”,表示当前角标+1;“-1”,表示当前角标-1(角标>=0);“3”,表示指定角标值,值必须>=0。默认(不设置badge参数)则角标数字不变,也可以在应用运行期调用5+ API plus.runtime.setBadgeNumber动态设置角标数字 ) 下面是真正项目中的使用,开通的流程跟上述一样,不多加赘述1,消息精准推送到某个用户,利用H5+获取用户安装时的CID,根据CID来进行精准推送1,在APP启动的之后的代码中,加入plus.push.getClientInfo().clientid,获取用户的CID,可发给后台进行绑定,(注意每次重新安装APP,CID都不相同,如果是同一用户,需要进行更新CID的操作) onLoad(){ uni.showModal({ title:plus.push.getClientInfo().clientid }) },2.客户端监听推送的事件,利用H5+的API来完成,回调函数中的参数为推送信息的内容,根据内容进行业务逻辑处理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 安卓每个厂商都需要申请厂商的推送,然后进行配置,比较麻烦 手机推送测试(官方推送在未配置厂商推送信息的情况下,杀死进程后,推送消息无法在通知栏中出现,需要等到APP再次在线,才会重新弹出推送消息)机型 推送方式 应用未读角标 receive click 红米K20PRO unipush的消息通知 无,不可设置,(H5+的setBadgeNumber方法在小米11以上的系统中,会以通知栏的方式出现) 没有触发 有触发 红米K20PRO unipush的消息通知,在后续操作中配置附加消息 无 在用户手动点击通知之后才会触发 在点击通知之后才会触发 红米K20PRO unipush的透传消息 无 应用前台运行时,可触发 不会触发通知栏消息 华为P20pro unipush的消息通知 可设置 未监听到 通知栏点击可监听到该事件 安卓配置厂家推送之后,在透传消息时,需要填入对应intent,由于uniapp只能进入首页,所以代码几乎是固定的,替换一下包名即可,厂商推送需要设置的Intent字符串格式,请将{title},{payload}替换为正确的内容${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/ 实际项目使用中,IOS的前台运行,接收到透传消息之后,再创建本地通知时,会进入死循环的问题解决// 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 2018-2019 实验室设备网 版权所有 |