uniPush2.0对接

参考文档

https://uniapp.dcloud.net.cn/uni-push/open.html

https://uniapp.dcloud.net.cn/unipush-v2.html

https://uniapp.dcloud.net.cn/unipush_vendor_config.html

新建并关联云服务空间

访问https://unicloud.dcloud.net.cn/,登录后新建,此处我选择的阿里云

创建后,回到dcloud,关联云空间,填好信息,点击开通应用

厂商推送配置

ios

制作推送证书,参考网址https://blog.csdn.net/qq_37004501/article/details/153678754

点击Identifiers,勾选Push Notifications

都准备好,填下面的表单

华为

访问https://developer.huawei.com/consumer/cn/service/josp/agc/index.html#/myProject,点击项目,在项目设置中添加项目,添加项目后,点击推送服务,点击开通

荣耀,小米,oppo等

参考网址https://uniapp.dcloud.net.cn/unipush_vendor_config.html

配置好,回到Hbuilderx勾选对应SDK

获取客户端推送标识

javascript 复制代码
// uni-app客户端获取push客户端标记
uni.getPushClientId({
	success: (res) => {
		let push_clientid = res.cid
		console.log('客户端推送标识:',push_clientid)
	},
	fail(err) {
		console.log(err)
	}
})

服务端推送消息

回到Hbuilderx中,给项目关联云空间,关联后,选中cloudfunctions,右键选择新建云函数

点击添加公共模块或扩展库依赖

在弹窗中勾选uni-clound-push

修改云函数的index.js文件,替换appId,然后上传云函数

javascript 复制代码
// 简单的使用示例
'use strict';
const uniPush = uniCloud.getPushManager({appId:"__UNI__XXXXXX"}) //注意这里需要传入你的应用appId,用于指定接收消息的客户端
exports.main = async (event, context) => {
	let obj = JSON.parse(event.body)
	const res = await uniPush.sendMessage({
		"push_clientid": obj.cids, // 设备id,支持多个以数组的形式指定多个设备,如["cid-1","cid-2"],数组长度不大于1000  
		"title": obj.title, // 标题  
		"content": obj.content, // 内容  
		"settings": obj.settings, // 消息有效期  
		"payload": obj.payload, // 数据  
		"category": obj.category, // HarmonyOS NEXT系统(纯血鸿蒙、非安卓鸿蒙)的消息分类,要给鸿蒙设备推送时才必传  
		"force_notification": true, //填写true,客户端就会对在线消息自动创建"通知栏消息",不填写则需要客户端自己处理。  
		"request_id": obj.request_id, //请求唯一标识号,10-32位之间;如果request_id重复,会导致消息丢失  
		"options": obj.options //消息分类,没申请可以不传这个参数  
	})
	return res;
};

打开云函数

找到URL,使用postman发起get请求,即可收到推送消息

接口请求参数,注意request_id不要重复,重复会导致收不到推送

javascript 复制代码
{  
    "request_id": "212320028909901190",  
    "title": "订单信息更新",  
    "content": "尊敬的司机师傅,您接的订单(订单编号:JSYC202589143,长春市摩天活力城 - 吾悦广场(绿园店))信息已被修改,请您务必仔细核对订单信息,以免产生误差。",  
    "settings": {  
        //消息有效期设置,单位毫秒,-1表示不设离线。默认是 2 小时,取值范围:-1 ~ 3 * 24 * 3600 * 1000(3天)之间  
        "ttl": 86400000  
        },  
    "options": {  
        "HW": {  
            // 值为int 类型。1 表示华为测试消息,华为每个应用每日可发送该测试消息500条。此 target_user_type 参数请勿发布至线上。      
            "/message/android/target_user_type": 1  
        },  
        "HO": {  
            //值为int 类型。1 表示测试推送,不填默认为0。荣耀每个应用每日可发送该测试消息1000条。此测试参数请勿发布至线上。  
            "/android/targetUserType": 1  
        },  
        "VV": {  
            //值为int 类型。0 表示正式推送;1 表示测试推送,不填默认为0。此 pushMode 参数请勿发布至线上。  
            "/pushMode": 1  
        },  
        "XM": {  
            //新小米消息分类下,无论公信私信,/extra.channel_id 都必传,否则请求小米厂商接口会被拦截导致推送失败。    
            "/extra.channel_id": "填写小米平台申请的渠道id"  
        }  
    },  
    "category": {  
         //HarmonyOS NEXT系统(纯血鸿蒙、非安卓鸿蒙)的消息分类,要给鸿蒙设备推送时才必传  
        "harmony":"MARKETING"  
    },  
    //payload是点击通知栏消息后,传给客户端click回调的自定义参数  
    "payload": {  
        "data1": "自定义",  
        "data2": 2  
    }  
}

