当前位置:   article > 正文

uniapp 集成推送功能_uniapp-plugin-getui

uniapp-plugin-getui

uniapp 集成推送功能

1,在开发后台点击需要开通的应用–点击uniPush–配置对应的信息,默认情况下,Android的包名跟APPID的相同

在这里插入图片描述
在这里插入图片描述

2,云打包时勾选APP模块配置–push(消息推送)–uniPush

在这里插入图片描述

3,用户安装之后,即可使用开发者的后台–UniPush–创建推送–发送通知消息(需要有人安装打包好之后的APP才可以推送,如果没人安装过,将无法点击发送)

​ 注: 直接运行项目到真机是不可行的,可通过IDE中的自定义基座,然后再运行到手机中进行测试, !!!自定义基座这种方式在使用厂家推送时不可用
在这里插入图片描述

至此,安装APP的用户将收到一个消息通知,最简单的推送集成就完成了

注意:(应用右上角角标的显示,目前使用官方的推送是不太好实现所有机型的兼容的,目前的具体情况如下:

不同ROM接收推送消息对桌面图标的角标处理逻辑存在差别

  • 小米手机:角标自动加1 (MIUI11 以下) 另:高版本MIUI 设置角标会以通知的形态发送
  • 华为手机:可以设置,走厂家通道离线推送可在服务端设置。参考可插件链接:https://ext.dcloud.net.cn/plugin?id=1680
  • vivo手机:不会自动加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
			})
		},
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

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:'接受到了推送信息'
				})
			});

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

透传消息(注解:透传消息未配置厂商推送之前,只能在APP前台运行时才能被监听到,一旦后台运行或者离线之后,都不会收到推送信息,在配置了厂商的推送之后的话,则可以通过厂商的推送在APP后台或者离线时进行推送消息)

总结:
选项优点缺点
unipush中的通知消息,适用于不需要杀死进程后仍接收通知的应用集成简单,不需要申请每个厂商的推送通道1,进程杀死后,推送则不可送达
2,应用在前台运行时,推送也会出现消息通知,不可控
unipush中的透传消息,不配置厂商推送消息推送不会出现在通知栏,可由开发者监听到消息之后进行自定义的业务逻辑程序一旦后台或者被杀死进程,都无法监听到消息推送
unipush中的透传消息,配置厂商推送1.应用在前台运行时,可监听到消息推送,不会直接出现在手机通知栏中
2,应用后台运行后,或者进程杀死后,消息会出现在通知栏中,点击后唤起APP
安卓每个厂商都需要申请厂商的推送,然后进行配置,比较麻烦
手机推送测试(官方推送在未配置厂商推送信息的情况下,杀死进程后,推送消息无法在通知栏中出现,需要等到APP再次在线,才会重新弹出推送消息)
机型推送方式应用未读角标receiveclick
红米K20PROunipush的消息通知无,不可设置,(H5+的setBadgeNumber方法在小米11以上的系统中,会以通知栏的方式出现)没有触发有触发
红米K20PROunipush的消息通知,在后续操作中配置附加消息在用户手动点击通知之后才会触发在点击通知之后才会触发
红米K20PROunipush的透传消息应用前台运行时,可触发不会触发通知栏消息
华为P20prounipush的消息通知可设置未监听到通知栏点击可监听到该事件
安卓配置厂家推送之后,在透传消息时,需要填入对应intent,由于uniapp只能进入首页,所以代码几乎是固定的,替换一下包名即可,厂商推送需要设置的Intent字符串格式,请将 p a c k a g e N a m e , {packageName}, packageName{title}, c o n t e n t , {content}, content{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
  • 1

在这里插入图片描述

手机推送测试(已配置厂商推送渠道),要走厂商通道,要选择透传消息

注:厂家推送需要不可用使用自定义基座或者真机运行,需要打包之后测试,

机型应用未读角标receiveclick
红米K20pro需要用户手动设置系统权限才会展示在线时,会正常触发,离线时则不会厂商通道的消息点击之后会触发
华为P20PROunipush的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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/274489
推荐阅读
相关标签
  

闽ICP备14008679号