Firebase后台数据同步

时间:2016-07-18 18:43:20

标签: android firebase-realtime-database

我有一个基于Android GCM的闹钟应用程序,对于我们特定的行业用例,效果很好。

以下是现在的工作原理:后端系统会向手机发送GCM消息。 BroadcastReceiver启动闹钟活动,该活动将覆盖音量设置,播放闹钟,打开背光,在锁定屏幕上显示全屏UI,并在闹钟解除时与后端进行通信(通过上游GCM)。手机可以重新启动,用户无法启动应用程序,当后端推送GCM消息时,闹钟仍会启动。

编程设计问题:用FireBase替换它的正确方法是什么?

我尝试过的方法:

  • 只需将FCM替换为FCM(不使用FireBase实时数据库)
  • 启动时启动服务(并在onCreate中启动),以保留对FireBase实时数据库的引用。 (https://gist.github.com/vikrum/6170193

这两种方法都有效。当然,用FCM替换GCM很简单。在服务中保持FB引用是否处于警报的正确架构中?感觉不对..

我还没有用keepSynced(true)编码。也许这就是我应该使用的东西。我正在寻找一种使用FireBase数据同步而不必直接处理FCM RemoteMessageBuilder层的设计 - 我将能够淘汰许多XMPP代码,Windows服务等。

使用FireBase实现闹钟的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

guidance from Doug Stevenson on Quora是我发现的最好的:

  

Firebase云消息传递和Firebase实时数据库之间的最大区别在于:通过消息传递,即使应用程序未运行,您也可以将设备从睡眠状态唤醒。数据库只能在应用程序当前正在运行时接收已注册侦听器的更新,并且设备未处于打盹模式(对于Android M)。

     

当用户在您的应用中并主动与其数据进行交互时,请使用实时数据库。

     

当您不知道用户是否在您的应用中,但您希望将其置于应用中时(或让您的应用在您决定的特定时刻执行某项操作)时,请使用云消息传递。

     

消息传递也有非常有限的有效载荷大小(4k)。使用数据库,您可以从结构中的任何节点读取所需数量。

     

我在一般意义上讲的是所有Android,iOS和Chrome。每个平台都有自己特定的处理消息的方式,但语义相似。