0

我有一个高分表,目前使用 facebook 登录来记录用户的高分。

但是我知道并不是每个人都想使用 facebook 来存储高分,事实上很多人会立即被 facebook 登录推迟。

所以我的想法是在 android 设备上使用他们的 Google Play id,在 iOs 设备上使用他们的 Game Center id。

我的问题是,我希望用户能够在 2 个平台上统一他们的游戏。这是我计划在游戏中保留 Facebook 登录的唯一原因,因为其中的 ID 号不依赖于平台。

例如,用户在他们的 iPhone 上播放,我检索他们的 GC id 并使用它来填充 mysql 表中的“profile_id”主键。然后他们使用 facebook 登录。最好用 facebook ID 作为“profile_id”创建一个新行,然后将之前的 profile_id 放入“apple_id”列?这样,如果他们随后使用 facebook 登录 Android 手机,我可以从他们的 iOS 会话中检索游戏数据。

在我看来,这可能有一个相当简单的解决方案,但我陷入了其中一个循环,您考虑以一种方式进行操作,然后意识到您之前已经尝试过。

有没有人对他们将如何做到这一点有任何好主意?

编辑:我应该补充一点,我正在思考的一个领域是这个。假设我为用户存储了一个 facebook id 和一个 apple id。如果下次他们更新分数时他们没有登录到 facebook,因此只发送了 Apple id 作为查询的一部分,我如何确保我不会将 facebook id 字段替换为 null 或“”?

我可以 :

if ($facebookID != "" && $facebookID != NULL)
{
$sql = "UPDATE scores SET facebook_id = '$facebookID' WHERE profile_id = $profile_id;";

}

if ($appleID != "" && $appleID != NULL)
{
$sql = "UPDATE scores SET apple_id = '$appleID' WHERE profile_id = $profile_id;";

}

if ($googleID != "" && $googleID != NULL)
{
$sql = "UPDATE scores SET google_id = '$googleID' WHERE profile_id = $profile_id;";

}

但这似乎不是很有效。如果变量不是空/空白,有没有办法只更新字段?

4

1 回答 1

3

唯一用户和登录凭据的概念应该是分开的。您需要一个代表唯一用户的用户表上的 Guid 或 Int 或 BigInt 主键。然后,他们使用什么凭据并不重要。如果您需要添加的“登录”凭据的数量是相当静态的,您可以将它们作为列添加到同一个表中。如果您希望它是动态的,则需要另一个表,其中每一行类似于 UserId(fk 到用户表)、LoginType(1=facebook 等)、用户名、PasswordHash,然后通过添加新的 LoginTypes,您可以添加登录逻辑新的身份验证提供程序相当容易。然后,您可以使用单个表连接检索用户和他/她的登录信息。

同样,我不确定你到底需要什么,但我的解释看起来像这样......

CREATE TABLE [dbo].[Users](
    [UserId] [bigint] IDENTITY(1,1) NOT NULL,
    [Username] [nvarchar](150) NOT NULL,
    [Enabled] bit NOT NULL)

    CREATE TABLE [dbo].[UserProfiles](
    [UserId] [bigint],  -- Combined Key (UserId, and ProfileServiceId)
    [ProfileServiceId] [nvarchar] (150),
    [ProfileType] [int] NOT NULL, -- 1 = Facebook, 2 = Google, etc..    
    [Enabled] bit NOT NULL)

    CREATE TABLE [dbo].[UserScores](
    [UserScoreId] [bigint] IDENTITY(1,1) NOT NULL,
    [UserId] [bigint],
    [ProfileServiceId] [nvarchar] (150),
    [ScoreValue] [int] NOT NULL

    -- Get all Facebook scores for current user
    select * from UserScores where UserId = $currentUser.UserId and ProfileServiceId = $currentUser.FacebookProfileId

    -- Get all scores for current user 
    select * from UserScores where UserId = $currentUser.UserId

    -- Get all profiles for current user
    select * from UserProfiles where UserId = $currentUser.UserId

    -- See if user has a facebook profile
    select * from UserProfiles where UserId = $currentUser.UserId and ProfileType = $ProfileTypes.Facebook
于 2013-06-18T13:24:46.360 回答