2016-12-01 33 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。