You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过Firebase Cloud Messaging Console播放自定义推送音效问题求助

解决方案

1. 修正FCM控制台的Payload格式

FCM控制台手动加键值对时,默认会把自定义参数放在aps字典外面,这不符合APNs的要求——自定义音效的sound字段必须嵌套在aps里才能被系统识别。你需要直接切换到控制台的「JSON」模式,手动构造完整的payload结构:

{
  "aps": {
    "alert": "你的通知内容",
    "sound": "custom_sound.wav"
  }
}

别再用「Custom data」单独加sound键,直接用上述JSON格式提交就能解决参数位置错误的问题。

2. 确认音效文件的有效性

  • 检查custom_sound.wav格式:必须是PCM编码,采样率44.1kHz,16位,时长不超30秒,单/立体声都可以
  • 打开Xcode,选中该文件,确认「Target Membership」已经勾选了你的项目target,确保文件被正确打包进App
  • 文件名要完全匹配,iOS文件系统区分大小写,别出现拼写或大小写错误

3. 前台通知的自定义音效处理

如果App在前台运行时需要播放自定义音效,系统不会自动处理,得手动在通知代理里实现播放逻辑,比如用userNotificationCenter:willPresentNotification:withCompletionHandler::

// Objective-C示例
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler {
    NSDictionary *apsDict = notification.request.content.userInfo[@"aps"];
    NSString *soundName = apsDict[@"sound"];
    if (soundName && soundName.length > 0) {
        NSURL *soundURL = [[NSBundle mainBundle] URLForResource:soundName withExtension:nil];
        if (soundURL) {
            AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil];
            [player play];
        }
    }
    completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert);
}

为什么云函数发送有效?

因为你在云函数里构造的payload是符合APNs规范的,sound字段正确放在了aps字典内部,FCM会直接把这个合规结构转发给APNs;而控制台手动加参数的默认逻辑是把自定义参数放在aps外,导致APNs识别不了这个音效配置。

内容的提问来源于stack exchange,提问作者Chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:55:19