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
}
相关推荐
AI多Agent协作实战派1 小时前
AI多Agent协作系统实战(二十八):顶栏统一战争——从1个页面异常到31个页面全量对齐
数据库·人工智能·uni-app
00后程序员张1 小时前
iOS加固技术路线全面解析:Bitcode模式、源码模式与汇编模式对比及爱加密优势
android·汇编·ios·小程序·uni-app·cocoa·iphone
2501_9160088918 小时前
iOS IPA文件反编译与打包操作方法,拆包分析防护和加固打包
android·macos·ios·小程序·uni-app·cocoa·iphone
name好难取诶1 天前
通过对云基座和离线基座的对比,帮助开发者理解如何在不同场景下选择合适的打包方案。 什么是“基座” 在 UniApp 中,基座(也称“ ...
开发语言·uni-app·php
2501_915921431 天前
iOS手游安全反外挂解决方案:基于Xcode的加固混淆特色详解
android·安全·ios·小程序·uni-app·iphone·xcode
2501_916007471 天前
iOS App分发教程 App Store、TestFlight 与 Ad Hoc 的配置与上传方法
android·ios·小程序·https·uni-app·iphone·webview
qq_316837751 天前
uniapp 打包APP 使用 Galacean Effects 的特效
uni-app
古韵2 天前
你的 uni-app 分页,一个 hook 搞定竞态和加载
javascript·vue.js·uni-app
游戏开发爱好者82 天前
iOS应用加固方案全解析:源码加固与IPA在线加固对比
android·macos·ios·小程序·uni-app·cocoa·iphone
满栀5852 天前
uni-app 小程序开发实战:从路由踩坑、数据对接到 UI 优化的全方位复盘
ui·uni-app·notepad++