低レベルAPI

アカウントを作成

Unityアプリケーションを初めて起動したときにアカウントを作成しましょう。

public class GameLogic : MonoBehaviour {

    private const string CLIENT_ID = "your client id";
    private const string CLIENT_SECRET = "your client secret";

    void Start () {
        StartCoroutine (CreateAccount ());
    }

    IEnumerator CreateAccount() {
        // GS2 Client を初期化
        Gs2.Client gs2 = new Gs2.Client (new Gs2.Profile ()
            .WithClientId (CLIENT_ID)
            .WithClientSecret (CLIENT_SECRET));

        // アカウントを新規作成
        string GAME_NAME = "game-0001";
        yield return gs2.Account.Create (
            result => {
                if(result.Error != null) throw result.Error;
                // アカウントの作成に成功すると ユーザID  認証パスワード が取得できます
                Debug.Log (result.Result.UserId);
                Debug.Log (result.Result.Password);
            },
            GAME_NAME);
    }

    void Update () {

    }
}

Gs2.Client#Account.Create を呼び出すことで新しいユーザアカウントを作成することが出来ます。

コールバックとして帰ってくるアカウント情報のうち、ユーザIDとログインパスワードを端末内のデータストレージに保存してください。

今後ログインする際にこれらの情報が必要となります。

認証

GS2-Account の情報を利用して認証します。

public class GameLogic : MonoBehaviour {

    private const string CLIENT_ID = "your client id";
    private const string CLIENT_SECRET = "your client secret";

    void Start () {
        StartCoroutine (Authentication ());
    }

    IEnumerator Authentication() {
        // GS2 Client を初期化
        Gs2.Client gs2 = new Gs2.Client (new Gs2.Profile ()
            .WithClientId (CLIENT_ID)
            .WithClientSecret (CLIENT_SECRET));

        // アカウントの認証処理を実行します
        string GAME_NAME = "game-0001";
        string KEY_NAME = "account";
        string USER_ID = "user";
        string PASSWORD = "password";
        yield return gs2.Account.Authentication (
            result => {
                if(result.Error != null) throw result.Error;
                // アカウントの認証処理に成功すると、認証トークンが取得できます
                // この認証情報を GS2-Auth に渡すことで GS2 にログインできます
                string authenticationToken = result.Result;
                Debug.Log (authenticationToken);
            },
            GAME_NAME,    // GS2-Account に作成したゲーム名
            KEY_NAME,     // 認証トークンの暗号化に利用する暗号鍵
            USER_ID,      // ログインするアカウントのユーザID
            PASSWORD);    // ログインするアカウントの認証パスワード
    }

    void Update () {

    }
}

Gs2.Client#Account.Authentication を呼び出すことでユーザ認証を行うことが出来ます。

認証に成功すると 認証結果の情報がコールバック返ります。このデータは KEY_NAME で指定した GS2-Key の暗号鍵を利用して暗号化されています。

開発のはじめ方 に沿って手順を進めた場合は『account』という暗号鍵が作成されています。

authenticationToken を GS2-Auth に渡すことで、GS2 のサービスにログインすることが出来ます。

詳しい手順は GS2-Auth をご参照ください。

データ引き継ぎ用情報の登録

スマートフォンは機種変更や故障といった理由によりゲームを楽しむデバイスを変更することが想定されます。

『アカウントを作成』から『認証』の手順を見てご理解いただけたかと思いますが、デバイスのセーブデータが消えてしまうとゲームにログインするための ユーザID や パスワード が失われてしまいます。

このような問題を回避するための手順が引き継ぎ用情報の登録となります。

public class GameLogic : MonoBehaviour {

    private const string CLIENT_ID = "your client id";
    private const string CLIENT_SECRET = "your client secret";

    void Start () {
        StartCoroutine (AddTakeOverSetting ());
    }

