天天看点

uniapp 消息推送与透传+语音播报

本章介绍 uniapp

app端消息推送与语音播报。。此功能需要前后端相互配合 下面代码单独运行是不会推送消息的。

前面需要配置相关包名等信息以及勾选推送,配置在此处按要求填写就行
uniapp 消息推送与透传+语音播报
我这里只讲代码逻辑
获取

clientid

//--------------login.vue 
	let clientInfo = plus.push.getClientInfo()
	console.log(clientInfo.clientid) // clientid os  
	// 将clientid 与 账号密码一起给后端 保存数据库(推送需要用到)
           
// app.vue  onLaunch:function
		onLaunch: function(params) {
			// #ifdef APP-PLUS
			let _this = this
			
			// 测试语音播报
			// _this.audio('支付宝到账,两个亿', 'token需要查看百度语音文档获取')
			
			//监听系统知栏消息点击事件
			plus.push.addEventListener('click', (msg) => {
				//处理点击消息的业务逻辑代码  
				let json = msg.payload
				let token = msg.token
				_this.audio(JSON.stringify(json), JSON.stringify(token))
				console.log('------------通知-------------')
				console.log(json, 'APP1 -----------------json----------------')
				//plus.nativeUI.alert("click:" + JSON.stringify(json))
			}, false)
			
			//监听接收透传消息事件  
			plus.push.addEventListener('receive', (msg) => {
				//处理透传消息的业务逻辑代码 
				let json = msg.payload
				let token = msg.token
				_this.audio(JSON.stringify(json), JSON.stringify(token))
				console.log('------------透传-------------')
				console.log(json, 'APP1 -----------------json----------------')
				//plus.nativeUI.alert("recevice:" + JSON.stringify(json))
				uni.$emit('uni_push', json)
			}, false)

			// 通知用户打开消息通知权限
			let main = plus.android.runtimeMainActivity();
			let pkName = main.getPackageName();
			let NotificationManagerCompat = plus.android.importClass(
				"android.support.v4.app.NotificationManagerCompat");
			let packageNames = NotificationManagerCompat.from(main);
			if (!packageNames.areNotificationsEnabled()) { //手机没有开启通知的权限
				uni.showModal({
					title: '温馨提示:',
					content: '请打开通知权限,接收收款语音通知!',
					showCancel: false,
					success: (res) => {
						let uid = main.getApplicationInfo().plusGetAttribute("uid");
						let Intent = plus.android.importClass('android.content.Intent');
						let Build = plus.android.importClass("android.os.Build");
						let Settings = plus.android.importClass("android.provider.Settings");
						let Uri = plus.android.importClass("android.net.Uri");
						let intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
						intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
						let uri = Uri.fromParts("package", main.getPackageName(), null);
						intent.setData(uri);
						main.startActivity(intent);
					}
				})
			}
			
			// #endif
		},
		methods: {
			/**
			 * 语音合成技术
			 * @param {string} string 需要合成播报的文字
			 * @param {token} token 获取的百度token
			 */
			audio(string, token) {
				const innerAudioContext = uni.createInnerAudioContext();
				innerAudioContext.autoplay = true;
				let json = { // 参数解析请打开下面百度语音地址查看
					cuid: 'abcdxxx',
					tex: string,
					tok: token, 
					lan: 'zh',
					ctp: '1',
					vol: 9,
					per: 4,
					spd: 4,
					pit: 4,
					aue: 3
				}
				let query = this.$u.queryParams(json)
				console.log(query)
				innerAudioContext.src = `https://tsn.baidu.com/text2audio` + query;
				innerAudioContext.onPlay(() => {
					console.log('开始播放')
				});
				innerAudioContext.onEnded(() => {
					console.log('语音播报结束')
					innerAudioContext.destroy() // 销毁
				});
				innerAudioContext.onError(() => {
					console.log('语音播报失败')
					innerAudioContext.destroy() // 销毁
				});
				//百度语音合成技术文档: https://ai.baidu.com/ai-doc/SPEECH/0k38y8mfh
			}
		}
           

继续阅读