推送消息监听

javascript 复制代码
//App.vue
onLaunch: function(options) {
    console.log('App 启动参数:', JSON.stringify(options));
    // #ifdef APP
    uni.onPushMessage((res) => {
        console.log("收到推送消息:", res.data.payload) //监听推送消息
        const id = res.data.payload.id
        //跳转对应页面
    })
    // #endif
}

推送权限

javascript 复制代码
function getPush() {
	// #ifdef APP
	if (permission.isIOS) {
		var UIApplication = plus.ios.import("UIApplication");
		var app = UIApplication.sharedApplication();

		var enabledTypes = 0;

		// iOS 8 及以上版本的判断逻辑
		if (app.currentUserNotificationSettings) {
			var settings = app.currentUserNotificationSettings();
			enabledTypes = settings.plusGetAttribute("types");
			plus.ios.deleteObject(settings);

			if (enabledTypes == 0) {
				console.log("iOS 8+:推送权限已关闭(用户在设置里关了)");
				return false;
			} else {
				console.log("iOS 8+:推送权限已开启");
				return true;
			}
		} else {
			// iOS 7 及以下(极少见,仅作兼容)
			enabledTypes = app.enabledRemoteNotificationTypes();
			if (enabledTypes == 0) {
				console.log("iOS 7-:推送权限已关闭");
				return false;
			} else {
				console.log("iOS 7-:推送权限已开启");
				return true;
			}
		}
		plus.ios.deleteObject(app);
	} else {
		var main = plus.android.runtimeMainActivity();
		var context = main.getApplicationContext();
		var NotificationManager = plus.android.importClass('android.app.NotificationManager');
		var notificationManager = context.getSystemService(context.NOTIFICATION_SERVICE);
		if (!notificationManager.areNotificationsEnabled()) {
			showMsg('请打开手机通知功能(点击确定后在权限中授权通知功能)')
		}
		return notificationManager.areNotificationsEnabled()
	}
	// #endif
}
相关推荐
浮桥3 小时前
uniapp + h5实现悬浮活动按钮组件
前端·javascript·uni-app
笨笨狗吞噬者4 小时前
【uniapp】小程序端解决分包的uni_modules打包后产物进入主包中的问题
前端·微信小程序·uni-app
肖老师xy7 小时前
uniapp ios离线打包后xcode修改
ios·uni-app
浮桥8 小时前
uniapp + h5 -- 简易抽奖转盘组件(文字版)
前端·javascript·uni-app
特立独行的猫a8 小时前
跨平台开发实战:uni-app x 鸿蒙HarmonyOS网络模块封装与轮播图实现
android·网络·uni-app·harmonyos·轮播图·uni-app-x
iOS阿玮1 天前
开工第一天,别让AI写的代码触发3.2f封号。
uni-app·app·apple
特立独行的猫a1 天前
uniapp-x的HarmonyOS鸿蒙应用开发:tabbar底部导航栏的实现
华为·uni-app·harmonyos·鸿蒙·uniapp-x
迪巴拉15251 天前
基于Yolov8训练的Flask后端和Uniapp野生菌识别系统
yolo·flask·uni-app
中国胖子风清扬7 天前
GPUI 在 macOS 上编译问题排查指南
spring boot·后端·macos·小程序·rust·uni-app·web app