    IEnumerator AddTakeOverSetting() {
        // GS2 Client を初期化
        Gs2.Client gs2 = new Gs2.Client (new Gs2.Profile ()
            .WithClientId (CLIENT_ID)
            .WithClientSecret (CLIENT_SECRET));

        // 登録済みのアカウントで認証
        string GAME_NAME = "account-0001";
        string KEY_NAME = "account";
        string USER_ID = "user"; // gs2.Account.Create した際に取得できたユーザID
        string PASSWORD = "password"; // gs2.Account.Create した際に取得できた認証パスワード
        string authenticationToken = null;
        yield return gs2.Account.Authentication (
            result => {
                if(result.Error != null) throw result.Error;
                authenticationToken = result.Result;
            },
            GAME_NAME,
            KEY_NAME,
            USER_ID,
            PASSWORD);

        // GS2-Auth を利用して GS2 にログイン
        Gs2.GameSession session = null;
        yield return gs2.Auth.Login (
            result => {
                if(result.Error != null) throw result.Error;
                session = result.Result;
            },
            USER_ID,
            KEY_NAME,
            authenticationToken);

        // 引き継ぎ情報を追加
        int TYPE = 0;
        string TAKEOVER_USER_IDENTIFIER = "user@examle.com";
        string TAKEOVER_PASSWORD = "password";
        yield return gs2.Account.AddTakeOverSetting (
            result => {
                if(result.Error != null) throw result.Error;
                var takeover = result.Result;
                Debug.Log("add takeover setting: " + takeover.Type + "#" + takeover.UserIdentifier);
            },
            session, // GS2 にログインしているセッション情報
            GAME_NAME, // GS2-Account のゲーム名
            TYPE, // 引き継ぎ情報の種類
            TAKEOVER_USER_IDENTIFIER, // 引き継ぎ情報のユーザ固有ID
            TAKEOVER_PASSWORD); // 引き継ぎに利用するパスワード
    }

    void Update () {

    }
}

TYPE には引き継ぎ情報の種類を表す整数値を指定します。数値の意味は自由に決めていただけます。

例えば、0 は メールアドレス+パスワード。1 は facebook のソーシャルログイン。2 は Twitter のソーシャルログイン。というように自由にルールを作ってください。

USER_IDENTIFIER にはユーザを識別するための固有IDを指定します。

上記サンプルではメールアドレスを USER_IDENTIFIER としていますが、ソーシャルログインの場合はソーシャルログインのIDなどを利用するといいでしょう。

PASSWORD はメールアドレスやソーシャルネットワークのIDは公開情報ですので、アカウントの乗っ取りがされないようにパスワードを指定します。

データ引き継ぎを実行

引き継ぎ情報の登録が終わったら、引き継ぎの実行です。

public class GameLogic : MonoBehaviour {

    private const string CLIENT_ID = "your client id";
    private const string CLIENT_SECRET = "your client secret";

    void Start () {
        StartCoroutine (DoTakeOver ());
    }

    IEnumerator DoTakeOver() {
        // GS2 Client を初期化
        Gs2.Client gs2 = new Gs2.Client (new Gs2.Profile ()
            .WithClientId (CLIENT_ID)
            .WithClientSecret (CLIENT_SECRET));

        // 引き継ぎ処理を実行
        string GAME_NAME = "game-0001";
        int TYPE = 0;
        string USER_IDENTIFIER = "user@example.com";
        string PASSWORD = "password";
        yield return gs2.Account.DoTakeOver (
            result => {
                if(result.Error != null) throw result.Error;
                // 引き継ぎが完了すると GS2-Account の認証情報を復元できます
                var account = result.Result;
                Debug.Log("takeover userId: " + account.UserId);
                Debug.Log("takeover password: " + account.Password);
            },
            GAME_NAME,             // GS2-Account のゲーム名
            TYPE,                  // 引き継ぎの種類
            USER_IDENTIFIER,       // 引き継ぎ情報のユーザ固有ID
            PASSWORD);             // 引き継ぎ情報のパスワード
    }

    void Update () {

    }
}

このように Gs2.Client#Account.DoTakeOver は TYPE と USER_IDENTIFIER と PASSWORD が一致した場合は Gs2.Account.Account を返します。

Account にはユーザIDとログインパスワードが含まれていますので、この情報を再び端末内のデータストレージに保存すればデータの引き継ぎは完了です。

ちなみに、データの引き継ぎ時に 以前していたデバイスからのアクセスを許す・許さない という設定が『GS2-Account のゲームの設定項目』でできます。

デフォルトではアクセスを許す設定になっていますので、許したくない場合は設定を変更してご利用ください。