【问题标题】:Keeping firebase connection保持firebase连接
【发布时间】:2017-07-27 18:44:51
【问题描述】:

我为 Android 操作系统构建了一个聊天,我想一直连接到 firebase。我的建议是实现一个后台服务,检测与 firebase 的断开连接并在断开连接后重新连接。 我的服务代码:

public class FirebaseConnection extends Service {

DatabaseReference connectedRef;

  @Override
  public void onCreate() {

  }

  @Override
  public int onStartCommand(Intent intent, int flags, int startId) {

  connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected"); 
  connectedRef.addValueEventListener(new ValueEventListener() { 
  @Override 
  public void onDataChange(DataSnapshot snapshot) { 
  boolean connected = snapshot.getValue(Boolean.class); 
  if (connected) { 
  System.out.println("connected"); 
  } else { 
  connectedRef.goOnline(); 
  System.out.println("not connected"); 
  } 
  } 

 @Override 
 public void onCancelled(DatabaseError error) { 
 System.err.println("Listener was cancelled"); 
 } 
 });

   return START_STICKY;
 }
 @Override
  public IBinder onBind(Intent intent) {
   return mBinder;
  }
  }

这个解决方案还不够,我看到它在短时间内断开连接后重新连接,但几个小时后它无法重新连接并且连接结束。

请帮我找到解决办法

【问题讨论】:

  • 不要尝试在应用不活动时保持数据库连接处于活动状态。虽然它可能在您构建它时工作,但它可能会在其他设备上失败(如果不是现在,那么在未来的 Android 版本中)。当应用程序未处于活动状态时,它不应保持网络连接打开。要在应用处于非活动状态时与其通信,请使用 Firebase Cloud Messaging。
  • 我可以执行定期 goOnline 保持连接吗?

标签: android firebase firebase-realtime-database connection keep-alive


【解决方案1】:

Firebase SDK 将始终尝试保持与您的 Firebase 实时数据库实例的开放连接。如果连接断开,它会自动尝试重新连接。

无需对该连接进行任何维护。已为您处理。

【讨论】:

  • 但是如果我使用后台服务,firebase 不会重新连接
  • 只有当 firebase 监听器在前台时,firebase 才会尝试重新连接
  • 如果用户不使用,Android 有权阻止您的应用程序使用网络资源。这有助于用户保存数据。相反,如果您想在有新数据时通知您的应用,请使用 FCM,然后使用它来加载新数据以响应消息。
  • 你确定android可以停止互联网连接,因为我想知道Whatsapp是如何工作的?
  • 如果我使用后台服务并执行定期 goOffline 并立即执行该 goOnline 功能。我可以获得连续连接吗?示例:在所有 10 分钟过后,我使用 goOffline,然后使用 goOnline?
【解决方案2】:

您正在寻找一个 xmpp 服务器实现;

我强烈建议你研究一下这些;

用于服务器实现 https://github.com/sreejesh79/android-socket.io-server-demo

用于客户端实现 https://github.com/sreejesh79/android-socket.io-client-demo

试过了,效果很好

【讨论】:

  • 你知道我如何保持与 firebase 的连接吗?
猜你喜欢
  • 2019-09-23
  • 2011-03-14
  • 1970-01-01
  • 2013-07-02
  • 2011-05-21
  • 2014-01-11
  • 2015-08-14
  • 2011-08-07
  • 2020-12-18
相关资源
最近更新 更多