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
}
相关推荐
00后程序员张1 天前
使用克魔助手(Keymob)查看 iOS 设备日志与崩溃报告
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915918411 天前
通过IPA 结构调整和资源指纹变化来处理 iOS 应用相似度问题
android·ios·小程序·https·uni-app·iphone·webview
Liu.7741 天前
vscode运行开发uniapp项目
vscode·uni-app
ewboYang1 天前
自学全栈搭建python [fastapi] + uniapp [vue3+ts]项目
python·uni-app·fastapi
BUG创建者1 天前
uniapp 开发app时播放实时视频海康ws的流数据
前端·javascript·vue.js·uni-app·html·音视频
2501_915918411 天前
网站抓包解析,掌握浏览器请求和 HTTPS 数据分析的流程
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张1 天前
iOS开发者工具有哪些?Xcode、AppUploader(开心上架)、Fastlane如何使用
android·macos·ios·小程序·uni-app·iphone·xcode
anyup2 天前
弃用 vue-i18n?只用 uView Pro 我照样做国际化!
前端·架构·uni-app
专科3年的修炼3 天前
uni-app移动应用开发
uni-app
儒雅的烤地瓜3 天前
小程序 | Vue小程序开发框架:MPvue与UniApp深度解析
前端·vue.js·uni-app·nodejs·cli·mpvue