云计算百科
云计算领域专业知识百科平台

自有服务器使用uni-push2.0推送消息到小程序

个人学习浅薄,看文档三天才搞懂,市面上也并没有看到相应的我这一情况的文档,写一篇记录,如有错漏与不足之处请斧正

Uni-push 推送实现全过程:

        自己后端部署在自有服务器上,推送消息给指定小程序用户。

需要用自己的服务器后端去调用云函数url来使用uni-push2.0(uni-push1.0推送app)

关于各种配置我简略写一下就直接上前后端代码吧(详细配置可以看uniapp之消息推送功能uniPush2.0对接总结_uni-push2.0-CSDN博客或者unipush2.0实现APP消息推送(1)_unipush.sendmessage-CSDN博客,把对应app的内容改成小程序的就行)

在开发者中心中注册账号(认证公司或者个人)申请应用获取appid(后续要用),在里面配置好小程序的appid

在uniCloud控制台中新建配置服务器并在开发者中心中绑定

下载Hbuilder后,绑定uni-cloud云空间,在manifest.json中配置微信小程序配置,加入uni-push插件

在cloudfuntions中新建云函数

准备工作结束可以上代码了

前端云函数

一些坑:必须确定ctrl+s后在上传修改好的函数,如一直不成功,可以尝试下载云函数看看是否修改成功

目前只是简单的通知,并没有做校验只是功能实现

const uniPush = uniCloud.getPushManager({appId:"__UNI__BXXXXXXX"}) //注意这里需要传入你的应用appId,用于指定接收消息的客户端
exports.main = async (event, context) => {
// 解析 event.body,假设 event.body 是一个 JSON 字符串
const body = JSON.parse(event.body);//可能是我传输不对,我无法直接前端使用这个json,做了转换后才能使用,调试了我很久,是个坑,多看云函数的日志
// 使用解析后的 body 中的 title 和 content
return await uniPush.sendMessage({
"push_clientid": body.push_clientid, // 从 event.body 中获取推送客户端 ID
"title": body.title, // 动态获取 title
"content": body.content, // 动态获取 content
"payload": {
"type": body.payload.type // 额外的 payload 内容
}
});
};

后端工具类

@Autowired
private RestTemplate restTemplate;

// uni-push 云函数 URL
@Value("${uni.push.url}")
private String pushUrl;

//pushClientid为前端获取的push_clientid,type是我自己额外添加的标识字段

public String sendPushMessage(String pushClientid, String type) {
// 构建请求体
Map<String, Object> pushData = new HashMap<> ();
pushData.put("push_clientid", pushClientid);
pushData.put("title", "是");
pushData.put("content", "这是");
// 以上三个为必传字段
Map<String, Object> payloadData = new HashMap<> ();
payloadData.put("type", type);
pushData.put("payload",payloadData); // 可选的额外数据
// 设置请求头
HttpHeaders headers = new HttpHeaders();
headers.set("Content-Type", "application/json");

// 构建请求实体
HttpEntity<Map<String, Object>> entity = new HttpEntity<>(pushData, headers);

// 发送 HTTP POST 请求
try {
ResponseEntity<String> response = restTemplate.exchange(pushUrl, HttpMethod.POST, entity, String.class);
return response.getBody();
} catch (Exception e) {
e.printStackTrace();
return "推送失败";
}
}

由此实现

使用Hbuilder运行微信开发助手后产生的日志

由此,使用uni-push调用云函数url功能实现

功能扩展

        可以使用别名来使用push_clientid(有相应的方法,可以在登陆注册的使用)

关于我的解决方案

在用户每次做登陆注册的时候,让前端把push_clientid一起传给我,然后我自己在redis中,对自己用户的userid和push_clientid做了一个映射,因为push_clientid三个月后就有可能过期一次

赞(0)
未经允许不得转载:网硕互联帮助中心 » 自有服务器使用uni-push2.0推送消息到小程序
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!