uniapp官方消息推送uniPush:配置流程及使用方法


前言:

  害害害~我又来了阿~最近看到甲方需求中说要在APP中推送给用户的待办任务做消息提醒,提醒到手机通知栏那种,虽然之前也做过,但是也只是对别人代码做修改,并未去疏通整个流程,而且此前项目是用的MUI,与uni开发有着明显区别,做完了来记录一下吧。

  业务需求:推送消息至手机通知栏,点击后打开APP或打开APP进入到指定页面;

  业务实现:使用uniapp推送服务uniPush完成消息推送。暂只包含安卓通知,ios设备后续补充。

  操作环境:HbuilderX + 逍遥安卓模拟器

一、配置

   使用HbuilderX的情况下可以直接在配置文件中App模块作为入手点。

模块配置页

 

  【在配置文件中的App模块配置勾选Push消息推送—uniPush】点击配置跳转到Dcloud配置页面完成相关配置后可以进行推送业务测试、操作。

 推送配置页

 

   由于我在此已经完成了配置,所以以上是已完成的配置信息。包名自取,主要是签名的获取,如果使用自有证书就需要自己去查询自己证书的签名后填写到对应位置即可。

 推送管理页

 

   经过配置并且申请成功后,基础的配置就暂时完成了,自动进入到了配置完成后的推送管理界面。

二、测试

  配置完成后,接下来可以尝试发送一条简单的通知测试一下配置是否正确。

推送预览

 

  在什么配置都不做调整的情况下,直接预览,如果你这时的环境是安卓模拟器+运行到HbuilderX标准基座,估计会出现以下状况:

  推送对象为全部用户没问题,你在模拟器上接受到了推送信息,嗯,很满意。

  但是你发现你的业务需求都是把内容推送给指定用户,而不是全部用户都要收到这个消息。然后你切换到选择CID用户等其他目标用户时,就应该是无法接收到通知的了,会提示CID不存在或不属于此应用。

 预览前发送框

 

  为什么嘞?以下是官方解释,大体就是说你用的是标准基座导致了一些配置都匹配不上,所以找不到CID。

  怎么解决?不用标准基座呗,制作自定义基座会吧?打一个自定义基座的包就好了。打包时的包名记得改成与此前配置推送时的包名一致。

  打好自定义基座后,运行—选择:运行到自定义基座—运行到安卓模拟器。这时候再去重复上面的测试步骤,应该就可以发送到全部用于与CID用户了。其他用户暂未测试,后期补充。

  CID的获取请查看下方的应用部分文档内容。

  说了这么多,上面其实都是我们自己在测试Push的可行性,我们还得带入到项目中。

三、应用

  配置完成,测试通顺之后,就可以带入业务了。

  其实前端只需要给后端提供相应的应用信息即可。后端会在某个时候去触发消息推送,前端对收到的推送的消息做一点处理即可完成简单的一个消息推送流程了。

查看生成的应用信息

 

    接收到的推送消息会出现在设备的通知栏,点击后会直接启动APP并且执行对应的数据处理方法。

  推送示例

 

   获取当前设备下的CID。CID在APP安装后首次运行我们就可以获取到,文档上说是直接绑定在设备的存储上的,不会因为后面的账号切换或者卸载重装APP操作而发生变化,特定情况除外。

//在入口文件APP.vue做如下配置:
		onLaunch: function() {
			this.handlePush();
			this.getCid();
		},
// 获取CID
		getCid(){
			// #ifdef APP-PLUS
			var t1_time = 0;
			var t1 = setInterval(function(){
			  var cid = plus.push.getClientInfo().clientid;  
			  console.log( cid!=undefined, cid!="undefined", cid)
			  if(cid != null || cid != "null"){ 
				uni.setStorageSync('cid',cid);
				clearInterval(t1);
				return
			  }
			},130);
			// #endif
		}, 
// 监听通知信息
		handlePush() {
		  // #ifdef APP-PLUS
		  const _handlePush = function(message) {
				// 获取自定义信息
				let payload = message.payload;
				uni.switchTab({url:`${payload.path}`})	
		  }
			// 事件处理
			plus.push.addEventListener('click', _handlePush)
			plus.push.addEventListener('receive', _handlePush)
			// #endif
		},

  以上是部分的基本处理方法,开发者可根据需求自行强化、补充。

  如果遇到问题可以先去查看官方文档,问题基本都有解决的方法。

  如有错误遗漏欢迎补充。