uniapp项目使用unipush2.0处理在线离线推送跳转

本文档详细介绍了如何在App中处理离线和在线推送消息的监听和响应。通过在`app.vue`中设置`uni.onPushMessage()`和`plus.push.addEventListener()`来分别处理在线和离线消息点击,特别强调了离线消息点击后的处理逻辑,需要在`onShow`方法中检查并处理。同时,为避免在线消息重复跳转,每个具体业务页面加载完成后需要清除缓存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在线消息:在app.vue文件onLaunch中uni.onPushMessage()监听,
2、离线消息:

由于Dcloud封装,使用固定的intent,消息点击默认只支持跳转到应用首页,不支持intent中直接给定Dcloud的插件页面路径。当用户点击通知后,会携带intent的值触发客户端click回调方法, 客户端可根据接收的参数再调用客户端跳转方法实现自定义页面跳转。

所以需在plus.push.addEventListener(“click”, function(msg) {})方法中缓存,进入首页处理;

app.vue:

<script>
	export default {
		data() {
			return {
			}
		},
		onLoad() {
		},
		onLaunch: function() {
			//离线推送点击
			plus.push.addEventListener("click", function(msg) {
				// 存储离线推送点击(此处重点处理离线点击业务,但在线也会走此方法,所以进入具体页面时需要清除缓存,否则在线消息点击进入具体页面后返回首页将会重复跳转)
				uni.setStorageSync("appLaunchedByPush", msg.payload)
			})
			// 在线推送点击
			uni.onPushMessage((res) => {
				let data=res.data.payload;
				switch (data.type) {
					case "物业管理通知":
						uni.navigateTo({
							url: `/message/detail?id=${data.buzId}&accountId=${uni.getStorageSync('accountId')}&areaId=${data.areaId}`
						});
						break;
					default:
						break;
				}
				console.log("收到推送消息:", data) //监听推送消息
				plus.runtime.setBadgeNumber(0)
			});
			
			// 获取客户端标识
			uni.getPushClientId({
				success: (res) => {
					let push_clientid = res.cid;
					uni.setStorageSync('cid', push_clientid);
				}
			})
			// #ifdef APP-PLUS
			let pinf = plus.push.getClientInfo();
			if (pinf && pinf.clientid) uni.setStorageSync('cid', pinf.clientid);
			else {
				var obtainingCIDTimer = setInterval(function() {
					pinf = plus.push.getClientInfo();
					if (pinf.clientid) {
						uni.setStorageSync('cid', pinf.clientid);
						clearInterval(obtainingCIDTimer);
					}
				}, 50);
			}
			// #endif
			plus.runtime.setBadgeNumber(0)
		},
		onShow: function() {
		},
		onHide: function() {
		},
		methods: {
		}
	}
</script>
<style lang="scss">
</style>

index.vue

<template>
	<view class="content">
	</view>
</template>
<script>
	export default {
		data() {
			return {
			}
		},
		// tabbar 的页面展现过一次后就保留在内存中,再次切换 tabbar 页面,只会触发每个页面的onShow,不会再触发onLoad。
		onShow() {
			//处理app被离线push唤醒时消息推送的跳转
			const appLaunchedByPush = uni.getStorageSync('appLaunchedByPush')
			if (!this.$isEmpty(appLaunchedByPush)) {
				switch (appLaunchedByPush.type) {
					case "物业管理通知":
						this.$u.route({
							url: `/message/detail?id=${appLaunchedByPush.buzId}&accountId=${uni.getStorageSync('accountId')}&areaId=${appLaunchedByPush.areaId}`
						});
						break;
					default:
						break;
				}
				plus.runtime.setBadgeNumber(0)
			}
		}
	}
</script>

<style lang="scss" scoped>
</style>

具体业务页面中切记清缓存

监听离线消息时,重点处理的是离线点击业务,但在线消息点击也会走此方法,所以进入特定页面时务必清除缓存,否则在线消息点击进入具体页面后返回首页时首页的缓存还在将会重复跳转

<template>
	<view v-cloak>
	</view>
</template>

<script>
	export default {
		data() {
			return {
			}
		},
		onReady() {},
		mounted() {
			//加载完成清除缓存
			uni.removeStorageSync("appLaunchedByPush");
		},
		methods: {
		}
	}
