2016-12-01 66 views
0

如何将Facebook好友ID映射到实时数据库中的Firebase uid?我的理解是,Firebase uid与Facebook身份证不同。将Facebook好友ID映射到实时数据库中的Firebase uid

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

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

+1

是否要将FacebookId作为Firebase用户的财产?我将管理这个的方式是在数据库对象中有一个名为“FacebookID”的属性。 –

+0

我想过如何将FacebookId存储在数据库中。这可以让我用我已经拥有的Facebook ID查询每个$ uid,然后使用该$ uid查找分数。有没有人有更好的解决方案? fbusers { $ fbid { $ uid } } – WakeZero

回答

3

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

通过facebookId而不是firebaseId存储分数允许查找朋友分数,因为无论如何facebookId都无法映射到firebaseId,因此无法将其存储在数据库中。它看起来像这样:

facebookUsers { 
    facebookId { 
    "firebaseId" : firebaseId, 
    "scores" : { 
     level : score, 
    } 
    } 
} 

这种结构可以让你轻松地查找facebookId分数,如果需要进行其他操作也映射facebookIds到firebaseIds。

要保存得分:

FirebaseDatabase.DefaultInstance 
    .GetReference("facebookUsers") 
    .Child(facebookId) 
    .Child("scores") 
    .Child(level) 
    .SetValueAsync(score); 

查找分数:

FirebaseDatabase.DefaultInstance 
    .GetReference("facebookUsers") 
    .Child(facebookId) 
    .Child("scores") 
    .Child(level) 
    .GetValueAsync(); 

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

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

希望这可以帮助别人更多比downvote。