FCM自定义声音在iOS后台模式下无法工作

5
近期FCM有什么变化吗?我们的应用程序在推送通知中使用自定义声音,之前Android和iOS都可以正常工作,无论是在前台、后台还是关闭状态下。但最近似乎发生了一些变化,同样的PHP代码在应用程序关闭或在后台模式下突然停止了自定义声音功能(通知已传递,但只使用默认设备声音)。
我通过将声音文件包含在/app/src/res/raw中使Android再次正常工作(我们过去一直将它们放在那里,但长时间以来不需要也总是能工作...显然现在又需要了)。对于iOS,它仍然无法正常工作!我不确定这是我在xCode中做错了什么,还是需要更改用于触发通知的PHP代码。所以请查看以下内容:
我正在使用:
- xCode 11.6 - iOS目标11.0 - 在iOS 13.6.1真实设备上测试 - 声音文件位于{项目名称}/资源/,并使用“如果需要则复制”和“创建组”两个选项添加
用于触发通知的服务器端代码(之前始终正常工作且未更改):
{
  "notification": {
      "title": "Test Title",
      "body": "Test Body",
      "sound": "sound_file.mp3",
  },
  "registration_ids": ["APA...g","fl...CS"]
}

请帮忙...以为自己几年前就已经克服这一切了...烦死了!


