Android - 当应用程序在后台运行时,Firebase 实时数据库不会更新

问题描述 投票:0回答:1

我正在尝试从

firebase realtime database
更新
FirebaseMessagingService
,但从
FirebaseMessagingService
更新时它永远不会更新。

所以逻辑是,当用户A向用户B(后台应用程序)发送消息时,它在将消息保存到本地数据库后调用

FirebaseMessagingService
,我需要更新消息状态以进行传递,以便用户A会收到他的消息已到达用户B的通知用户 B 收到通知,我可以在日志中看到用户 B 日志在设置该值之前已执行,并且其侦听器永远不会被调用以判断成功或失败。我还交叉检查了数据库参考是否正确。

我尝试使用 setValue 和 updateChildren 方法,但未能更新数据。我删除了监听器以获得干净的代码。

1:

DatabaseReference messageRef = databaseReference.child(messageNodeKey);
Map<String, Object> update = new HashMap<>();
   update.put("Status", msgstatus);
   messageRef.updateChildren(update);

2:

DatabaseReference messageRef = databaseReference.child(messageNodeKey).child("Status");
messageRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Log.d(TAG, "onDataChange: "+snapshot+" "+snapshot.exists());
                if (snapshot.exists()){
                    messageRef.setValue(msgstatus)   
            }
            }
            
        

当设备位于前台时,我可以更新该值,但当它从

FirebaseMessagingService
调用时则不能更新该值。谁能帮我解决这个问题。

java android firebase firebase-realtime-database
1个回答
0
投票

当应用程序进入后台时,Android 很可能会在几分钟后关闭连接。来自文档

在 Android 上,Firebase 自动管理连接状态以减少带宽和电池使用量。当客户端没有活动侦听器、没有挂起的写入或

onDisconnect
操作,并且未通过
goOffline
方法显式断开连接时,Firebase 将在 60 秒不活动后关闭连接。

如果您启用调试日志记录,您也许能够确认这一点。

如果这确实是原因,您可以(检测此连接状态,然后)切换 Firebase 客户端离线,然后在线以返回到连接状态。

© www.soinside.com 2019 - 2024. All rights reserved.