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 セッションからゲーム データを取得できます。

おそらくこれにはかなり簡単な解決策があるように思えますが、私は、ある方法でそれを行うことを考えてから、以前にそれを試したことがあることに気付くというループの1つにはまっています.

誰かがこれを行う方法について何か良いアイデアを持っていますか?

編集:私が頭が固まって考えている領域の1つがこれであることを追加する必要があります. ユーザー用に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;";

}

しかし、それはあまり効率的ではないようです。変数が null/空白でない場合にのみフィールドを更新する方法はありますか?

4

1 に答える 1

3

一意のユーザーとログイン資格情報の概念は別個にする必要があります。一意のユーザーを表す users テーブルには、Guid、Int、または BigInt の主キーが必要です。次に、使用する資格情報は関係ありません。追加する必要がある「ログイン」資格情報の量がかなり静的になる場合は、それらを同じテーブルに列として追加することで解決できます。動的にしたい場合は、各行がUserId(ユーザーテーブルへのfk)、LoginType(1 = facebookなど)、Username、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 に答える