首页 文章

注销后清除firebase持久性

提问于
浏览
26
  • 有没有办法清除通过 setPersistenceEnabled(true) 启用的Firebase Database持久性中存储的数据?

  • 或最终阻止对设备上先前存储的用户数据的读取权限?

  • 还有额外的问题 - 有没有办法检查是否有任何数据等待同步?

在我的应用程序中,我想在用户注销时清除db,并确认将删除未同步的更改 . 这个应用程序将在很多人的平板电脑上使用,并且每个用户将存储许多数据,因此 I want to clear unnecessary data stored on the device

  • 缩小存储空间

  • 防止未经授权的人员读取用户数据

It's a security flaw because any user, regardless of whether is signed in or not, has read access to all previously downloaded data! 幸运的是我们没有写访问权限 .

我试图在离线和在线模式下自行清除数据库,但数据仍然存在于设备上:

// first clear all data on my own
FirebaseDatabase db = FirebaseDatabase.getInstance();
db.goOffline(); // even when I clear db in online mode data persist on mobile device
db.getReference().setValue(null);

// and then logout
FirebaseAuth.getInstance().signOut();
db.goOnline();

例如数据结构:

{
  "someList": {
    "userId1": {
      "itemId11": {
        "name": "name 11"
      },
      "itemId12": {
        "name": "name 12"
      },
      ...
      "itemId1N": {
        "name": "name 1N"
      }
    }
    "userId2": {
      "itemId21": {
        "name": "name 21"
      },
      "itemId22": {
        "name": "name 22"
      },
      ...
      "itemId2N": {
        "name": "name 2N"
      }
    }
  }
}

我的规则:

{
  "rules": {
    ".read": "false",
    ".write": "false",
    "someList": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

2 回答

  • 11

    不幸的是,没有支持的方法来清除持久性缓存 . 您可以尝试手动删除Firebase数据库使用的SQLite数据库(应该在您的应用程序 /databases/ 下's data folder), but you'需要在初始化Firebase数据库之前执行此操作,因此您必须在签署某人或类似之后强制重启应用程序 .

    关于知道是否存在“数据等待同步”,假设您正在讨论写入,唯一的方法是将CompletionListeners附加到您执行的每个写操作,并等待它们完成 .

    这些都是我们希望在未来版本的Firebase Database SDK中改进的内容 .

  • 2
    if (Build.VERSION_CODES.KITKAT <= Build.VERSION.SDK_INT) {
            ((ActivityManager) getContext().getSystemService(ACTIVITY_SERVICE))
                    .clearApplicationUserData();
        }
    

    source

相关问题