React Native:应用程序在后台时的应用程序内消息
React Native: in-app messages when app is in background
我一直在研究在 React Native 应用程序中实现消息传递的不同选项,特别是从服务器向客户端代码发送消息。我找到了两个主要选项:推送通知和应用内消息。
推送通知可以通过 Firebase 和 OneSignal 等服务实现,并且效果很好,但有人声称它们不是很可靠,有时消息可能会丢失。推送通知的优点是无论应用程序是在前台还是后台,它们都会起作用。
应用内消息可以通过事件总线服务实现,例如 SignalR(Azure 或独立版)、AWS SNS 或 GraphQL 订阅。这些服务非常可靠,但这种方法仅在应用程序位于前台时有效。
但是,似乎还有另一种选择似乎不像前两种那样受欢迎。此选项涉及 运行 移动设备上的本机背景 service/process 参与应用内消息交换,类似于正常的应用内消息传递。后台服务将订阅 SignalR 或 SNS 或 GraphQL,并在收到消息时在设备上显示本地通知。
最后一种方法有什么问题?为什么不喜欢它而不是混合方法(应用程序在后台时推送通知,而应用程序在前台时应用程序内消息)似乎更常用?
谢谢!
主要限制是移动设备不允许应用程序在后台保持长期连接打开。此限制在 Android 8 (Oreo) 中变得更加严格(在此处记录 https://developer.android.com/about/versions/oreo/background#services),并且在 iOS 上一直如此。某些 VoIP 应用程序有例外,但一般来说,此规则适用于所有应用程序。
关键原因之一是电池寿命。保持连接打开需要少量能量,如果用户有几十个这样的应用程序,那么这将是一个值得注意的问题。因此,Google 和 Apple 都围绕着向所有通知都通过其传递的设备打开单一连接进行了标准化。
就其价值而言,iOS 通知实际上非常可靠且一致。 Android 由于各种 OEM 所做的修改,问题更多。 (此处记录:https://dontkillmyapp.com/)
一种解决方法是,您可以在 Google Play 商店之外分发应用程序,通过请求特殊权限绕过此限制,但是,它仍然会像 FCM 一样受到 OEM 问题的影响,并且很可能更糟。
我一直在研究在 React Native 应用程序中实现消息传递的不同选项,特别是从服务器向客户端代码发送消息。我找到了两个主要选项:推送通知和应用内消息。
推送通知可以通过 Firebase 和 OneSignal 等服务实现,并且效果很好,但有人声称它们不是很可靠,有时消息可能会丢失。推送通知的优点是无论应用程序是在前台还是后台,它们都会起作用。
应用内消息可以通过事件总线服务实现,例如 SignalR(Azure 或独立版)、AWS SNS 或 GraphQL 订阅。这些服务非常可靠,但这种方法仅在应用程序位于前台时有效。
但是,似乎还有另一种选择似乎不像前两种那样受欢迎。此选项涉及 运行 移动设备上的本机背景 service/process 参与应用内消息交换,类似于正常的应用内消息传递。后台服务将订阅 SignalR 或 SNS 或 GraphQL,并在收到消息时在设备上显示本地通知。
最后一种方法有什么问题?为什么不喜欢它而不是混合方法(应用程序在后台时推送通知,而应用程序在前台时应用程序内消息)似乎更常用?
谢谢!
主要限制是移动设备不允许应用程序在后台保持长期连接打开。此限制在 Android 8 (Oreo) 中变得更加严格(在此处记录 https://developer.android.com/about/versions/oreo/background#services),并且在 iOS 上一直如此。某些 VoIP 应用程序有例外,但一般来说,此规则适用于所有应用程序。
关键原因之一是电池寿命。保持连接打开需要少量能量,如果用户有几十个这样的应用程序,那么这将是一个值得注意的问题。因此,Google 和 Apple 都围绕着向所有通知都通过其传递的设备打开单一连接进行了标准化。
就其价值而言,iOS 通知实际上非常可靠且一致。 Android 由于各种 OEM 所做的修改,问题更多。 (此处记录:https://dontkillmyapp.com/)
一种解决方法是,您可以在 Google Play 商店之外分发应用程序,通过请求特殊权限绕过此限制,但是,它仍然会像 FCM 一样受到 OEM 问题的影响,并且很可能更糟。