Game > Gamebase > Android SDK ご利用ガイド > 認証

Login

Gamebaseでは基本的にゲストログインに対応しています。

Login Flow

多くのゲームがタイトル画面にログインを設計しています。

  • アプリをインストールして初めて起動したとき、タイトル画面からゲームユーザーがどのIdP(identity provider)で認証を行うか選択できるようにします。
  • 一度ログインした後はIdP選択画面を表示せずに、前回ログインしたIdPタイプで認証します。

上述したロジックは、次のような手順で設計することができます。

last provider login flow idp login flow

1. 前回のログインタイプで認証

  • 前回の認証記録がある場合、IDとパスワードを入力させずに認証を試みます。
  • Gamebase.loginForLastLoggedInProvider()を呼び出します。

1-1. 認証に成功した場合

  • おめでとうございます!認証に成功しました。
  • Gamebase.getUserID()でユーザーIDを取得し、ゲームロジックを設計してください。

1-2. 認証に失敗した場合

  • ネットワークエラー
    • エラーコードSOCKET_ERROR(110)またはSOCKET_RESPONSE_TIMEOUT(101)の場合、一時的なネットワーク問題により認証に失敗したケースであるため、Gamebase.loginForLastLoggedInProvider()をもう一度呼び出したり、しばらくしてからもう一度試します。
  • 利用停止中のゲームユーザー
    • エラーコードがBANNED_MEMBER(7)の場合、利用停止中のゲームユーザーであるため認証に失敗したケースです。
    • BanInfo.from(exception)で利用制限情報を確認し、ゲームユーザーに対しゲームプレイができない理由についてご案内ください。
    • Gamebaseを初期化する際にGamebaseConfiguration.Builder.enablePopup(true)及びenableBanPopup(true)を呼び出せば、Gamebaseが利用停止に関するポップアップを自動で表示します。
  • その他のエラー
    • 前回のログインタイプで認証に失敗しているため、'2. 指定されたIdPで認証'を進めてください。

2. 指定されたIdPで認証

  • IdPのタイプを直接指定して認証を試みます。
    • 認証可能なタイプは、AuthProviderクラスに宣言されています。
  • Gamebase.login(activity, idpType, callback)APIを呼び出します。

2-1. 認証に成功した場合

  • おめでとうございます!認証に成功しました。
  • Gamebase.getUserID()でユーザーIDを取得し、ゲームロジックを設計してください。

2-2. 認証に失敗した場合

  • ネットワークエラー
    • エラーコードがSOCKET_ERROR(110)またはSOCKET_RESPONSE_TIMEOUT(101)の場合、一時的なネットワーク問題により認証に失敗したケースであるため、Gamebase.login(activity, idpType, callback)をもう一度呼び出したり、しばらくしてからもう一度試します。
  • 利用停止中のゲームユーザー
    • エラーコードがBANNED_MEMBER(7)の場合、利用停止中のゲームユーザーであるため認証に失敗したケースです。
    • BanInfo.from(exception)で利用制限情報を確認し、ゲームユーザーに対しゲームプレイができない理由についてご案内ください。
    • Gamebaseを初期化する際にGamebaseConfiguration.Builder.enablePopup(true)及びenableBanPopup(true)を呼び出せば、Gamebaseが利用停止に関するポップアップを自動で表示します。
  • その他のエラー
    • エラーが発生したことをゲームユーザーに知らせ、ゲームユーザーが認証IdPのタイプを選択できる状態(主にタイトル画面またはログイン画面)に戻ります。

Login as the Latest Login IdP

最後にログインしたIdPでログインを試みます。
該当するログイントークンの期限が切れていたり、トークン検証などに失敗した場合、失敗を返します。
この場合、該当するIdPに対するログインを設計する必要があります。

  • AdditionalInfoパラメータ設定方法
keyname a use 値の種類
AuthProviderCredentialConstants.SHOW_LOADING_ANIMATION API呼び出しが終了するまでローディングアニメーションを表示 boolean
default: true

API

+ (void)Gamebase.loginForLastLoggedInProvider(Activity activity, GamebaseDataCallback<AuthToken> callback);
+ (void)Gamebase.loginForLastLoggedInProvider(Activity activity, Map<String, Object> additionalInfo, GamebaseDataCallback<AuthToken> callback);

Example

Gamebase.loginForLastLoggedInProvider(activity, new GamebaseDataCallback<AuthToken>() {
    @Override
    public void onCallback(AuthToken data, GamebaseException exception) {
        if (Gamebase.isSuccess(exception)) {
            // ログイン成功
            Log.d(TAG, "Login successful");
            String userId = Gamebase.getUserID();
        } else {
            if (exception.getCode() == GamebaseError.SOCKET_ERROR ||
                    exception.getCode() == GamebaseError.SOCKET_RESPONSE_TIMEOUT) {
                // Socket errorにより一時的にネットワークに接続できない状態であることを意味します。
                // ネットワーク状態を確認したり、しばらくしてからもう一度試してください。
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(2000);
                            onLoginForLastLoggedInProvider(activity);
                        } catch (InterruptedException e) {}
                    }
                }).start();
            } else if (exception.getCode() == GamebaseError.BANNED_MEMBER) {
                // ログインを試みたゲームユーザーが利用停止状態です。
                // GamebaseConfiguration.Builder.enablePopup(true).enableBanPopup(true)を呼び出すと、
                // Gamebaseが利用停止に関するポップアップを自動で表示します。
                //
                // Game UIに合わせて直接利用停止案内のポップアップを設計したい場合、BanInfo.from(exception)で
                // 利用制限情報を確認し、ゲームユーザーに対しゲームプレイができない理由を表示してください。
                BanInfo banInfo = BanInfo.from(exception);
            } else {
                // その他のエラーが発生した場合、指定されたIdPで認証を試みます。
                Gamebase.login(activity, provider, logincallback);
            }
        }
    }
}

Login with GUEST

Gamebaseは、ゲストログインに対応しています。

  • デバイス固有のキーを作成し、Gamebaseに対しログインを試みます。
  • ゲストログインは、アプリを削除したりデバイスを初期化した場合、アカウントが削除されることがあるためIdPを使ったログイン方式を推奨します。

ゲストログインを設計する方法については、次のコード例をご参考ください。

API

+ (void)Gamebase.login(Activity activity, AuthProvider.GUEST, GamebaseDataCallback<AuthToken> callback);

Example

