React Native:应用程序在后台时的应用程序内消息
Posted
技术标签:
【中文标题】React Native:应用程序在后台时的应用程序内消息【英文标题】:React Native: in-app messages when app is in background 【发布时间】:2020-06-23 03:47:34 【问题描述】:我一直在研究在 React Native 应用程序中实现消息传递的不同选项,特别是从服务器向客户端代码发送消息。我发现了两个主要选项:推送通知和应用内消息。
推送通知可以通过 Firebase 和 OneSignal 等服务实现,并且运行良好,除非有人声称它们不是很可靠,有时消息可能会丢失。推送通知的优势在于,无论应用程序是在前台还是后台,它们都能正常工作。
应用内消息可以通过事件总线服务实现,例如 SignalR(Azure 或独立)、AWS SNS 或 GraphQL 订阅。这些服务非常可靠,但这种方法仅在应用处于前台时才有效。
但是,似乎还有另一个选项似乎不像前两个那样受欢迎。此选项涉及在参与应用内消息交换的移动设备上运行本机后台服务/进程,类似于正常的应用内消息传递。后台服务会订阅 SignalR 或 SNS 或 GraphQL,并在收到消息时在设备上显示本地通知。
最后一种方法有什么问题,为什么不喜欢它而不是似乎更常用的混合方法(应用在后台时推送通知,而应用在前台时推送应用内消息)?
谢谢!
【问题讨论】:
【参考方案1】:主要限制是移动设备不允许应用程序在后台保持长期连接打开。这个限制在 android 8 (Oreo) 中得到了更强有力的执行(在此处记录 https://developer.android.com/about/versions/oreo/background#services),这在 ios 上一直是正确的。某些 VoIP 应用程序例外,但一般来说,此规则适用于所有应用程序。
其中一个关键原因是电池寿命。保持连接打开需要少量能量,如果用户有几十个这样的应用程序,那么这将是一个值得注意的问题。因此,Google 和 Apple 都已标准化,围绕向设备开放的单一连接来传递所有通知。
不管怎样,iOS 通知实际上是非常可靠和一致的。由于各种 OEM 的修改,Android 的问题更大。 (记录在这里:https://dontkillmyapp.com/)
一种解决方法是,您可以通过请求特殊权限绕过此限制,在 Google Play 商店之外分发应用程序,但是,它仍然会像 FCM 一样受到 OEM 问题的影响,而且可能更糟。
【讨论】:
以上是关于React Native:应用程序在后台时的应用程序内消息的主要内容,如果未能解决你的问题,请参考以下文章
应用程序被杀死时的回调 - React Native [重复]
当应用程序使用 react-native-background-task 在后台运行时如何调用函数?
除了 react-native-background-task 之外,还有其他方法可以在 React Native 中执行后台任务吗?