uniapp集成unipush监听推送,处理兼容ios在线无法收到推送通知问题以及安卓推送处理


前言

uniapp集成unipush推送后,会遇到ios保持应用在前台或后台时无法收到通知栏消息问题,只能在应用中监听推送然后创建本地通知,此篇文章根据这个问题进行处理推送监听分别执行不同的业务。


完整处理示例

var platform = uni.getSystemInfoSync().platform;
//#ifdef APP-PLUS  
/* 5+  push 消息推送 ps:使用:H5+的方式监听,实现推送*/
plus.push.addEventListener("click", function(msgc) {
	console.log(msgc);
	//  && msgc.type == 'click'
	if (platform == 'ios') {
		//离线是payload为object , 在线时本地创建的为string(本地创建通知只能传string,否则无法传递payload)
		if (typeof msgc.payload == 'string') {
			console.log('string')
			var paymsg = JSON.parse(msgc.payload);
		} else {
			console.log('obj')
			var paymsg = msgc.payload;
		}
		console.log(paymsg)
		//执行跳转判断
	}
	//这里可以写跳转业务代码
}, false);
// 监听在线消息事件    
plus.push.addEventListener("receive", function(msg) {
	//这里可以写跳转业务代码
	console.log(msg)
	if (msg.type == "receive") // 这里判断触发的来源,否则一直推送。  
	{
		if (platform == 'ios') {
			// console.log(msg.payload)
			plus.push.createMessage(
				msg.payload.content,
				//本地创建通知payload只能传string,否则无法成功传递(为null)
				JSON.stringify(msg.payload), {
					cover: false,
					title: msg.title,
				});
		}
	}
	if (platform == 'android') {
		//执行跳转判断
	}
}, false);

//#endif  

提示

上面的监听处理代码需放到App.vue文件onLaunch方法里面!

### UniApp iOS 推送通知实现方法 对于在 UniApp 中实现在 iOS 设备上的推送通知功能,需注意由于 iOS 系统的特性,在应用处于前台运行状态时仅能接收到透传消息[^1]。这意味着当应用程序正在运行时,可能不会显示标准的通知提示框。 为了使推送服务正常工作于 iOS 平台之上,开发者需要拥有有效的苹果开发者账号来创建必要的证书文件用于配置推送服务[^2]。这一步骤至关重要,因为缺少合适的 APNs (Apple Push Notification service) 凭证将会阻止任何类型的推送消息被发送到设备上。 下面是一个简单的例子展示如何设置 `manifest.json` 文件中的推送选项以及初始化 SDK 的 JavaScript 代码片段: #### 配置 manifest.json ```json { "push": { "ios": { "certName": "your_certificate_name", "devCertName": "your_development_certificate_name" } }, "options": { "HW": { "/message/android/category": "EXPRESS" } } } ``` #### 初始化推送SDK并注册回调函数 ```javascript // 在 App.vue 或 main.js 中调用此段代码 import plus from '@dcloudio/uni-app-plus'; if (plus.os.name === 'iOS') { const push = uni.getPushManager(); function onReceiveMessage(message) { console.log('Received message:', message); // 处理收到的消息逻辑... } try { push.onPushMessage(onReceiveMessage); // 注册接收消息事件监听器 // 请求权限(如果尚未获得) push.requestPermission().then((res) => { if(res.authStatus){ console.log("User granted permission"); }else{ console.warn("User denied permission"); } }); } catch (error) { console.error(error); } } ``` 这段代码展示了怎样通过 `@dcloudio/uni-app-plus` 插件访问原生 API 来管理推送通知,并设置了处理收到的信息的方法。请注意,实际开发过程中还需要考虑更多细节,比如错误处理、不同环境下的适配等问题
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张大娃笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值