private static void onLoginForGuest(final Activity activity) {
    Gamebase.login(activity, AuthProvider.GUEST, new GamebaseDataCallback<AuthToken>() {
        @Override
        public void onCallback(AuthToken data, GamebaseException exception) {
            if (Gamebase.isSuccess(exception)) {
                // ログイン成功
                Log.d(TAG, "Login successful");
                String userId = Gamebase.getUserID();
            } else {
                if (exception.getCode() == GamebaseError.SOCKET_ERROR ||
                        exception.getCode() == GamebaseError.SOCKET_RESPONSE_TIMEOUT) {
                    // Socket errorにより一時的にネットワークに接続できない状態であることを意味します。
                    // ネットワーク状態を確認したり、しばらくしてからもう一度試してください。
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(2000);
                                onLoginForGuest(activity);
                            } catch (InterruptedException e) {}
                        }
                    }).start();
                } else if (exception.getCode() == GamebaseError.BANNED_MEMBER) {
                    // ログインを試みたゲームユーザーが利用停止状態です。
                    // GamebaseConfiguration.Builder.enablePopup(true).enableBanPopup(true)を呼び出した場合
                    // Gamebaseが利用停止に関するポップアップを自動で表示します。
                    //
                    // Game UIに合わせて直接利用停止案内のポップアップを設計したい場合、BanInfo.from(exception)で
                    // 利用制限情報を確認し、ゲームユーザーに対しゲームプレイができない理由を表示してください。
                    BanInfo banInfo = BanInfo.from(exception);
                } else {
                    // ログイン失敗
                    Log.e(TAG, "Login failed- "
                            + "errorCode:" + exception.getCode()
                            + "errorMessage:" + exception.getMessage());
                }
            }
        }
    });
}

Login with IdP

次は特定のIdPでログインできるようにするコード例です。
ログイン可能なIdPのタイプは、AuthProviderクラスから確認することができます。

[注意]

PAYCO IdPは、iOSで認証モジュールであるにもかかわらず、外部決済と誤認されてリジェクトされるケースが発生して AuthProvider.PAYCOの定数を提供しなくなったため、 "payco"という文字列を直接パラメータとして渡す必要があります。

[注意]

Line IdPはGamebase SDK 2.43.0からLineサービス提供地域設定が行えます。 該当地域はAdditionalInfoに設定できます。 * AdditionalInfoパラメータ設定方法

keyname a use 値種類
AuthProviderCredentialConstants.SHOW_LOADING_ANIMATION API呼び出しが終了するまでローディングアニメーションを表示 boolean
default: true
AuthProviderCredentialConstants.LINE_CHANNEL_REGION Lineサービス提供地域設定 "japan"
"thailand"
"taiwan"
"indonesia"

API

+ (void)Gamebase.login(Activity activity, AuthProvider provider, GamebaseDataCallback<AuthToken> callback);
+ (void)Gamebase.login(Activity activity, AuthProvider provider, Map<String, Object> additionalInfo, GamebaseDataCallback<AuthToken> callback);

Example

private static void onLoginForGoogle(final Activity activity) {
    Gamebase.login(activity, AuthProvider.GOOGLE, new GamebaseDataCallback<AuthToken>() {
        @Override
        public void onCallback(AuthToken data, GamebaseException exception) {
            if (Gamebase.isSuccess(exception)) {
                // ログイン成功
                Log.d(TAG, "Login successful");
                String userId = Gamebase.getUserID();
            } else {
                if (exception.getCode() == GamebaseError.SOCKET_ERROR ||
                        exception.getCode() == GamebaseError.SOCKET_RESPONSE_TIMEOUT) {
                    // Socket errorにより一時的にネットワークに接続できない状態であることを意味します。
                    // ネットワーク状態を確認したり、しばらくしてからもう一度試してください。
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(2000);
                                onLoginForGoogle(activity);
                            } catch (InterruptedException e) {}
                        }
                    }).start();
                } else if (exception.getCode() == GamebaseError.AUTH_BANNED_MEMBER) {
                    // ログインを試みたユーザーが利用停止状態です。
                    // GamebaseConfiguration.Builder.enablePopup(true).enableBanPopup(true)を呼び出した場合
                    // Gamebaseが利用停止に関するポップアップを自動で表示します。
                    //
                    // Game UIに合わせて直接利用停止案内のポップアップを設計したい場合、BanInfo.from(exception)で
                    // 利用制限情報を確認し、ユーザーに対しゲームプレイができない理由を表示してください。
                    BanInfo banInfo = BanInfo.from(exception);
                } else {
                    // ログイン失敗
                    Log.e(TAG, "Login failed- "
                            + "errorCode:" + exception.getCode()
                            + "errorMessage:" + exception.getMessage());
                }
            }
        }
    });
}

Login with Credential

IdPが提供するSDKを使ってゲームで直接認証した後、発行されたアクセストークンなどを利用してGamebaseにログインできるインターフェースです。

  • Credentialパラメーターの設定方法
keyname a use 値の種類
AuthProviderCredentialConstants.PROVIDER_NAME IdPタイプの設定 AuthProvider.GOOGLE
AuthProvider.FACEBOOK
AuthProvider.NAVER
AuthProvider.TWITTER
AuthProvider.LINE
AuthProvider.HANGAME
AuthProvider.APPLEID
AuthProvider.WEIBO
AuthProvider.KAKAOGAME
"payco"
AuthProviderCredentialConstants.ACCESS_TOKEN IdPログイン後に取得した認証情報(アクセストークン)の設定
Google認証の場合は使用しない
AuthProviderCredentialConstants.AUTHORIZATION_CODE Googleログイン後に取得できるOTAC(one time authorization code)の入力
AuthProviderCredentialConstants.GAMEBASE_ACCESS_TOKEN IdP認証情報ではなくGamebase Access Tokenでログインを行いたい場合に使用
AuthProviderCredentialConstants.IGNORE_ALREADY_LOGGED_IN Gamebaseログイン状態からログアウトを行わずに別のアカウントへのログイン試行を許可する boolean
AuthProviderCredentialConstants.SHOW_LOADING_ANIMATION API呼び出しが終了するまでローディングアニメーションを表示 boolean
default: true
AuthProviderCredentialConstants.LINE_CHANNEL_REGION Lineサービス提供地域設定 Login with IdP参考

[参考]

ゲーム内で外部サービス(Facebookなど)の固有機能を使用しなければならないとき、必要になることがあります。


[注意]

外部のSDKで対応を求める開発事項は、外部SDKのAPIを使用して設計する必要があり、Gamebaseでは対応しておりません。

API

+ (void)Gamebase.login(Activity activity, Map<String, Object> credentialInfo, GamebaseDataCallback<AuthToken> callback);

Example

private static void onLoginWithCredential(final Activity activity) {
    Map<String, Object> credentialInfo = new HashMap<>();
    credentialInfo.put(AuthProviderCredentialConstants.PROVIDER_NAME, AuthProvider.FACEBOOK);
    credentialInfo.put(AuthProviderCredentialConstants.ACCESS_TOKEN, facebookAccessToken);

    Gamebase.login(activity, credentialInfo, new GamebaseDataCallback<AuthToken>() {
        @Override
        public void onCallback(AuthToken data, GamebaseException exception) {
            if (Gamebase.isSuccess(exception)) {
                // ログイン成功
                Log.d(TAG, "Login successful");
                String userId = Gamebase.getUserID();
            } else {
                if (exception.getCode() == GamebaseError.SOCKET_ERROR ||
                        exception.getCode() == GamebaseError.SOCKET_RESPONSE_TIMEOUT) {
                    // Socket errorにより一時的にネットワークに接続できない状態であることを意味します。
                    // ネットワーク状態を確認したり、しばらくしてからもう一度試してください。
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(2000);
                                onLoginWithCredential(activity);
                            } catch (InterruptedException e) {}
                        }
                    }).start();
                } else if (exception.getCode() == GamebaseError.BANNED_MEMBER) {
                    // ログインを試みたゲームユーザーが利用停止状態です。
                    // GamebaseConfiguration.Builder.enablePopup(true).enableBanPopup(true)を呼び出した場合
                    // Gamebaseが利用停止に関するポップアップを自動で表示します。
                    //
                    // Game UIに合わせて直接利用停止案内のポップアップを設計したい場合、BanInfo.from(exception)で
                    // 利用制限情報を確認し、ユーザーに対しゲームプレイができない理由を表示してください。
                    BanInfo banInfo = BanInfo.from(exception);
                } else {
                    // ログイン失敗
                    Log.e(TAG, "Login failed- "
                            + "errorCode:" + exception.getCode()
                            + "errorMessage:" + exception.getMessage());
                }
            }
        }
    });
}