</script>

<style lang="scss" scoped>
</style>

参考文档1
参考文档2

### UniApp 消息推送 2.0 功能说明及集成教程 UniApp 提供的消息推送服务 uniPush 2.0 是一种跨平台的消息推送解决方案,支持 Android 和 iOS 平台。通过 uniPush 2.0,开发者可以实现应用内消息通知、离线消息推送等功能,提升用户体验和应用活跃度。 #### 1. 功能概述 uniPush 2.0 的主要功能包括: - **跨平台支持**:支持 Android 和 iOS 设备的消息推送。 - **离线消息推送**:即使用户未登录应用,也能通过系统通知或厂商通道接收消息[^2]。 - **多通道支持**:根据设备类型选择合适的推送通道(如系统通知、厂商通道等)。 - **回调交互**:支持用户点击通知后的回调处理,例如跳转到指定页面或执行特定逻辑。 - **批量推送**:可以针对不同用户群体发送个性化消息。 - **数据统计**:提供推送消息的送达率、点击率等统计数据。 #### 2. 集成步骤 ##### 2.1 开通 uniPush 服务 在 HBuilder X 中使用账号登录开发者中心,在左侧菜单找到 `uni-push` -> `uni-push 2.0`,进入应用开通界面。填写应用信息并完成配置[^3]。 ##### 2.2 配置推送服务 根据目标平台的不同,需要分别进行以下配置: ###### 2.2.1 Android 配置 1. 在 DCloud 开发者中心生成 Android 平台的推送证书。 2. 下载个推 SDK 并将其集成到项目中。确保项目中已正确引入相关依赖。 3. 在 `manifest.json` 文件中开启推送功能,并配置推送相关的参数。 ```json { "app-plus": { "push": { "android": { "appid": "your_appid", "appkey": "your_appkey", "secret": "your_secret" } } } } ``` ###### 2.2.2 iOS 配置 1. 在 Apple Developer Console 中为应用创建推送证书(APNs)。 2.推送证书上传至 DCloud 开发者中心。 3. 在 `manifest.json` 文件中开启推送功能,并配置 iOS 相关参数。 ```json { "app-plus": { "push": { "ios": { "certName": "your_cert_name", "password": "your_cert_password" } } } } ``` ##### 2.3 初始化 uniPush SDK 在应用启动时初始化 uniPush SDK,并注册推送服务。 ```javascript // 初始化 uniPush SDK uni.onPush((res) => { console.log('收到推送消息:', res); if (res.messageType === 'notification') { // 处理通知消息 console.log('通知内容:', res.notification); } else if (res.messageType === 'custom') { // 处理自定义消息 console.log('自定义消息内容:', res.custom); } }); // 获取 clientID uni.getPushClientId({ success: (res) => { console.log('clientID:', res.clientId); }, fail: (err) => { console.error('获取 clientID 失败:', err); } }); ``` ##### 2.4 发送推送消息 通过 DCloud 开发者中心或自定义后台系统发送推送消息。设置推送的目标用户、推送时间、推送内容等参数。 #### 3. 示例代码 以下是一个完整的示例代码,展示如何在 UniApp 应用中集成 uniPush 2.0。 ```javascript // 初始化 uniPush SDK uni.onPush((res) => { console.log('收到推送消息:', res); if (res.messageType === 'notification') { // 跳转到指定页面 uni.navigateTo({ url: '/pages/detail/detail?data=' + encodeURIComponent(JSON.stringify(res.notification)) }); } else if (res.messageType === 'custom') { // 执行自定义逻辑 console.log('自定义消息内容:', res.custom); } }); // 获取 clientID uni.getPushClientId({ success: (res) => { console.log('clientID:', res.clientId); // 可将 clientID 上报到服务器用于后续推送 }, fail: (err) => { console.error('获取 clientID 失败:', err); } }); ``` #### 4. 注意事项 - 确保在 `manifest.json` 文件中正确配置推送参数,否则可能导致推送失败[^3]。 - 测试推送功能时,建议使用真机调试,模拟器可能无法正常接收推送消息。 - 如果使用第三方推送通道(如华为 HMS、小米推送等),需额外配置相关参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值