uni-push2消息推送

351 阅读2分钟

登录DCloud开发者中心

image.png

生成证书

image.png

把生成的证书信息填入

image.png

开通uni-push2选择Android包名,Android包名格式可以百度,需要提前开通云服务,阿里云有免费的额度

image.png

在hbuilder里面找到项目,鼠标右键点击项目名称,创建云开发环境选择免费的阿里云,然后关联服务云空间

image.png

image.png

创建云函数

image.png

image.png

选择统一推送服务

image.png

创建的云函数的index.js,右键云函数上传部署,扩展库依赖3张opendb表:opendb-tempdata,opendb-device,uni-id-device。公测版uniCloud,执行扩展库会自动创建。如果你使用的是uniCloud正式版需要自己创建这3张表**

image.png

'use strict';
const uniPush = uniCloud.getPushManager({
	appId: "__UNI__F46A574"
})
exports.main = async (event) => {
	let obj = JSON.parse(event.body)
	const res = await uniPush.sendMessage({
		"push_clientid": obj.cids, // 设备id,支持多个以数组的形式指定多个设备,如["cid-1","cid-2"],数组长度不大于1000  
		"title": obj.title, // 通知栏标题,长度小于20
		"content": obj.content, // 通知栏内容,长度小于50
		"payload": obj.payload, // 推送透传数据,app程序接受的数据,长度小于800字符;
		"force_notification": false, // 不创建通知栏消息
		"request_id": obj.request_id //请求唯一标识号,10-32位之间;如果request_id重复,会导致消息丢失   
	})
	return res
};

用户登录成功之后调用获取客户端唯一的推送标识

	uni.getPushClientId({
		success: (res) => {
			console.log(res.cid);
		},
		fail(err) {
			console.log(err)
		}
	})

登录成功之后获取到cid(用于给指定用户推送),cid测试只能运行自定义基座才能生效,然后勾选配置文件,离线推送需要接入厂商推送

image.png

配置云函数url化后端直接调接口然后进行推送,函数执行内存如果业务逻辑不复杂建议设置128MB节省资源

image.png

然后可以用apipost测试,payload可以传页面地址参数拼接在后面

image.png

用户登录成功之后启动监听事件,type为receive则创建一条通知栏消息,type为click则用户点击通知栏可以处理跳转页面逻辑等等,用户退出在关闭监听事件 关闭推送消息监听事件

//启动推送事件监听
	uni.onPushMessage((res) => {
		const {
			type,
			data
		} = res

		if (type === "click") {
			uni.navigateTo({
				url: `/pages/appPages/appPages?route=${data.payload}`
			})
		} else if (type === "receive") {
			uni.createPushMessage({
				title: data.title,
				content: data.content,
				payload: data.payload
			})
		}
	});