Authentication Additional Information Settings

Console Guide

Logout

ログインされたIdPからのログアウトを試みます。主にゲームの設定画面にログアウトボタンを設け、ボタンをクリックすると実行されるように設計するケースが多いです。 ログアウトに成功してもゲームユーザーのデータは保持されます。 ログアウトに成功した場合、該当するIdPで認証を行った記録が削除されるため、次回ログインする時にID・パスワードの入力ウィンドウが表示されます。

次は、ログアウトボタンをクリックするとログアウトされるコード例です。

API

+ (void)Gamebase.logout(Activity activity, GamebaseCallback callback);

Example

private static void onLogout(final Activity activity) {
    Gamebase.logout(activity, new GamebaseCallback() {
        @Override
        public void onCallback(GamebaseException exception) {
            if (Gamebase.isSuccess(exception)) {
                // ログアウト成功
                Log.d(TAG, "Logout successful");
            } else {
                if (exception.getCode() == GamebaseError.SOCKET_ERROR ||
                        exception.getCode() == GamebaseError.SOCKET_RESPONSE_TIMEOUT) {
                    // Socket errorにより一時的にネットワークに接続できない状態であることを意味します。
                    // ネットワーク状態を確認したり、しばらくしてからもう一度試してください。
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(2000);
                                onLogout(activity);
                            } catch (InterruptedException e) {}
                        }
                    }).start();
                } else {
                    // ログアウト失敗
                    Log.e(TAG, "Logout failed- "
                            + "errorCode:" + exception.getCode()
                            + "errorMessage:" + exception.getMessage());
                }
            }
        }
    });
}

Withdraw

ログイン状態で退会を試行します。

  • 退会成功時
  • ログインしていたIdPのゲーム利用者データは削除されます。
  • 該当IdPで再度ログインできます。その場合は新しいゲーム利用者データを作成します。
  • 連携中のすべてのIdPがログアウト処理されます。
  • Gamebaseからの退会を意味するもので、IdPアカウントからの退会を意味するものではありません。

[注意]

複数のIdPを連携している場合、IdP連携がすべて解除され、Gamebaseのユーザーデータが削除されます。

API

+ (void)Gamebase.withdraw(Activity activity, GamebaseCallback callback);

Example

private static void onWithdraw(final Activity activity) {
    Gamebase.withdraw(activity, new GamebaseCallback() {
        @Override
        public void onCallback(GamebaseException exception) {
            if (Gamebase.isSuccess(exception)) {
                // 退会成功
                Log.d(TAG, "Withdraw successful");
            } else {
                if (exception.getCode() == GamebaseError.SOCKET_ERROR ||
                        exception.getCode() == GamebaseError.SOCKET_RESPONSE_TIMEOUT) {
                    // Socket errorにより一時的にネットワークに接続できない状態であることを意味します。
                    // ネットワーク状態を確認したり、しばらくしてからもう一度試してください。
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(2000);
                                onWithdraw(activity);
                            } catch (InterruptedException e) {}
                        }
                    }).start();
                } else {
                    // 退会失敗
                    Log.e(TAG, "Withdraw failed- "
                            + "errorCode:" + exception.getCode()
                            + "errorMessage:" + exception.getMessage());
                }
            }
        }
    });
}

Mapping

マッピングは、既にログインされているアカウントに他のIdPアカウントを連携させたり、解除する機能です。

ほとんどのゲームにおいて、一つのゲームユーザーアカウントに複数のIdPを連携(マッピング)させることができます。
GamebaseのマッピングAPIを使用すれば、既にログインされているアカウントに他のIdPアカウントを連携させたり、解除することができます。

つまり、連携中のIdPアカウントでログインを試みる場合、常に同じユーザーIDでログインされることになります。

注意すべき点は、各IdPは一つのアカウントにのみ連携させることができるという点です。
例えば、Googleアカウントに連携中の場合、他のGoogleアカウントを追加で連携させることはできません。
アカウント連携の例は、次の通りです。

  • GamebaseユーザーID:123bcabca
    • Google ID:aa
    • Facebook ID:bb
    • AppleID ID: cc
    • Twitter ID: dd
  • GamebaseユーザーID:456abcabc
    • Google ID:ee
    • Google ID:ff -> すでにGoogleのeeアカウントに連携されているため、Googleアカウントを追加で連携させることができません。

マッピングAPIにはマッピング追加APIとマッピング解除APIがあります。

[注意]

Guestログイン中にMappingに成功するとGuest IdPは消滅します。

Add Mapping Flow

マッピングは、次の手順で設計することができます。

add mapping flow

1. ログイン

マッピングは、現在のアカウントにIdPアカウントの連携を追加する機能であるため、ログインされた状態でなければなりません。 まず、ログインAPIを呼び出してログインします。

2. マッピング

Gamebase.addMapping(activity, idpType, callback)を呼び出してマッピングを試みます。

2-1. マッピングに成功した場合

  • おめでとうございます!現在のアカウントと連携しているIdPアカウントが追加されました。
  • マッピングに成功しても、「現在ログイン中のIdP」は変わりません。つまり、Googleアカウントでログインした後、Facebookアカウントのマッピングを試み、それが成功したからといって「現在ログイン中のIdP」がGoogleからFacebookに変更されるわけではありません。Googleのままで維持されます。
    • [注意]:Guestアカウントは例外です。Guestアカウントでログインした状態で試行したマッピングが成功した場合、Guest IdPは削除され、「現在ログイン中のIdP」もマッピングされたIdPに変更されます。
  • マッピングは、単にIdP連携だけを追加する機能です。

2-2. マッピングに失敗した場合

  • ネットワークエラー
    • エラーコードがSOCKET_ERROR(110)またはSOCKET_RESPONSE_TIMEOUT(101)の場合、一時的なネットワーク問題により認証に失敗したケースであるため、Gamebase.addMapping()をもう一度呼び出したり、しばらくしてからもう一度試します。
  • 既に他のアカウントに連携している場合に発生するエラー
    • エラーコードAUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER(3302)は、マッピングしようとしているIdPのアカウントが既に他のアカウントに連携しているという意味です。この時取得したForcingMappingTicketで強制マッピング(Gamebase.AddMappingForcibly())またはログインアカウント変更(Gamebase.ChangeLogin())を試行できます。
  • 既に同じIdPアカウントに連携されている場合に発生するエラー
    • エラーコードAUTH_ADD_MAPPING_ALREADY_HAS_SAME_IDP(3303)は、マッピングしようとしているIdPと同じ種類のアカウントが既に連携しているという意味です。
      • Gamebaseのマッピングは、IdP一つにつき一つのアカウントのみ連携させることができます。例えば、既にPAYCOアカウントに連携している場合は、これ以上PAYCOアカウントを追加することができません。
      • 同じIdPの他のアカウントを連携させるためには、Gamebase.removeMapping()を呼び出して連携を解除してからもう一度マッピングを試みてください。
  • その他のエラー
    • マッピングに失敗しました。

