【问题标题】:Prevent write to Firebase after back from offline [Android]防止从离线恢复后写入 Firebase [Android]
【发布时间】:2019-09-13 01:40:27
【问题描述】:

我了解 Firebase 能够在离线期间将数据存储在本地,并在设备重新在线时执行写入。

但是,我想为我的应用程序中的某些写入禁用此功能,因为我想防止用户向数据库发送垃圾邮件。谢谢。

【问题讨论】:

  • 下面有一个答案。但我不确定等待写入队列和用户向数据库发送垃圾邮件的能力是如何相关的。你能用一段代码来演示这个问题吗?最好使用您担心的实际数据。请参阅 stackoverflow.com/help/mcve 了解这是什么以及为什么它可以让我们更好地帮助您。

标签: android firebase


【解决方案1】:

根据 Frank 的说法,我们无法控制写入队列。因此,我决定编写一个实用程序来检查网络连接。只有在有连接的情况下才会执行写入。

NetworkUtil.java:

public class NetworkUtil {

    private Context context;

    public NetworkUtil(Context context) {
        this.context = context;
    }

    public boolean hasNetwork() {
        ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        final NetworkInfo info = mConnectivityManager.getActiveNetworkInfo();
        if (info == null || !info.isConnected())
            return false;
        else
            return true;
    }

}

我在我的活动中添加了这一行:

/* Check for network */
NetworkUtil networkUtil = new NetworkUtil(getApplicationContext());
boolean hasNetwork = networkUtil.hasNetwork();

if (hasNetwork)
    /* perform write to firebase */

【讨论】:

  • 这只是检查网络连接,但如果您真的有互联网连接,则不会。您会在每次写入连接时 ping google.com 以找出答案吗?
【解决方案2】:

所有写入都会排队,直到再次连接到 Firebase 服务器。没有 API 可以控制哪些写入排队,哪些不排队。

唯一的漏洞是transactions当前没有持久化到磁盘,因此在应用程序重新启动时会丢失。

【讨论】:

  • 谢谢弗兰克。非常感谢您的反馈。由于无法控制队列中的写入,我决定使用 ConnectivityManager 来检查互联网连接,只有在有网络的情况下才会执行写入。
  • 在这种情况下,还可以考虑使用 Firebase 的内置连接指示器 .info/connected。它记录在这里:firebase.com/docs/android/guide/…。除了ConnectivityManager 检测到的原因之外,您的应用未连接到 Firebase 可能还有其他原因。
  • 有变化吗?
  • @FrankvanPuffelen - 您提到的 Firebase 连接指示器在连接丢失时不会在某些 Android 设备中被调用,尽管它在其他一些设备中运行良好。这是 Firebase 的错误吗?
  • @FrankvanPuffelen 现在是 2019 年 4 月,有没有比在任何写入操作之前检查连接更好的方法来“防止从离线后写入 Firebase”?
【解决方案3】:

不确定是否有帮助,但有 purgeOutstandingWrites() 用于数据库

com.google.firebase.database.FirebaseDatabase.getInstance(app).purgeOutstandingWrites();

clearPersistence() 用于 Firestore。

FirebaseFirestore.getInstance().clearPersistance();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多