uniapp实现阿里云消息推送

uniapp实现阿里云消息推送


今天来实现app的离线 / 在线 消息推送功能 使用的是阿里云消息推送。具体操作可以看插件文档来写,上面基本都有 接下来从我写代码中操作的步骤跟大家一一说明


一:前期准备

1.引入阿里云插件,可以用使用本地插件和远程插件,我这里使用的是远程插件
在这里插入图片描述
2.选择 manifest.json文件,选择 APP原生插件配置,点击云端插件选择,勾选 阿里云移动推送 阿里云移动推送-厂商通道 两个插件

3.勾选后,在APP原生插件配置里,会增加阿里云移动推送相关的参数配置

4.配置 阿里云移动推送的AppKey和AppSecret,Android和iOS如果是一样的,就配置一样的AppKey和AppSecret。

5.(可选)使用哪个厂商通道,就配置哪个厂商通道的参数,不配置则不使用,具体参数由各厂商平台提供。有些厂商是需要配置多个参数,请注意参数配置完整

6.在uniapp 应用中注册初始化推送

7.在uniapp项目的manifest.json中 APP模块配置中打开 Push模块,但是不勾选uniPush

二:具体实现代码

这块代码是放在app.vue里面 引入写的js直接暴露出去 放在onLaunch里面即可。

/* 消息推送 */
function MessagePush(){
	// 判断客户端环境是ios、android、小程序
	const platform = uni.getSystemInfoSync().platform;
	if (!['ios', 'android'].includes(platform)) return;
	const aliyunPush = uni.requireNativePlugin('Aliyun-Push');
	
	const that = this;
	// ios
	if (platform == 'ios') {
		// 获取设备ID的方法
		const idResult = aliyunPush.getDeviceId();
		console.log(idResult,'存设备ID')
		if (idResult.data.deviceId != '') {
			// 存设备ID
			uni.setStorageSync('registerID', idResult.data.deviceId);
		}
		//一个设备只能绑定一个账号,一个账号被设备绑定也有次数限制 account是要绑定的账号参数
		// aliyunPush.bindAccount({ 
		// 	account: this.account
		// }, result1 => {
		// 	console.error("苹果bindAccount注册推送", result1)
		// });
			
		// 应用在前台时,推送通知 应用在前台时,是否展示推送通知,默认false不展示
		aliyunPush.showNoticeWhenForeground({
			enable: true
		});
		// 注册前台推送通知的回调接口
		aliyunPush.setNotificationCallback({},res=>{
			console.error("setNotificationCallback", JSON.stringify(res))
		})
		// 注册推送消息的回调接口
		aliyunPush.setMessageCallback({}, result => {
			console.error("setMessageCallback", JSON.stringify(result))
		});
		// 注册用户点击推送通知的回调接口
		aliyunPush.setNotificationResponseCallback({}, result => {
			console.error("setNotificationResponseCallback", result)
		});
	}
	// 安卓
	if (platform == 'android') {
		// 注册推送,开始接收数据
		aliyunPush.registerPush({}, result => {
			const event = result.event;
			const channel = uni.requireNativePlugin('Aliyun-Push-NotificationChannel');
			// 检查 应用通知通道的总开关
			const channelRes = channel.isNotificationEnabled({
				id: 'amp_channel'
			});
			// 先创建NotificationChannel
			channel.createChannel({
				id: 'amp_channel',
				name: '安卓通知通道',
				desc: '安卓通知通道',
				importance: 3,
			});
			// 厂商通道
			const aliyunThirdPush = uni.requireNativePlugin('Aliyun-ThirdPush');
			// 在用户点击厂商通道推送的通知后,应用通过此接口接收数据 用户未点击或者直接移除,应用是无法感知的。
			aliyunThirdPush.registerThirdPush({}, thirdRes => {
				const data = JSON.stringify(thirdRes);
				androidOperations(data,1)
			})
			// 注册日志接口
			aliyunThirdPush.registerLog({}, result => {
				console.log("third push plugin log : " + result);
			})
			// 注册推送
			if (event === 'registerPush') {
				if (result.code === 'success') {
					console.log("注册推送 成功 ");
					// 获取设备推送ID,注意必须注册推送成功之后,才能获取
					const idResult = aliyunPush.getDeviceId();
					if (idResult.data.deviceId != '') {
						// 存设备ID
						uni.setStorageSync('registerID', idResult.data.deviceId);
					}
					// aliyunPush.bindAccount({ //一个设备只能绑定一个账号,一个账号被设备绑定也有次数限制
					// 	account: this.account // 登陆成功获取到的
					// }, result1 => {
					// 	console.error("安卓bindAccount注册推送", result1)
					// });
				} else {
					console.log("注册推送 " + result.code + " " + result.msg);
				}
			}
			// 打开通知
			else if (event === 'onNotificationOpened') {
				// 跳转,具体业务
				const res = JSON.stringify(result);
				androidOperations(res,2)
			} else {
				console.log("receive push event : " + event);
				console.log("receive push data : " + JSON.stringify(result));
				// uniapp的消息提示 本项目中需要后端配置 此处代码不要
				// uni.createPushMessage({
				// 	title:result.data.title,
				// 	content:result.data.content
				// })
			}
		});
	}
}

// 推送成功后具体业务
function androidOperations(data,index) {
	let arr;
	if(index == 1){
		arr = JSON.parse(data)
	}else if(index == 2){
		arr = JSON.parse(JSON.parse(data).data.extraStr)
	}
	...
}

export {
    MessagePush
}

参考了文章https://blog.csdn.net/weixin_45013604/article/details/130705350?spm=1001.2014.3001.5502

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值