Add Mapping

特定のIdPにログインされた状態で他のIdPへのマッピングを試みます。

  • AdditionalInfoパラメータ設定方法
keyname a use 値種類
AuthProviderCredentialConstants.SHOW_LOADING_ANIMATION API呼び出しが終了するまでローディングアニメーションを表示 boolean
default: true
AuthProviderCredentialConstants.LINE_CHANNEL_REGION LINEサービス提供地域設定 Login with IdP参考

次は、Facebookにマッピングを試みる例です。

API

+ (void)Gamebase.addMapping(Activity activity, String providerName, GamebaseDataCallback<AuthToken> callback);
+ (void)Gamebase.addMapping(Activity activity, String providerName, Map<String, Object> additionalInfo, GamebaseDataCallback<AuthToken> callback);

Example

private static void addMappingForFacebook(final Activity activity) {
    String mappingProvider = AuthProvider.FACEBOOK;
    Gamebase.addMapping(activity, mappingProvider, new GamebaseDataCallback<AuthToken>() {
        @Override
        public void onCallback(AuthToken result, GamebaseException exception) {
            if (Gamebase.isSuccess(exception)) {
                // マッピング追加成功
                Log.d(TAG, "Add Mapping successful");
                String userId = Gamebase.getUserID();
                return;
            }

            // マッピング追加失敗
            if (exception.getCode() == GamebaseError.SOCKET_ERROR ||
                    exception.getCode() == GamebaseError.SOCKET_RESPONSE_TIMEOUT) {
                // Socket errorにより一時的にネットワークに接続できない状態であることを意味します。
                // ネットワーク状態を確認したり、しばらくしてからもう一度試してください。
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(2000);
                            addMappingForFacebook(activity);
                        } catch (InterruptedException e) {}
                    }
                }).start();
            } else if (exception.getCode() == GamebaseError.AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER) {
                // Mappingを試行しているIDPアカウントが、既に他のアカウントに連携されています。
                // 強制的に連携を解除するには該当アカウントを退会するか、マッピング(mapping)を解除します。または次のように
                // ForcingMappingTicketを取得した後、addMappingForcibly()メソッドを利用して強制マッピングを試行します。
                Log.e(TAG, "Add Mapping failed- ALREADY_MAPPED_TO_OTHER_MEMBER");
                final ForcingMappingTicket forcingMappingTicket = ForcingMappingTicket.from(exception);
                Gamebase.addMappingForcibly(activity, forcingMappingTicket, new GamebaseDataCallback<AuthToken>() {
                    @Override
                    public void onCallback(AuthToken data, GamebaseException exception) {
                        ...
                        // 詳細はaddMappingForcibly API文書を参照してください。
                    }
                }
            } else if (exception.getCode() == GamebaseError.AUTH_ADD_MAPPING_ALREADY_HAS_SAME_IDP) {
                // Mappingを試みているIDPアカウントが既に追加されています。
                // Gamebase Mappingは、IdP一つにつき一つのアカウントのみ連携させることができます。
                // IDPアカウントを変更したい場合、既に連携中のアカウントはMappingを解除する必要があります。
                Log.e(TAG, "Add Mapping failed- ALREADY_HAS_SAME_IDP");
            } else {
                // マッピング追加失敗
                Log.e(TAG, "Add Mapping failed- "
                        + "errorCode: " + exception.getCode()
                        + "errorMessage: " + exception.getMessage());
            }
        }
    });
}

Add Mapping with Credential

ゲームで直接IdPのSDKで取得したアクセストークンを用いてGamebase AddMappingをするインターフェースです。

  • Credentialパラメーターの設定方法
keyname a use 値の種類
AuthProviderCredentialConstants.PROVIDER_NAME IdPタイプの設定 AuthProvider.GOOGLE
AuthProvider.FACEBOOK
AuthProvider.NAVER
AuthProvider.TWITTER
AuthProvider.LINE
AuthProvider.APPLEID
AuthProvider.WEIBO
AuthProvider.KAKAOGAME
"payco"
AuthProviderCredentialConstants.ACCESS_TOKEN IdPログイン後に取得した認証情報(アクセストークン)の設定
Google認証の場合は使用しない
AuthProviderCredentialConstants.AUTHORIZATION_CODE Googleログイン後に取得できるOTAC(one time authorization code)の入力
AuthProviderCredentialConstants.SHOW_LOADING_ANIMATION API呼び出しが終了するまでローディングアニメーションを表示 boolean
default: true
AuthProviderCredentialConstants.LINE_CHANNEL_REGION LINEサービス提供地域設定 Login with IdP参考

[参考]

ゲーム内で外部サービス(Facebookなど)の固有機能を使用しなければならないとき、必要になることがあります。


[注意]

外部のSDKで対応を求める開発事項は外部SDKのAPIを使用して設計する必要があり、Gamebaseでは対応しておりません。

API

+ (void)Gamebase.addMapping(Activity activity, Map<String, Object> credentialInfo, null, GamebaseDataCallback<AuthToken> callback);

Example

private static void addMappingWithCredential(final Activity activity) {
    Map<String, Object> credentialInfo = new HashMap<>();
    credentialInfo.put(AuthProviderCredentialConstants.PROVIDER_NAME, AuthProvider.FACEBOOK);
    credentialInfo.put(AuthProviderCredentialConstants.ACCESS_TOKEN, facebookAccessToken);

    Gamebase.addMapping(activity, credentialInfo, new GamebaseDataCallback<AuthToken>() {
        @Override
        public void onCallback(AuthToken data, GamebaseException exception) {
            if (Gamebase.isSuccess(exception)) {
                // マッピング追加成功
                Log.d(TAG, "Add Mapping successful");
                String userId = Gamebase.getUserID();
                return;
            }

            // マッピング追加失敗
            if (exception.getCode() == GamebaseError.SOCKET_ERROR ||
                    exception.getCode() == GamebaseError.SOCKET_RESPONSE_TIMEOUT) {
                // Socket errorにより一時的にネットワークに接続できない状態であることを意味します。
                // ネットワーク状態を確認したり、しばらくしてからもう一度試してください。
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            Thread.sleep(2000);
                            addMappingWithCredential(activity);
                        } catch (InterruptedException e) {}
                    }
                }).start();
            } else if (exception.getCode() == GamebaseError.AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER) {
                // Mappingを試行しているIDPアカウントが、既に他のアカウントに連携されています。
                // 強制的に連携を解除するには該当アカウントを退会するか、マッピング(mapping)を解除します。または次のように
                // ForcingMappingTicketを取得した後、addMappingForcibly()メソッドを利用して強制マッピングを試行します。
                Log.e(TAG, "Add Mapping failed- ALREADY_MAPPED_TO_OTHER_MEMBER");
                final ForcingMappingTicket forcingMappingTicket = ForcingMappingTicket.from(exception);
                Gamebase.addMappingForcibly(activity, forcingMappingTicket, new GamebaseDataCallback<AuthToken>() {
                    @Override
                    public void onCallback(AuthToken data, GamebaseException exception) {
                        ...
                        // 詳細はaddMappingForcibly API文書を参照してください。
                    }
                }
            } else if (exception.getCode() == GamebaseError.AUTH_ADD_MAPPING_ALREADY_HAS_SAME_IDP) {
                // Mappingを試みているIDPアカウントが既に追加されています。
                // Gamebase Mappingは、IdP一つにつき一つのアカウントのみ連携させることができます。
                // IDPアカウントを変更したい場合、既に連携中のアカウントはMappingを解除する必要があります。
                Log.e(TAG, "Add Mapping failed- ALREADY_HAS_SAME_IDP");
            } else {
                // マッピング追加失敗
                Log.e(TAG, "Add Mapping failed- "
                        + "errorCode: " + exception.getCode()
                        + "errorMessage: " + exception.getMessage());
            }
        }
    });
}

