Firebase是否总是通过APNs发送通知?

5
我注意到Firebase文档中提到了以下内容:

若消息的payload被提供或向iOS设备发送消息的content_available选项被设置为true,则该消息会通过APNs发送,否则将通过FCM连接服务器发送。

请问有人能解释一下这是什么意思吗?
我原先认为所有发送至iOS设备的推送通知都是首先发送到Apple,然后由Apple转发给对应的设备,但这里暗示着他们直接发送消息到设备?
即使在iOS上关闭应用程序时,这种方式是否可行?
我感到困惑,谢谢。
2个回答

3
当应用程序在前台运行时,FCM可以直接连接而不是通过APNs传输数据类型的消息。在后台发送的消息将通过APNs传送,这符合您的预期。如果您愿意,您实际上可以查看FCM客户端的源代码(source of the FCM client)!
您可以使用shouldEstablishDirectChannel属性来控制是否使用此功能。
从发送方的角度来看,您不需要过于担心这个问题——根据消息的类型和是否有客户端连接,FCM服务会自动透明地处理它。

这是我不理解的地方:链接上的文档是关于他们的http API,而不是他们的Objective-C SDK(FCM客户端)。 Firebase有很多工具和服务,所以弄清楚它们的含义非常困难。为什么他们会在描述如何调用Web http API的页面中添加有关客户端SDK的信息?这仍然毫无意义。 - SudoPlz
1
免责声明:我在Firebase工作!这个注释的原因只是因为一些人看到他们发送的消息没有通过APNs发送,所以感到困惑。找到一个好的解决方案确实很棘手!content-available是一个iOS特定字段,所以它包括iOS的详细信息。 - Ian Barber
关于这个问题,Ian,请问 fcm-to-device 直接连接能否创建可见通知(通过在接收它的设备的客户端上分派本地通知),或者该通道仅适用于仅需要显示给用户的数据消息? - SudoPlz

2
阅读文档后,我的理解是:如果通知可以被推断为针对iOS设备(无论是从通知负载还是content-available键),它将直接绕过FCM并发送到APNS以进行优化,因为它已经确定100%会被发送到APNS。否则,它将被发送到FCM并从那里路由到应该去的地方。它仍可能是针对iOS设备的通知,并从FCM发送到APNS,但只是无法推断出来。请注意保留HTML标签。

等等,我还是不太明白,但这份文档是用于通过FCM的http API进行调用的(它不是他们SDK的文档吧?)你是在暗示如果我们从他们的SDK进行调用,这个调用不会触发向FCM的http请求,而是直接将数据发送到APNS,如果没有通知负载或内容可用键的话? - SudoPlz
有点。我仍然不明白它如何通过检查通知负载的存在与否来判断它是否是iOS通知(如果它无论如何都可以推断出来,那么它可以),但总体思路是,如果它可以推断出它是针对iOS的,则跳过FCM并直接连接到APNS。再次强调,我没有检查实际的SDK,这只是我在阅读文档后的理解 - Can Poyrazoğlu
我认为文档没有涉及到他们的SDK,我认为这只是普通的HTTP请求,如果我们只是调用他们的Web API,那么就没有任何逻辑实现。 - SudoPlz

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