忘记提到了...让人困扰的是,我们有一些应用已经超过一个月没有进行任何更新或操作,但突然间停止工作了(在iOS后台模式下播放自定义声音)。因此,看起来可能需要更改服务器端的PHP代码,对吗?我已尝试在负载中使用 forceStart、priority、content_available 和 mutable_content,但结果相同。也许有些新的APN特定标签必须要有? :-( - Mike Darling
这也发生在我们身上。有时候今天自定义声音在iOS上不再播放。我希望Google会尽快修复这个问题。 - Olivier Brand
啊,我刚刚测试了我的旧版本构建,重新检查了 Firebase 集成,更改了自定义声音文件格式,但是没有运气!FCM 或 APNs 方面一定有所变化。星期六 :( - BaSha
@MikeDarling,我也在使用mp3文件,根据苹果文档,我们不应该将mp3转换为推荐格式之一吗?https://developer.apple.com/documentation/usernotifications/unnotificationsound - BaSha
@MikeDarling 我们几天前也遇到了同样的问题。最初认为这是与iOS 13.6有关的,希望13.6.1可以解决它。我没有想到与FCM有关,但由于我们使用它,它可能是罪魁祸首。由于这不是所有应用程序都普遍存在的问题,所以它必须与FCM有关。我们有两个不同的应用程序,都使用支持的.caf格式的不同自定义声音,这些声音已经使用多年,现在突然变成了标准系统声音。 - MWesterhoff
显示剩余5条评论
6个回答

2

1
我们向Google / Firebase支持创建了一个工单。 他们的回答: 我们这边没有任何正在进行的问题可能导致自定义声音无法使用。但是,通过指定自定义声音,声音文件必须已经在用户设备上,可以在应用程序的捆绑包中或应用程序容器的库/声音文件夹中。您可以参考此文档以获取更多信息。 对于FCM,没有任何额外的声音处理,只需传递有效负载字段,因此只要客户端上的有效负载显示“声音”文件已成功传递,设置可能存在问题。如果您的应用程序和声音文件没有最近的更改,则可能是由苹果引起的问题。因此,最好与他们联系。

我们发现我们似乎使用遗留的HTTP API,因此我们测试了更新的HTTP v1版本。 (在此处描述:https://firebase.google.com/docs/cloud-messaging/migrate-v1 ) 这为我们解决了问题。自定义声音回来了。

同时,Firebase支持回复如下,并现在承认遗留的HTTP API存在问题。

感谢您分享您的观察,马克。
我们收到了类似的报告,涉及此问题,这表明这不是一个不寻常的问题,与您提到的 Stack Overflow 讨论中不断增加的报告有关。因此,我们最近刚刚确定了这个问题是我们的 Legacy API 的一个错误,它不能正确处理 iOS 的自定义声音。我们的工程团队已经找到了解决这个问题的方法,目前我们无法确定发布时间。一旦我有这个问题的更新,我会告诉您。
目前,您可能考虑使用我们的 HTTP v1 API 来发送消息。对于可能给您带来的不便,我们深表歉意。

我不确定谷歌怎么能说没有问题。他们测试过吗?我认为这个问题确实存在,因为我们都同时发现了它。迁移到新的API并不是一个合适的答案。如果声音不再起作用,这意味着有些东西已经改变了,如果在没有适当通知Firebase社区的情况下发生了某些变化,那么这就是一个真正的问题,他们需要修复或对此有清晰的解释。 - Olivier Brand
是的,我们几天前从Firebase得到了相同的响应(看起来他们已经“复制/粘贴”搞定了!)。我们已经回复确认一切都按照他们的文档正确设置(即我们这边没有任何变化,只是这突然停止工作了)。我怀疑他们说的可能是由于苹果和/或APN负载要求的某种变化导致的...但如果是真的,显然需要Firebase相应地更新FCM才能继续工作。到目前为止,他们还没有说升级到HTTP v1是解决方案,但我们会看看的。 - Mike Darling
我们通过PubNub发送通知,迁移到HTTP v1在短时间内可能不可行。我怀疑苹果是否改变了APN,否则将会有成千上万的应用程序出现问题,但实际上并没有。 FCM文档表示我们可以传递自定义声音,这些声音对我们至关重要,已经使用了一年以上。我认为谷歌应该调查此问题,因为他们的解决方案可能非常简单(重新格式化为另一个APNS有效载荷,或者修复他们可能引入的错误)。我们的计划B实际上是绕过FCM,但这将需要我们做很多更改。 - Olivier Brand
我更新了帖子,添加了来自Firebase支持的新确认,他们已经确定了旧版HTTP API存在问题。 - MWesterhoff

1

我们刚刚联系了Firebase开发团队,他们能够重现这个问题。他们已经创建了一个内部工单来修复它。我们会在这里跟进解决进展。


太棒了!你一定有他们的裸照……我们无法让他们付款!;-) - Mike Darling
还差一点……;-) 我很幸运地通过了Flutter频道。 - Olivier Brand

1

经过与Firebase的多轮沟通,以下是当前状态更新和他们的回应:

我想让你知道,这个问题最近被识别为我们的Legacy API的一个bug,它没有正确处理iOS的自定义声音。我们的FCM专家已经找到了解决这个问题的方法,并且修复即将在我们的生产环境中发布,但我们不能分享任何确切的细节或发布时间表。修复应该让您根据您的自定义声音配置正确发送通知,并且您不需要进行任何代码更改。此外,对于您的iOS应用程序,如果应用程序关闭或处于后台状态,它仍应正确处理通知声音。

我们还被告知,目前从FCM HTTP迁移到HTTP v1是唯一的解决方法。一旦我们确认了对Legacy API的修复(大多数人都在使用),我们会再次在此发布。敬请关注...


虽然我们还没有正式从 FCM 那里听到回复,但我们已经开始收到来自我们的客户和最终用户的报告,称自定义声音再次播放。因此,问题得到解决!感谢所有帮助确认诊断的人。 - Mike Darling

0
请大家注意,谷歌已经解决了这个问题!!

确认!谢谢。 - lui

0

在我的端口,无论我设置什么声音名称,iOS 端总是接收到 "sound":"default"。

发送中:

{
  "notification": {
      "title": "Alert",
      "body": "Test Message",
      "sound": "alert.aiff",
  },
  "registration_ids": ["APA...g","fl...CS"]
}

接收:

{
    aps =     {
        alert =         {
            body = "Test Message";
            title = Alert;
        };
        "content-available" = 1;
        sound = default;
    };
}

唯一的原因是FCM在重定向到APNS时将声音设置为默认值。需要咨询谷歌。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接