Add Mapping Forcibly

特定IdPにすでにマッピングされているアカウントがある時、強制的にマッピングを試行します。 強制マッピングを試行する時は、AddMapping APIで取得したForcingMappingTicketが必要です。

次はFacebookに強制マッピングを試行する例です。

API

+ (void)Gamebase.addMappingForcibly(Activity activity, ForcingMappingTicket forcingMappingTicket, GamebaseDataCallback<AuthToken> callback);

// Legacy API
+ (void)Gamebase.addMappingForcibly(Activity activity, String providerName, String forcingMappingKey, GamebaseDataCallback<AuthToken> callback);
+ (void)Gamebase.addMappingForcibly(Activity activity, String providerName, String forcingMappingKey, Map<String, Object> additionalInfo, GamebaseDataCallback<AuthToken> callback);
+ (void)Gamebase.addMappingForcibly(Activity activity, Map<String, Object> credentialInfo, String forcingMappingKey, GamebaseDataCallback<AuthToken> callback);

Example

private static void addMappingForciblyFacebook(final Activity activity) {
    String mappingProvider = AuthProvider.FACEBOOK;
    Gamebase.addMapping(activity, mappingProvider, new GamebaseDataCallback<AuthToken>() {
        @Override
        public void onCallback(AuthToken result, GamebaseException exception) {
            if (Gamebase.isSuccess(exception)) {
                // マッピング追加成功
                Log.d(TAG, "Add Mapping successful");
                String userId = Gamebase.getUserID();
                return;
            }

            // まずaddMapping APIを呼び出し、すでに連携されているアカウントでマッピングを試行し、次のようにForcingMappingTicketを取得できます。
            if (exception.getCode() == GamebaseError.AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER) {
                // ForcingMappingTicketクラスのfrom()メソッドを利用してForcingMappingTicketインスタンスを取得します。
                final ForcingMappingTicket forcingMappingTicket = ForcingMappingTicket.from(exception);

                // 強制マッピングを試行します。
                Gamebase.addMappingForcibly(activity, forcingMappingTicket, new GamebaseDataCallback<AuthToken>() {
                    @Override
                    public void onCallback(AuthToken data, GamebaseException addMappingForciblyException) {
                        if (Gamebase.isSuccess(addMappingForciblyException)) {
                            // 強制マッピング追加成功
                            Log.d(TAG, "Add Mapping Forcibly successful");
                            String userId = Gamebase.getUserID();
                            return;
                        }

                        // 強制マッピング追加失敗
                        // エラーコードを確認し、エラーを解決します。
                    }
                }
            } else {
                ...
            }
        }
    });
}

Change Login with ForcingMappingTicket

特定IdPにすでにマッピングされているアカウントがある時、現在のアカウントをログアウトして、すでにマッピングされているアカウントでログインします。 この時、AddMapping APIから取得したForcingMappingTicketが必要です。

Change Login APIの呼び出しが失敗した場合、Gamebaseログイン状態は既存のUserIDで維持されます。

次はFacebookでマッピングを試みた後、Facebookにすでにマッピングされているアカウントが存在するため、該当アカウントにログインを変更する例です。

API

+ (void)Gamebase.changeLogin(Activity activity, ForcingMappingTicket forcingMappingTicket, GamebaseDataCallback<AuthToken> callback);

Example

private static void changeLoginFacebook(final Activity activity) {
    String mappingProvider = AuthProvider.FACEBOOK;
    Gamebase.addMapping(activity, mappingProvider, new GamebaseDataCallback<AuthToken>() {
        @Override
        public void onCallback(AuthToken result, GamebaseException exception) {
            if (Gamebase.isSuccess(exception)) {
                // マッピング追加成功
                Log.d(TAG, "Add Mapping successful");
                String userId = Gamebase.getUserID();
                return;
            }

            // まずaddMapping APIを呼び出し、すでに連携されているアカウントでマッピングを試行し、次のようにForcingMappingTicketを取得できます。
            if (exception.getCode() == GamebaseError.AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER) {
                // ForcingMappingTicketクラスのfrom()メソッドを利用してForcingMappingTicketインスタンスを取得します。
                final ForcingMappingTicket forcingMappingTicket = ForcingMappingTicket.from(exception);

                // ForcingMappingTicketのUserIDでログインします。
                Gamebase.changeLogin(activity, forcingMappingTicket, new GamebaseDataCallback<AuthToken>() {
                    @Override
                    public void onCallback(AuthToken data, GamebaseException changeLoginException) {
                        if (Gamebase.isSuccess(changeLoginException)) {
                            // ログイン変更成功
                            Log.d(TAG, "Change Login successful");
                            String userId = Gamebase.getUserID();
                            return;
                        }

                        // ログイン変更失敗
                        // エラーコードを確認し、適切な処理を行います。
                    }
                }
            } else {
                ...
            }
        }
    });
}

Remove Mapping

特定のIdPに対する連携を解除します。現在ログインしているアカウントを解除しようとした場合は、失敗を返します。
連携を解除した後は、Gamebase内部で該当するIdPに対するログアウト処理を行います。

API

+ (void)Gamebase.removeMapping(Activity activity, String providerName, null, GamebaseDataCallback<AuthToken> callback);

Example

private static void removeMappingForFacebook(final Activity activity) {
    Gamebase.removeMapping(activity, AuthProvider.FACEBOOK, new GamebaseCallback() {
        @Override
        public void onCallback(GamebaseException exception) {
            if (Gamebase.isSuccess(exception)) {
                // マッピング解除成功
                Log.d(TAG, "Remove mapping successful");
            } else {
                if (exception.getCode() == GamebaseError.SOCKET_ERROR ||
                        exception.getCode() == GamebaseError.SOCKET_RESPONSE_TIMEOUT) {
                    // Socket errorにより一時的にネットワークに接続できない状態であることを意味します。
                    // ネットワークの状態を確認するか、しばらくしてから再試行してください。
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            try {
                                Thread.sleep(2000);
                                removeMappingForFacebook(activity);
                            } catch (InterruptedException e) {}
                        }
                    }).start();
                } else if (exception.getCode() == GamebaseError.AUTH_REMOVE_MAPPING_LOGGED_IN_IDP) {
                    // ログイン中のアカウントはMapping解除を行えません。
                    // 別のアカウントでログインしてMapping解除を行うか、退会する必要があります。
                    Log.e(TAG, "Remove Mapping failed- LOGGED_IN_IDP");
                } else {
                    // マッピング解除失敗
                    Log.e(TAG, "Remove mapping failed- "
                            + "errorCode: " + exception.getCode()
                            + "errorMessage: " + exception.getMessage());
                }
            }
        }
    });
}

