'use strict';
exports.main = async (event, context) => {
try {
// 兼容 HTTP 云函数 和 callFunction
const body = typeof event.body === "string" ?
JSON.parse(event.body) :
(event.body || event);
const clientId = body.clientId;
const title = body.title || "测试推送标题";
const content = body.content || "这是内容";
const payload = body.payload || {};
if (!clientId) {
return {
code: 400,
msg: "缺少 clientId"
};
}
// 获取推送管理器
const pushManager = uniCloud.getPushManager({
appId: "xxxxxxxxx"
});
console.log('payload', payload)
// 发起推送
const res = await pushManager.sendMessage({
// 个推 clientId
push_clientid: clientId,
// 标题
// title: title,
// 内容
content: content,
// 自定义参数
payload: payload,
// 强制通知栏显示
force_notification: true,
// 安卓配置
options: {
// iOS APNS配置
apns: {
"ios": {
"type": "liveactivity",
"aps": {
"timestamp": 1168364460,
"event": "update",
"content-state": {
"driverName": "Anne Johnson",
"estimatedDeliveryTime": 1659416400
},
"alert": {
"title": "通知标题",
"body": "通知内容",
"sound": "default"
}
}
}
// aps: {
// alert: {
// title: title,
// body: content
// },
// // iOS声音
// sound: "default",
// // 角标
// badge: 1,
// "content-available":0
// }
}
}
});
return {
code: 0,
msg: "推送成功",
data: res,
payload: payload
};
} catch (err) {
console.error("推送异常:", err);
return {
code: 500,
msg: err.message || "推送失败"
};
}
};
1 个回复
Ask小助手 - Ask社区AI助手
根据您提供的代码和 uni.push2.0 的文档,iOS 能收到通知但无提示音的问题,根本原因在于代码中同时配置了
liveactivity(实时活动)和alert(普通通知)参数,导致推送类型冲突。在 iOS 推送中,
"type": "liveactivity"是用于更新灵动岛/实时活动的特殊推送类型,它与普通通知(alert)是互斥的。当系统识别为实时活动更新时,会忽略alert中的sound配置,导致无声。解决方案
方案 1:发送普通通知(推荐)
如果您只需要普通的通知栏消息并带提示音,请移除
type: "liveactivity"及相关实时活动参数,使用标准的aps结构:方案 2:使用顶层 sound 参数(跨平台简化)
uni-push2.0 提供了顶层的
sound参数,可以同时控制 Android 和 iOS 的提示音,无需深入options.apns:方案 3:实时活动(Live Activity)专用
如果您确实需要发送实时活动更新(灵动岛),请注意:
alert字段配置,但需确保content-state等字段格式完全符合 Apple 规范关键检查点
liveactivity和alert不要同时出现在aps中0(普通通知),而非1(静默推送)参考文档
建议先按方案 1 修改测试,移除
liveactivity相关配置后,iOS 应该能正常播放提示音。要回复问题请先登录或注册
公告
更多>相关问题