Firebase 反应本机:应用程序处于后台时的应用程序内消息

Firebase 反应本机:应用程序处于后台时的应用程序内消息,firebase,react-native,push-notification,onesignal,event-bus,Firebase,React Native,Push Notification,Onesignal,Event Bus,我一直在研究在React原生应用程序中实现消息传递的不同选项,特别是从服务器向客户端代码发送消息。我发现了两个主要选项:推送通知和应用内消息 推送通知可以通过诸如Firebase和OneSignal之类的服务实现,并且工作良好,除非有人声称推送通知不太可靠,有时消息可能会丢失。推送通知的优点是,无论应用程序是在前台还是后台,推送通知都可以工作 应用内消息可以通过事件总线服务实现,例如SignalR Azure或standalone、AWS SNS或GraphQL订阅。这些服务相当可靠,但这种方法

我一直在研究在React原生应用程序中实现消息传递的不同选项,特别是从服务器向客户端代码发送消息。我发现了两个主要选项:推送通知和应用内消息

推送通知可以通过诸如Firebase和OneSignal之类的服务实现,并且工作良好,除非有人声称推送通知不太可靠,有时消息可能会丢失。推送通知的优点是,无论应用程序是在前台还是后台,推送通知都可以工作

应用内消息可以通过事件总线服务实现,例如SignalR Azure或standalone、AWS SNS或GraphQL订阅。这些服务相当可靠,但这种方法只有在应用程序处于前台时才有效

然而,似乎还有另一种选择,它不像前两种选择那样受欢迎。此选项涉及在移动设备上运行本机后台服务/进程,移动设备参与应用程序内消息交换,类似于正常的应用程序内消息传递。后台服务将订阅SignalR或SNS或GraphQL,并在收到消息时在设备上显示本地通知

最后一种方法有什么问题?为什么不在应用程序位于后台时使用混合方法推送通知,而在应用程序位于前台时使用应用程序内消息,这似乎更常用


谢谢

主要限制是移动设备不允许应用程序在后台保持长时间的连接打开。这一限制在这里记录的Android 8 Oreo中得到了更有力的实施,在iOS上也是如此。某些VoIP应用程序有例外,但通常,此规则适用于所有应用程序

其中一个关键原因是电池寿命。保持连接打开只需要少量的精力,如果一个用户有几十个这样的应用程序,那么这将是一个值得注意的问题。因此,谷歌和苹果都已将所有通知都通过单一连接发送到设备上的做法标准化

值得一提的是,iOS通知实际上非常可靠且一致。由于各种原始设备制造商的修改,安卓系统的问题更大。此处记录:

一种解决方法是,您可以在Google Play Store之外分发应用程序,该应用程序通过请求特殊权限绕过此限制,但是,它仍然会受到OEM问题的影响,就像FCM一样,而且可能更糟