【问题标题】:Android Sharing data between one app - 2 users [closed]Android 在一个应用程序之间共享数据 - 2 个用户 [关闭]
【发布时间】:2021-01-08 22:26:29
【问题描述】:

我开发了一个简单的待办事项列表应用程序。我在那里创建我的每日计划,我的每周计划等等。 TODO 列表离线。现在我想与不同的应用程序用户分享我的 TODO 列表。就像关系 MOM-KIDS(一对多)一样,妈妈可以看到她的孩子在做什么。所以有一个问题,如何做到这一点?我想以某种方式标记我想将我的每日计划发送给谁。我应该在一些云托管中注册吗?引用某人​​的数据库以将其他用户数据插入某人的数据库可能会出现问题(不接受公共规则)。在我看来,允许 .read 对“管理员”(妈妈)用户为真也是不好的解决方案,因为其他妈妈无法为他们的孩子计划。我应该通过广播发送它还是应该如何解决此类问题?

@编辑 我更改为 Firestore DB,但我仍然不确定如何获得存储在 receiverIds 数组中的用户的权限。

我正在尝试将Firestore security rules : searching for a user's id in array in a document 调整到我的情况,但我总是遇到错误。有人可以告诉我我在这里做错了什么吗?

service cloud.firestore {
  match /databases/{database}/documents {
    match /user_activity/{ids} {
      allow read, write: if request.auth.uid in get(/databases/{database}/documents/user_activity/{ids}).data.receiverId
    }
  }
}

您好!

【问题讨论】:

  • 或者是否有可能在不创建后端的情况下在 Android 应用程序中创建类似服务器端事件的东西?

标签: android kotlin firebase-realtime-database google-cloud-firestore android-sharing


【解决方案1】:

最好的方法是使用像 Firebase Firestore 数据库这样的数据库。这将是一个简单易行的解决方案。

对于数据访问规则,您可以使用 Firebase 安全规则来强制执行您需要的内容。

例如。在您的情况下,妈妈可以读取数据但不能写入数据,这很容易做到。

以下链接可以帮助您:

Firebase Firestore Introduction

Firebase security rules.

Firebase Firestore Codelab

更新:

好的,这是我快速模拟的,试了一下,它工作非常好!

这是结构:

这些是规则:

rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
     match /item/{items}{
       allow write : if true;
       allow read :  if request.auth.uid in resource.data.uid;
     }
   }
}  

注意resource.data.uid中的uid指的是文档中的数组uid。

以下是结果的截图:

这里,uid 是在数据库的数组中输入的。因此,请阅读允许

这里,uid 不是数据库数组中的那个。因此,请阅读不允许

【讨论】:

  • 最近我试图用 Firebase 实时数据库做到这一点,但没有成功。没有选项可以创建一对多关系,这样其他妈妈就不能读取他们孩子的数据。同样在我之前的帖子 (stackoverflow.com/questions/63982106/…) 中,来自 Google 的一位开发人员不确定这是否可行。老实说,我不认为在这样一个“简单”的情况下是无法实现的。
  • 是的,我明白了。在 Firebase 安全规则中,您只能对 UID 进行硬编码。如果你想动态地拥有它,我可以想到一个解决方案(如果它适合你)。谈到 Firestore(非实时)数据库,您可以拥有一组可以读取 TODO 列表的人的 UID。然后在安全规则中:检查 auth.uid 是否存在于列表中。例如。孩子的妈妈和爸爸可以访问 TODO 列表,因此您将妈妈和爸爸的 UID 保存在该列表中。让我知道它是否有效!
  • 我的评论正确吗?在 Firestore 中,我可以遍历列表,而在实时数据库中,我不能?如果是的话,我会毫不犹豫地改变它。
  • 您能发布一个在 Firestore 规则中遍历数组的示例吗?我认为这也是不可能的。
  • 我提到了 Firestore,因为我不太确定实时数据库中的功能。我一直在研究 Firestore,我怀疑为什么要使用实时数据库。 Firestore 是最佳选择。
猜你喜欢
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多