Gamebase User`s Information

Gamebaseで認証フローを進めた後、アプリを制作する際に必要な情報を取得することができます。

Get Authentication Information for Gamebase

Gamebaseから発行された認証情報を取得することができます。

API

+ (String)Gamebase.getUserID();
+ (String)Gamebase.getAccessToken();
+ (String)Gamebase.getLastLoggedInProvider();

Example


// Obtaining Gamebase UserID
String userId = Gamebase.getUserID();

// Obtaining Gamebase AccessToken
String accessToken = Gamebase.getAccessToken();

// Obtaining Last Logged In Provider
String lastLoggedInProvider = Gamebase.getLastLoggedInProvider();

Get Authentication Information for External IdP

[注意]

  • 外部IdPの認証情報はセキュリティのためにゲームサーバーで呼び出すことを推奨します。
  • IdPによってはアクセストークンの有効期限が短い場合があります。
    • 例えばGoogleは、ログインしてから2時間後にはアクセストークンの有効期限が切れます。
    • ユーザー情報が必要な場合は、ログイン後すぐにGamebase Server APIを呼び出してください。
  • "Gamebase.loginForLastLoggedInProvider()" APIでログインした場合には、認証情報を取得できません。
    • ユーザー情報が必要な場合は、"Gamebase.loginForLastLoggedInProvider()"の代わりに、使用したいIDPCodeと同じ{IDP_CODE}をパラメータにして"Gamebase.login(activity, IDP_CODE, callback)"APIでログインする必要があります。

Get Banned User Information

Gamebase Consoleで利用制限対象のゲームユーザーに登録された場合、 ログインを試みると、次のような利用制限情報コードが表示されることがあります。BanInfo.from(exception)メソッドを利用して利用制限情報を確認することができます。

  • BANNED_MEMBER(7)

TransferAccount

ゲストアカウントを他の端末に移行するためのキーを発行する機能です。

このキーをTransferAccountInfoと呼びます。 発行されたTransferAccountInfoは、他の端末でrequestTransferAccountAPIを呼び出してアカウントを移行できます。

[注意]
TransferAccountInfoは、ゲストログイン状態でのみ発行できます。 TransferAccountInfoを利用したアカウント移行は、ゲストログイン状態またはログインしていない状態でのみ可能です。 ログインしたゲストアカウントがすでに他の外部IdP (Google、Facebook、PAYCOなど)アカウントとマッピングされている場合は、アカウント移行がサポートされません。

Issue TransferAccount

ゲストアカウントを移行するためにTransferAccountInfoを発行します。

API

+ (void)Gamebase.issueTransferAccount(final GamebaseDataCallback<TransferAccountInfo> callback);

Example

Gamebase.issueTransferAccount(new GamebaseDataCallback<TransferAccountInfo>() {
    @Override
    public void onCallback(final TransferAccountInfo transferAccount, final GamebaseException exception) {
        if (!Gamebase.isSuccess(exception)) {
            // Issuing TransferAccount failed.
            return;
        }

        // Issuing TransferAccount success.
        final String account = transferAccount.account.id;
        final String password = transferAccount.account.password;
    }
});

Query TransferAccount

ゲストアカウントを移行するために、すでに発行されているTransferAccountInfo情報をGamebaseサーバーに問い合わせます。

API

+ (void)Gamebase.queryTransferAccount(final GamebaseDataCallback<TransferAccountInfo> callback);

Example

Gamebase.queryTransferAccount(new GamebaseDataCallback<TransferAccountInfo>() {
    @Override
    public void onCallback(final TransferAccountInfo transferAccount, final GamebaseException exception) {
        if (!Gamebase.isSuccess(exception)) {
            // Querying TransferAccount failed.
            return;
        }

        // Querying TransferAccount success.
        final String account = transferAccount.account.id;
        final String password = transferAccount.account.password;
    }
});

Renew TransferAccount

すでに発行されたTransferAccountInfo情報を更新します。 更新方法には自動更新手動更新があり、パスワードのみ更新IDとパスワードを更新を選択してTransferAccountInfo情報を更新できます。

+ (void)Gamebase.renewTransferAccount(final TransferAccountRenewConfiguration config, final GamebaseDataCallback<TransferAccountInfo> callback);

Example

// If you want renew the account automatically, use this config.
final RenewalTargetType renewalTargetType = RenewalTargetType.ID_PASSWORD; // RenewalTargetType.PASSWORD
final TransferAccountRenewConfiguration autoConfig = TransferAccountRenewConfiguration.newAutoRenewConfiguration(renewalTargetType);

// If you want renew the account manually, use this config.
final TransferAccountRenewConfiguration manualConfig = TransferAccountRenewConfiguration.newManualRenewConfiguration("id", "password");
Gamebase.renewTransferAccount(autoConfig, new GamebaseDataCallback<TransferAccountInfo>() {
    @Override
    public void onCallback(final TransferAccountInfo transferAccountInfo, final GamebaseException exception) {
        if (!Gamebase.isSuccess(exception)) {
            // Renewing TransferAccount failed.
            return;
        }

        // Renewing TransferAccount success.
        final String renewedAccount = transferAccount.account.id;
        final String renewedPassword = transferAccount.account.password;
    }
});

Transfer Guest Account to Another Device

issueTransferAPIで発行したTransferAccountでアカウントを移行する機能です。 アカウントの移行に成功した時、TransferAccountを発行した端末で移行完了メッセージが表示される場合があり、ゲストログインすると新規のアカウントが作成されます。 アカウント移行が成功した端末では、TransferAccountを発行した端末のゲストアカウントを継続して使用できます。

[Caution]

  • すでにゲストログインしている状態で移行すると、端末にログインしていたゲストアカウントは消滅します。
  • 無効なIDやパスワードを連続して入力すると、AUTH_TRANSFERACCOUNT_BLOCK(3042)エラーが発生し、アカウント移行が一定時間できなくなります。 この場合は、下記の例のようにTransferAccountFailInfoの値でいつまでアカウント移行ができないかをユーザーに伝えることができます。

API

+ (void)Gamebase.transferAccountWithIdPLogin(String accountId, String accountPassword, GamebaseDataCallback<AuthToken> callback);

Example

Gamebase.transferAccountWithIdPLogin(accountId, accountPassword, new GamebaseDataCallback<AuthToken>() {
    @Override
    public void onCallback(AuthToken authToken, GamebaseException exception) {
        if (!Gamebase.isSuccess(exception)) {
            // Transfering Account failed.
            TransferAccountFailInfo failInfo = TransferAccountFailInfo.from(exception);
            if (failInfo != null) {
                // Transfering Account failed by entering the wrong id / pw multiple times.
                // You can tell when the account transfer is blocked by the TransferAccountFailInfo.
                String failedId = failInfo.id;
                int failCount = failInfo.failCount;
                Date blockedDate = new Date(failInfo.blockEndDate);
                return;
            }

            // Transfering Account failed by another reason.
            return;
        }

        // Transfering Account success.
        // TODO: implements post login process
    }
});

TemporaryWithdrawal

退会猶予機能です。 一時退会をリクエストして即時に退会が行われず、一定期間が過ぎると退会されます。 猶予期間はコンソールで変更できます。

[注意]

退会猶予機能を使用する場合はGamebase.withdraw()APIを使用しないでください。 Gamebase.withdraw()APIを使用するとアカウントを即時に退会させます。

ログインに成功するとAuthToken.getTemporaryWithdrawalInfo() APIを呼び出して退会猶予状態のユーザーなのかを判断できます。

Request TemporaryWithdrawal

一時退会をリクエストします。 コンソールで設定した期間が過ぎると、自動的に退会が行われます。

API

+ (void)Gamebase.TemporaryWithdrawal.requestWithdrawal(@NonNull Activity activity,
                                                       @Nullable GamebaseDataCallback<TemporaryWithdrawalInfo> callback);

ErrorCode

Error Code Description
AUTH_WITHDRAW_ALREADY_TEMPORARY_WITHDRAW(3602) すでに一時退会中のユーザーです。

Example

public static void testRequestWithdraw() {
    Gamebase.TemporaryWithdrawal.requestWithdrawal(new GamebaseCallback() {
        @Override
        public void onCallback(TemporaryWithdrawalInfo data GamebaseException exception) {
            if (!Gamebase.isSuccess(exception)) {
                if (exception.getCode() == GamebaseError.AUTH_WITHDRAW_ALREADY_TEMPORARY_WITHDRAW) {
                    // Already requested temporary withdrawal before.
                } else {
                    // Request temporary withdrawal failed.
                    return;
                }
            }

            // Request temporary withdrawal success.
        }
    });
}

Check TemporaryWithdrawal User

退会猶予を使用するゲームはログイン後、常にAuthToken.getTemporaryWithdrawalInfo() APIを呼び出し、結果がnullではない有効なTemporaryWithdrawalInfoオブジェクトがリターンされた場合、該当ユーザーに退会進行中ということを伝える必要があります。

Example

public static void testLogin() {
    Gamebase.login(activity, provider, new GamebaseDataCallback<AuthToken>() {
        @Override
        public void onCallback(AuthToken data, GamebaseException exception) {
            if (!Gamebase.isSuccess(exception)) {
                // Login failed
                return;
            }

            // Check if user is requesting withdrawal
            if (data.getTemporaryWithdrawalInfo() != null) {
                // User is under temporary withdrawal
                long gracePeriodDate = data.getTemporaryWithdrawalInfo().getGracePeriodDate();
            } else {
                // Login success.
            }
        }
    });
}

Cancel TemporaryWithdrawal

退会リクエストをキャンセルします。 退会リクエスト後、猶予期間が過ぎて退会が完了した場合、キャンセルできません。

API

+ (void)Gamebase.TemporaryWithdrawal.cancelWithdrawal(@NonNull Activity activity,
                                                      @Nullable GamebaseCallback callback);

ErrorCode

Error Code Description
AUTH_WITHDRAW_NOT_TEMPORARY_WITHDRAW(3603) 一時退会中のユーザーではありません。

Example

public static void testCancelWithdraw() {
    Gamebase.TemporaryWithdrawal.cancelWithdrawal(new GamebaseCallback() {
        @Override
        public void onCallback(final GamebaseException exception) {
            if (!Gamebase.isSuccess(exception)) {
                if (exception.getCode() == GamebaseError.AUTH_WITHDRAW_NOT_TEMPORARY_WITHDRAW) {
                    // Never requested temporary withdrawal before.
                } else {
                    // Cancel temporary withdrawal failed.
                    return;
                }
            }

            // Cancel temporary withdrawal success.
        }
    });
}

Withdraw Immediately

退会猶予期間を無視して即時退会を進行します。 実際の内部動作はGamebase.withdraw() APIと同じです。

即時退会はキャンセルができないため、ユーザーに実行するかどうかをよく確認してください。

API

+ (void)Gamebase.TemporaryWithdrawal.withdrawImmediately(@NonNull Activity activity,
                                                         @Nullable GamebaseCallback callback);

Example

public static void testWithdrawImmediately() {
    Gamebase.TemporaryWithdrawal.withdrawImmediately(activity, new GamebaseCallback() {
        @Override
        public void onCallback(final GamebaseException exception) {
            if (!Gamebase.isSuccess(exception)) {
                // Withdraw failed.
                return;
            }

            // Withdraw success.
        }
    });
}

GraceBan

  • 「決済アビューズ自動解除」機能です。
    • 決済アビューズ自動解除機能は、決済アビューズ自動制裁で利用停止にならなければいけないユーザーが利用停止猶予状態後、利用停止になるようにします。
    • 利用停止猶予状態の場合、設定した期間内に解除条件を全て満たすと正常にプレイが可能になります。
    • 期間内に条件を満たせなかった場合、利用停止になります。
  • 決済アビューズ自動解除機能を使用するゲームはログイン後、常にAuthToken.getGraceBanInfo() APIを呼び出して結果がnullではない有効なGraceBanInfoオブジェクトを返した場合、該当ユーザーに利用停止解除条件、期間などを案内する必要があります。
    • 利用停止猶予状態のユーザーのゲーム内アクセス制御はゲームで処理する必要があります。

Example

public static void testLogin() {
    Gamebase.login(activity, provider, new GamebaseDataCallback<AuthToken>() {
        @Override
        public void onCallback(AuthToken token, GamebaseException exception) {
            if (!Gamebase.isSuccess(exception)) {
                // Login failed
                return;
            }

            // Check if user is under grace ban
            GraceBanInfo graceBanInfo = token.getGraceBanInfo();
            if (graceBanInfo != null) {
                String periodDate = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.getDefault())
                        .format(new Date(graceBanInfo.getGracePeriodDate()));
                String message = URLDecoder.decode(graceBanInfo.getMessage(), "utf-8");
                GraceBanInfo.ReleaseRuleCondition releaseRuleCondition =
                            graceBanInfo.releaseRuleCondition();
                GraceBanInfo.PaymentStatus paymentStatus = graceBanInfo.getPaymentStatus();
                if (releaseRuleCondition != null) {
                    // condition type : "AND", "OR"
                    String releaseRule = releaseRuleCondition.getAmount() +
                            releaseRuleCondition.getCurrency() +
                            " " + releaseRuleCondition.getConditionType() + " " +
                            releaseRuleCondition.getCount() + "time(s)";
                }
                if (paymentStatus != null) {
                    String paidAmount = paymentStatus.getAmount() + paymentStatus.getCurrency();
                    String paidCount = paymentStatus.getCount() + "time(s)";
                }
                // Guide the user through the UI how to finish the grace ban status.
            } else {
                // Login success.
            }
        }
    });
}

Error Handling

Category Error Error Code Description
Auth INVALID_MEMBER 6 正しくない会員に対するリクエストです。
BANNED_MEMBER 7 利用制限対象の会員です。
Auth AUTH_USER_CANCELED 3001 ログインがキャンセルされました。
AUTH_NOT_SUPPORTED_PROVIDER 3002 この認証方式には対応しておりません。
AUTH_NOT_EXIST_MEMBER 3003 退会されているか、存在しない会員です。
AUTH_EXTERNAL_LIBRARY_INITIALIZATION_ERROR 3006 外部認証ライブラリの初期化に失敗しました。
AUTH_EXTERNAL_LIBRARY_ERROR 3009 外部認証ライブラリエラーです。
詳細エラーを確認してください。
AUTH_ALREADY_IN_PROGRESS_ERROR 3010 移行認証プロセスが完了していません。
AUTH_INVALID_GAMEBASE_TOKEN 3011 Gamebase Access Tokenが有効ではないためログアウトしました。
ログインを再試行してください。
TransferAccount SAME_REQUESTOR 8 発行したTransferAccountを同じ端末で使用しました。
NOT_GUEST_OR_HAS_OTHERS 9 ゲストではないアカウントから移行しようとしたか、アカウントにゲスト以外のIdPが連携されています。
AUTH_TRANSFERACCOUNT_EXPIRED 3041 TransferAccountの有効期限が切れました。
AUTH_TRANSFERACCOUNT_BLOCK 3042 無効なTransferAccountを複数回入力したため、アカウント移行機能がロックされました。
AUTH_TRANSFERACCOUNT_INVALID_ID 3043 TransferAccountのIDが有効ではありません。
AUTH_TRANSFERACCOUNT_INVALID_PASSWORD 3044 TransferAccountのパスワードが有効ではありません。
AUTH_TRANSFERACCOUNT_CONSOLE_NO_CONDITION 3045 TransferAccountが設定されていません。
先にTOAST Gamebaseコンソールで設定してください。
AUTH_TRANSFERACCOUNT_NOT_EXIST 3046 TransferAccountがありません。先にTransferAccountを発行してください。
AUTH_TRANSFERACCOUNT_ALREADY_EXIST_ID 3047 TransferAccountがすでに存在します。
AUTH_TRANSFERACCOUNT_ALREADY_USED 3048 TransferAccountはすでに使われています。
Auth (Login) AUTH_TOKEN_LOGIN_FAILED 3101 トークンログインに失敗しました。
AUTH_TOKEN_LOGIN_INVALID_TOKEN_INFO 3102 トークン情報が有効ではありません。
AUTH_TOKEN_LOGIN_INVALID_LAST_LOGGED_IN_IDP 3103 最近ログインしたIdPの情報がありません。
IdP Login AUTH_IDP_LOGIN_FAILED 3201 IdPログインに失敗しました。
AUTH_IDP_LOGIN_INVALID_IDP_INFO 3202 IdP情報が有効ではありません。(Consoleに該当するIdPの情報がありません。)
Add Mapping AUTH_ADD_MAPPING_FAILED 3301 マッピング追加に失敗しました。
AUTH_ADD_MAPPING_ALREADY_MAPPED_TO_OTHER_MEMBER 3302 既に他のメンバーにマッピングされています。
AUTH_ADD_MAPPING_ALREADY_HAS_SAME_IDP 3303 既に同じIdPにマッピングされています。
AUTH_ADD_MAPPING_INVALID_IDP_INFO 3304 IdP情報が有効でありません。(Consoleに該当するIdPの情報がありません。)
AUTH_ADD_MAPPING_CANNOT_ADD_GUEST_IDP 3305 ゲストIdPではAddMappingができません。
Add Mapping Forcibly AUTH_ADD_MAPPING_FORCIBLY_NOT_EXIST_KEY 3311 強制マッピングキー(ForcingMappingKey)がありません。
ForcingMappingTicketを再度確認してください。
AUTH_ADD_MAPPING_FORCIBLY_ALREADY_USED_KEY 3312 強制マッピングキー(ForcingMappingKey)がすでに使われています。
AUTH_ADD_MAPPING_FORCIBLY_EXPIRED_KEY 3313 強制マッピングキー(ForcingMappingKey)の有効期限が切れました。
AUTH_ADD_MAPPING_FORCIBLY_DIFFERENT_IDP 3314 強制マッピングキー(ForcingMappingKey)が他のIdPに使用されました。
発行したForcingMappingKeyは、同じIdPに強制マッピングを試行するのに使用されます。
AUTH_ADD_MAPPING_FORCIBLY_DIFFERENT_AUTHKEY 3315 強制マッピングキー(ForcingMappingKey)が他のアカウントに使用されました。
発行したForcingMappingKeyは、同じIdPおよびアカウントに強制マッピングを試行するのに使用されます。
Remove Mapping AUTH_REMOVE_MAPPING_FAILED 3401 マッピング削除に失敗しました。
AUTH_REMOVE_MAPPING_LAST_MAPPED_IDP 3402 最後にマッピングされたIdPは削除することができません。
AUTH_REMOVE_MAPPING_LOGGED_IN_IDP 3403 現在ログイン中のIdPです。
Logout AUTH_LOGOUT_FAILED 3501 ログアウトに失敗しました。
Withdrawal AUTH_WITHDRAW_FAILED 3601 退会に失敗しました。
AUTH_WITHDRAW_ALREADY_TEMPORARY_WITHDRAW 3602 すでに一時退会中のユーザーです。
AUTH_WITHDRAW_NOT_TEMPORARY_WITHDRAW 3603 一時退会中のユーザーではありません。
Not Playable AUTH_NOT_PLAYABLE 3701 プレイできない状態です(メンテナンスまたはサービス終了など)。
Auth(Unknown) AUTH_UNKNOWN_ERROR 3999 不明なエラーです。(定義されていないエラーです)。
  • 全体のエラーコードは、次のドキュメントをご参考ください。

AUTH_EXTERNAL_LIBRARY_ERROR

  • このエラーは外部認証ライブラリでエラーが発生した時に返されます。
  • 外部認証ライブラリで発生したエラー情報は詳細エラーに含まれており、詳細なエラーコードおよびメッセージは次のように確認できます。
Gamebase.login(activity, provider, new GamebaseDataCallback<AuthToken>() {
    @Override
    public void onCallback(AuthToken data, GamebaseException exception) {
        if (Gamebase.isSuccess(exception)) {
            Log.d(TAG, "Login successful");
            ...
        } else {
            Log.e(TAG, "Login failed");

            // Gamebase Error Info
            int errorCode = exception.getCode();
            String errorMessage = exception.getMessage();

            if (errorCode == GamebaseError.AUTH_EXTERNAL_LIBRARY_ERROR) {
                // Third Party Detail Error Info
                int moduleErrorCode = exception.getDetailCode();
                String moduleErrorMessage = exception.getDetailMessage();

                ...
            }
        }
    }
});
  • 詳細エラーコードは、それぞれの外部認証ライブラリのDeveloperページを参照してください。
TOP