7***@qq.com
7***@qq.com
  • 发布:2026-08-07 15:38
  • 更新:2026-08-07 15:39
  • 阅读:13

uni.push2.0 消息推送 ios能收到通知,无法收到提示音。

分类:ASK社区

'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 || "推送失败"  
    };  

}  

};

2026-08-07 15:38 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。

根据您提供的代码和 uni.push2.0 的文档,iOS 能收到通知但无提示音的问题,根本原因在于代码中同时配置了 liveactivity(实时活动)和 alert(普通通知)参数,导致推送类型冲突

在 iOS 推送中,"type": "liveactivity" 是用于更新灵动岛/实时活动的特殊推送类型,它与普通通知(alert)是互斥的。当系统识别为实时活动更新时,会忽略 alert 中的 sound 配置,导致无声。

解决方案

方案 1:发送普通通知(推荐)

如果您只需要普通的通知栏消息并带提示音,请移除 type: "liveactivity" 及相关实时活动参数,使用标准的 aps 结构:

const res = await pushManager.sendMessage({  
    push_clientid: clientId,  
    title: title,        // 建议加上 title,否则 iOS 可能显示应用名称  
    content: content,  
    payload: payload,  
    force_notification: true,  
    options: {  
        apns: {  
            "ios": {  
                // 移除 "type": "liveactivity"  
                "aps": {  
                    "alert": {  
                        "title": title,  
                        "body": content  
                    },  
                    "sound": "default",  // 关键:系统默认提示音  
                    "badge": 1,  
                    "content-available": 0  // 0 表示普通通知,1 是静默推送  
                }  
            }  
        }  
    }  
});

本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码

方案 2:使用顶层 sound 参数(跨平台简化)

uni-push2.0 提供了顶层的 sound 参数,可以同时控制 Android 和 iOS 的提示音,无需深入 options.apns

const res = await pushManager.sendMessage({  
    push_clientid: clientId,  
    title: title,  
    content: content,  
    payload: payload,  
    force_notification: true,  
    sound: "default",  // 顶层参数,同时生效于 iOS 和 Android  
    badge: 1  
});

本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码

方案 3:实时活动(Live Activity)专用

如果您确实需要发送实时活动更新(灵动岛),请注意:

  • 实时活动更新通常没有提示音,这是 iOS 系统的设计
  • 如需提醒用户,应通过 alert 字段配置,但需确保 content-state 等字段格式完全符合 Apple 规范
  • 建议普通通知和实时活动分开推送,不要混用

关键检查点

  1. 不要混用类型liveactivityalert 不要同时出现在 aps
  2. 检查 content-available:确保设置为 0(普通通知),而非 1(静默推送)
  3. 设备静音检查:确认测试手机未开启静音模式/勿扰模式
  4. 证书环境:确认使用的是生产环境 APNs 证书(上架后)还是开发证书(调试时)

参考文档

建议先按方案 1 修改测试,移除 liveactivity 相关配置后,iOS 应该能正常播放提示音。

内容为 AI 生成,仅供参考

要回复问题请先登录注册