在实时数据库中将Facebook朋友ID映射到Firebase uid

Wak*_*ero 1 facebook unity-game-engine firebase firebase-realtime-database

如何将Facebook朋友ID映射到实时数据库中的Firebase uid?据我了解,Firebase uid与Facebook id不同。

我当前的用户流是通过Facebook sdk登录到Facebook,然后将Facebook访问令牌传递到Firebase sdk以使用Firebase登录。

我的最终目标是存储游戏分数,以便用户可以看到他们的朋友以及他们自己的分数。我不想为每个玩家要求每个分数并在客户端上过滤此信息。我宁愿发送X个查询,查询X个朋友,只请求所需的分数。

Wak*_*ero 5

不知道什么是downvote,但是这是我最终使用的解决方案。

通过facebookId而不是firebaseId来存储分数可以查找朋友的分数,因为将facebookId映射到firebaseId不能将其存储在数据库中。看起来像这样:

facebookUsers {
  facebookId {
    "firebaseId" : firebaseId,
    "scores" : {
      level : score,
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

通过此结构,您可以轻松地按facebookId查找分数,如果需要其他操作,还可以将facebookId映射到firebaseId。

要保存分数:

FirebaseDatabase.DefaultInstance
  .GetReference("facebookUsers")
  .Child(facebookId)
  .Child("scores")
  .Child(level)
  .SetValueAsync(score);
Run Code Online (Sandbox Code Playgroud)

要查找分数:

FirebaseDatabase.DefaultInstance
  .GetReference("facebookUsers")
  .Child(facebookId)
  .Child("scores")
  .Child(level)
  .GetValueAsync();
Run Code Online (Sandbox Code Playgroud)

要限制基于facebookId的写入,请使用以下规则:

{
  "rules": {
    ".read": "auth != null",
    "facebookUsers": {      
      "$facebookId" : {
        ".write": "data.child('firebaseId').val() == auth.uid || (!data.exists() && newData.child('firebaseId').val() == auth.uid)",
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助某人,而不是不赞成投票的人。