Firebase后台服务更新数据库

19

在我的Android应用程序中,当我从后台服务更新Firebase数据库时,我遇到了非常奇怪的行为。 值得注意的是,我已将SetPersistanceEnabled设置为TRUE。 我的Java API版本是2.5.0 +。

以下是发生的情况:

我启动了一个粘性的后台服务。 此服务接收GCM并在接收这些消息时对Firebase DB进行一些更新。 当应用程序在前台运行时,更新可以正常工作,但是当应用程序被杀死时,更新不会反映到在线数据库中。

我可以确认当应用程序被杀死时,服务会重新启动自己,并且当GCM到达时,Firebase UpdateChildren的CompletionListener会被调用而没有错误,这意味着数据已经被持久化(根据控制台上打印的日志语句我可以确认这一点)。 但是为什么我看不到在线更新。 我以为因为启用了持久性,它可能会在应用再次联机时同步回来,但是不是这样,在重新启动应用程序并在前台运行后,我仍然看不到更新同步到DB中。

是否有人遇到过类似的问题。 如果我做错了什么,请告诉我。

顺便说一下,我在应用程序中没有使用goOnline或goOffline。


1
你找到解决这个问题的方法了吗?我也遇到了同样的问题:http://stackoverflow.com/questions/37991929/error-on-getting-realtime-database-reference-in-service - Faris Jameel
1
我想从粘性服务更新数据库,而不是从IntentService更新。 - Faris Jameel
应用程序被杀死,这是什么意思?应用程序进程被杀死了吗? - Marian Paździoch
@MarianPaździoch 背景服务是指当应用程序不在前台时,您希望更新 Firebase。 - ATO
出于好奇,当您在接收GCM时已经在做所有事情时,为什么要使用客户端依赖项。我相信,您可以在服务器端完成所有这些操作。 - Rahul
显示剩余11条评论
2个回答

0

这是 FCM,而非 GCM...当缺乏 Context 时,可能无法实例化所需的对象。只需在服务器端更新记录,然后在下次同步时更新本地版本。


0
我能够使用这段代码将数据上传到Firebase实时数据库。
class MyFirebaseService: FirebaseMessagingService() {

    override fun onMessageReceived(p0: RemoteMessage) {
        FirebaseData().uploadLog("${p0.data}")
    }

}

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