--- title: "Android SDK" slug: "game-gamepot3-android-sdk" updated: 2026-10-08T10:04:32Z published: 2026-10-08T10:04:32Z canonical: "guide.ncloud-docs.com/game-gamepot3-android-sdk" --- > ## Documentation Index > Fetch the complete documentation index at: https://guide.ncloud-docs.com/llms.txt > Use this file to discover all available pages before exploring further. # Android SDK Classic/VPC環境で利用できます。 Android環境向け GAMEPOT Android SDKの使用方法をご案内します。SDKをインストールして環境を構成することで、ゲームとダッシュボードを連携できます。 ## システム要件 Android用 GAMEPOT SDKを使用するためのシステム要件は、次の通りです。 - 最低動作環境は Android level 24以降です。旧バージョンへのサポートが必要な場合は、[お問い合わせチャネル](https://www.ncloud.com/support/question)までご連絡ください。 ## SDKのインストールと環境の構成 Android SDKをインストールしてから環境を構成し、GAMEPOTのダッシュボードとゲームを連携してゲーム開発に必要な機能を使用できます。 GAMEPOT SDKでサポートしている言語は次の通りです。 - 韓国語、英語、イタリア語、タイ語、ベトナム語、日本語、中国語(簡体字/繁体字)、インドネシア語、ドイツ語、スペイン語、フランス語 GAMEPOT初期化時に登録した言語で自動表示されます。未対応の言語の場合は英語で表示されます。 ### SDKのインストール GAMEPOT Android SDKを導入してプロジェクトを設定する手順は次の通りです。 1. `build.gradle`または`build.gradle.kts`ファイルに NBase SDKを追加します。 2. GAMEPOT 3.0 以降では、Gradleの設定で外部ライブラリを簡単に統合できます。 #### Kotlin Gradleの設定 Kotlin DSLを使用するプロジェクトの場合は、次の設定を追加してください。 1. プロジェクトルートの`build.gradle.kts`ファイルに次の設定を追加します。 Kotlin: ``` dependencyResolutionManagement { repositories { ... google() maven(url = "https://repo.nbase.io/repository/nbase-releases") } } ``` 1. アプリモジュール(`Module: app`)の`build.gradle.kts`ファイルに次の設定を追加します。 Kotlin: ``` dependencies { ... implementation("io.nbase:nbasesdk:latest.release") } ``` Googleログインと Google Play Store決済を併せて使用する場合は、次の例をご参照ください。 Kotlin: ``` dependencies { ... implementation("io.nbase:nbasesdk:latest.release") implementation("io.nbase:nbase-adapter-provider-google:latest.release") implementation("io.nbase:nbase-adapter-billing-googleplay:latest.release") } ``` #### Java Gradleの設定 Groovy DSLを使用するプロジェクトでは、次の設定を追加してください。 1. プロジェクトルートの`build.gradle`ファイルに次の設定を追加します。 Groovy: ``` allprojects { repositories { ... google() maven { url "https://repo.nbase.io/repository/nbase-releases" } } } ``` 1. アプリモジュール(`Module: app`)の`build.gradle`ファイルに次の設定を追加します。 Groovy: ``` dependencies { ... implementation("io.nbase:nbasesdk:latest.release") } ``` Googleログインと Google Play Store決済を併せて使用する場合は、次の例をご参照ください。 Groovy: ``` dependencies { ... implementation("io.nbase:nbasesdk:latest.release") implementation("io.nbase:nbase-adapter-provider-google:latest.release") implementation("io.nbase:nbase-adapter-billing-googleplay:latest.release") } ``` 対応可能な AOS依存モジュールは次の通りです。 | Name | Description | Dependency modules | | --- | --- | --- | | io.nbase:nbasesdk | GAMEPOT基本モジュール | X | | io.nbase:nbase-adapter-provider-google | Googleログイン | X | | io.nbase:nbase-adapter-provider-apple | Appleログイン | X | | io.nbase:nbase-adapter-provider-facebook | Facebookログイン | com.facebook.android:facebook-login:latest.release | | io.nbase:nbase-adapter-provider-kakao | Kakaoログイン | X | | io.nbase:nbase-adapter-provider-line | LINEログイン | X | | io.nbase:nbase-adapter-provider-naver | NAVERログイン | X | | io.nbase:nbase-adapter-provider-huawei | Huaweiログイン | X | | io.nbase:nbase-adapter-provider-playgame | Google Play Gamesログイン | X | | io.nbase:nbase-adapter-provider-x | Xログイン | X | | io.nbase:nbase-adapter-billing-googleplay | Google Play Store | com.android.billingclient:billing:8.0.0 | | io.nbase:nbase-adapter-billing-onestore | ONE Store | X | | io.nbase:nbase-adapter-billing-galaxy | Galaxy Store | X | | io.nbase:nbase-adapter-billing-huawei | Huawei Store | X | ゲストログインは基本モジュールに含まれています。 ### 事前準備 SDKを適用する前に、必須設定項目を次のようにご確認ください。 1. プロジェクト IDとプロジェクトキーは**ダッシュボード** > **プロジェクトの設定**からコピーします。 2. ログイン、ストア、連携に関する環境設定は**ダッシュボード** > **プロジェクトの設定**で行います。 3. ログイン別に[ログイン手段別環境設定](/docs/ja/game-gamepot3-google-integration)を参照し、コンソールに設定してダッシュボードに追加します。 4. In-App決済を利用する場合、[ストア別環境設定](/docs/ja/game-gamepot3-google-play-store)を参照して、コンソールで設定し、ダッシュボードに追加します。 5. In-App決済用の各ストアのアイテムを**ダッシュボード** > **決済** > **In-App** で登録します。 ### リセット リセットを実行するには、ゲームを始める際にロードされる最初の画面に使用されるインスタンスに、以下のコードを追加します。 Kotlin: ``` import android.util.Log import com.nbase.sdk.NBase import com.nbase.sdk.Store NBase.initialize(activity, projectId, projectKey, storeId, language, region) { init, e -> if (e != null) { Log.e("NBase", e.message ?: "initialize fail") } else { Log.i("NBase", "initialize success: ${init.toString()}") } } ``` Java: ``` import android.util.Log; import com.nbase.sdk.NBase; import com.nbase.sdk.Store; NBase nBase = NBase.INSTANCE; nBase.initialize(activity, projectId, projectKey, Store.GOOGLE, language, region, (init, e) -> { if (e != null) { Log.e("NBase", "initialize fail: " + e.getMessage()); } else { Log.i("NBase", "initialize success: " + init.toString()); } return null; }); ``` - **Parameters** 次の表は、初期化に必要なパラメータを説明します。 | Key | Type | Description | Required | | --- | --- | --- | --- | | projectId | String | プロジェクト ID(**ダッシュボード** → **プロジェクトの設定**) | O | | projectKey | String | プロジェクトキー (**ダッシュボード** → **プロジェクトの設定**) | O | | storeId | String | ストア ID (下記表を参照) | O | | language | String | 言語コード(en、ko、jpなど) | O | | region | String | リージョン名(kr、jp、sg、us、eu、preview) | O | ストア識別子は、次の表をご参照ください。 | Key | Description | | --- | --- | | Store.GOOGLE | Google Play Store | | Store.ONE | ONE Store | | Store.GALAXY | Galaxy Store | | Store.AMAZON | Amazon Store | | Store.HUAWEI | Huawei Store | - **Callback** 次の表は、初期化コールバックに渡される情報を説明します。 | Key | Type | Description | | --- | --- | --- | | status | Boolean | 状態 | | language | String | 言語 | | country | String | 国 | | remote_ip | String | IP | | platform | String | プラットフォーム | | sandbox | Boolean | サンドボックスかどうか | ## ログイン機能 ログイン機能を利用し、さまざまな認証方法でユーザーを認証する方法について説明します。 ### ログイン機能の使用 開発会社が実装したログイン UIから SDKのログイン機能を呼び出すには、次のコードをご参照ください。 Kotlin: ``` import android.content.Intent import android.util.Log import com.nbase.sdk.NBase import com.nbase.sdk.Provider NBase.signIn(activity, Provider.GOOGLE.toString()) { user, e -> if (e != null) { if (e.errorCode == 414) { // Maintenance // Maintenance Log.e("NBase", "Maintenance: " + e.message) // Maintenance message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus) { status, err -> // Popup handling } */ } else if (e.errorCode == 413) { // Update // Update Log.e("NBase", "Update: " + e.message) // Update message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus) { status, err -> // Popup handling } */ } else { // signIn Failed Log.e("NBase", "signIn Failed: " + e.errorCode + ", " + e.message) } } else { // signIn Success Log.e("NBase", "signIn Success: " + user.toString()) } } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) NBase.onActivityResult(requestCode, resultCode, data) } ``` Java: ``` import android.content.Intent; import android.util.Log; import com.nbase.sdk.NBase; import com.nbase.sdk.Provider; NBase nBase = NBase.INSTANCE; nBase.signIn(activity, Provider.GOOGLE.toString(), (user, e) -> { if (e != null) { if (e.getErrorCode() == 414) { // Maintenance // Maintenance Log.e("NBase", "Maintenance: " + e.getMessage()) // Maintenance message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus, (status, err) -> { // Popup handling } */ } else if (e.getErrorCode() == 413) { // Update // Update Log.e("NBase", "Update: " + e.getMessage()) // Update message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus, (status, err) -> { // Popup handling } */ } else { // signIn Failed Log.e("NBase", "signIn Failed: " + e.getErrorCode() + ", " + e.getMessage()); } } else { // signIn Success Log.e("NBase", "signIn Success: " + user.toString()); } return null; }); @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); nBase.onActivityResult(requestCode, resultCode, data); } ``` アップデートまたはメンテナンス時に SDKが提供する独自のポップアップを使用する場合、以下のコードを追加します。 Kotlin: ``` NBase.showAppStatusPopup(activity, appStatus){ status, e -> if (status.close){ // App Close } else if (status.next){ // Next, Optional update } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.showAppStatusPopup(activity, appStatus){ status, e -> if (status.getClose()){ // App Close } else if (status.getNext()){ // Next, Optional update } } ``` - **Provider** 次の表は、ログイン機能で使用するサービスタイプを説明します。 | Key | Description | | --- | --- | | Provider.GOOGLE | Google | | Provider.ANONYMOUS | ゲスト | | Provider.FACEBOOK | Facebook | | Provider.APPLE | Apple | | Provider.KAKAO | Kakao | | Provider.GOOGLEPLAY | Google Play Games | | Provider.STEAM | Steam | | Provider.X | X | | Provider.LINE | LINE | | Provider.NAVER | NAVER | | Provider.GITHUB | GitHub | | Provider.MICROSOFT | Microsoft | | Provider.HUAWEI | Huawei | - **User** 次の表は、Userオブジェクトのフィールドを説明します。 | Key | Type | Description | | --- | --- | --- | | id | string | ユーザーの固有 ID | | socialId | string | ソーシャル ID | | name | string | 氏名 (提供してくれる場合) | | email | string | メール (提供してくれる場合) | | token | string | トークン | | age | int | 年齢 (提供してくれる場合) | | profile | string | プロファイル (提供してくれる場合) | | customField | string | カスタムフィールド | | isSignUp | bool | 会員登録しているかどうか | | appStatus | AppStatus | メンテナンス/アップデート状態 | - **AppStatus** 次の表は、AppStatusオブジェクトのフィールドを説明します。 | Key | Type | Description | | --- | --- | --- | | message | string | メッセージ | | startedAt | long | 開始時間 | | endedAt | long | 終了時間 | | currentAppVersion | string | 現在のアプリバージョン | | updateAppVersion | string | アップデート後のアプリバージョン | | currentAppVersionCode | string | 現在のアプリバージョンコード | | updateAppVersionCode | string | アップデート後のアプリバージョンコード | | isForce | bool | 強制アップデートかどうか | | url | string | メンテナンス/アップデートが登録された URL | ### SDK独自提供のログイン UI GAMEPOT SDKが提供する完成された形のログイン UIを使用できます。 SDKが提供するログイン UIを呼び出すには、以下のコードを使用します。 Kotlin: ``` NBase.openSignInUI(activity) { user, e -> if (e != null) { if (e.errorCode == 414) { // Maintenance // Maintenance Log.e("NBase", "Maintenance: " + e.message) // Maintenance message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus) { status, err -> // Popup handling } */ } else if (e.errorCode == 413) { // Update // Update Log.e("NBase", "Update: " + e.message) // Update message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus) { status, err -> // Popup handling } */ } else { // signIn Failed Log.e("NBase", "signIn Failed: " + e.errorCode + ", " + e.message) } } else { // signIn Success Log.e("NBase", "signIn Success: " + user.toString()) } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.openSignInUI(activity, (user, e) -> { if (e != null) { if (e.getErrorCode() == 414) { // Maintenance // Maintenance Log.e("NBase", "Maintenance: " + e.getMessage()) // Maintenance message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus, (status, err) -> { // Popup handling } */ } else if (e.getErrorCode() == 413) { // Update // Update Log.e("NBase", "Update: " + e.getMessage()) // Update message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus, (status, err) -> { // Popup handling } */ } else { // signIn Failed Log.e("NBase", "signIn Failed: " + e.getErrorCode() + ", " + e.getMessage()); } } else { // signIn Success Log.e("NBase", "signIn Success: " + user.toString()); } return null; }); ``` ### 自動ログイン(オプション) 初期化の後、最後にログインした認証手段で自動ログインを試行することができます。自動ログインを試行する前に、最終ログイン Providerタイプの確認をお勧めします。 Kotlin: ``` // 最終ログイン Providerタイプを確認 val lastProviderType = NBase.getLastProviderType() if (lastProviderType != Provider.NONE) { // 有効な Providerがある場合にのみ自動ログインを試行 NBase.signInLastLoggedIn(activity) { user, e -> if (e != null) { if (e.errorCode == 414) { // Maintenance // Maintenance Log.e("NBase", "Maintenance: " + e.message) // Maintenance message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus) { status, err -> // Popup handling } */ } else if (e.errorCode == 413) { // Update // Update Log.e("NBase", "Update: " + e.message) // Update message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus) { status, err -> // Popup handling } */ } else { // signIn Failed Log.e("NBase", "signIn Failed: " + e.errorCode + ", " + e.message) } } else { // signIn Success Log.e("NBase", "signIn Success: " + user.toString()) } } } else { // 最終ログイン情報なし Log.e("NBase", "No last login provider found") } ``` Java: ``` NBase nBase = NBase.INSTANCE; // 最終ログイン Providerタイプを確認 Provider lastProviderType = nBase.getLastProviderType(); if (lastProviderType != Provider.NONE) { // 有効な Providerがある場合にのみ自動ログインを試行 nBase.signInLastLoggedIn(activity, (user, e) -> { if (e != null) { if (e.getErrorCode() == 414) { // Maintenance // Maintenance Log.e("NBase", "Maintenance: " + e.getMessage()) // Maintenance message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus, (status, err) -> { // Popup handling } */ } else if (e.getErrorCode() == 413) { // Update // Update Log.e("NBase", "Update: " + e.getMessage()) // Update message /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, user?.appStatus, (status, err) -> { // Popup handling } */ } else { // signIn Failed Log.e("NBase", "signIn Failed: " + e.getErrorCode() + ", " + e.getMessage()); } } else { // signIn Success Log.e("NBase", "signIn Success: " + user.toString()); } return null; }); } else { // 最終ログイン情報なし Log.e("NBase", "No last login provider found"); } ``` - **getLastProviderType()** 最終ログインの Providerタイプを返します。 次の表は、getLastProviderType()メソッドの返り値について説明します。 | Return Type | Description | | --- | --- | | Provider | 最終ログインの Providerタイプ | - **signInLastLoggedIn() Parameter** 最後にログインした認証方法で自動ログインを試みます。 次の表は、signInLastLoggedIn()メソッドのパラメータについて説明します。 | Key | Type | Description | Required | | --- | --- | --- | --- | | activity | Activity | 現在のアクティビティ | O | - **Callback** 次の表は、自動ログインコールバックに渡される値を説明します。 | Key | Type | Description | | --- | --- | --- | | user | User | ログイン成功時のユーザー情報 | | error | Error | ログイン失敗時のエラー情報 | ### ログアウト GAMEPOTユーザーアカウントからログアウトするには、以下のコードを使用してください。 Kotlin: ``` NBase.signOut(activity) { status, e -> if (e != null) { Log.e("NBase", "signOut Fail") Log.e("NBase", "error.message : " + e.message.toString()) } else { Log.e("NBase", "signOut") Log.e("NBase", "status : " + status.toString()) // ログアウト成功後の処理ロジック } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.signOut(activity, (status, e) -> { if (e != null) { Log.e("NBase", "signOut Fail"); Log.e("NBase", "error.message : " + e.getMessage()); } else { Log.e("NBase", "signOut"); Log.e("NBase", "status : " + status.toString()); // ログアウト成功後の処理ロジック } return null; }); ``` - **Parameter** 次の表は、getLastProviderType()メソッドのパラメータについて説明します。 | Key | Type | Description | Required | | --- | --- | --- | --- | | activity | Activity | 現在のアクティビティ | O | - **Callback** 次の表は、ログアウトコールバックに渡される値を説明します。 | Key | Type | Description | | --- | --- | --- | | status | Boolean | ログアウトは成功したか | ### 退会 SDK退会機能を使用するには、以下のコードを使用します。 Kotlin: ``` NBase.deleteMember(providerId) { status, e -> if (e != null) { Log.e("NBase", "deleteMember Fail") Log.e("NBase", "error.message : " + e.message.toString()) } else { Log.e("NBase", "deleteMember") Log.e("NBase", "status : " + status.toString()) // 退会成功後の処理ロジック } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.deleteMember(providerId, (status, e) -> { if (e != null) { Log.e("NBase", "deleteMember Fail"); Log.e("NBase", "error.message : " + e.getMessage()); } else { Log.e("NBase", "deleteMember"); Log.e("NBase", "status : " + status.toString()); // 退会成功後の処理ロジック } return null; }); ``` - **Parameters** 次の表は、退会時に渡すべきパラメータを説明します。 | Key | Type | Description | Required | | --- | --- | --- | --- | | providerId | Provider | ログインした Providerタイプ(例: Provider.GOOGLE、Provider.ANONYMOUSなど) | O | - **Callback** 次の表は、退会コールバックの値を説明します。 | Key | Type | Description | | --- | --- | --- | | status | Boolean | 退会は成功したか | ### 独自の IDパスワード認証 (オプション) ユーザーがメールアドレスとパスワードを使用してログインできるようにする認証メソッドです。ユーザーのメールアドレスとパスワードに基づいてユーザー認証を行います。 Kotlin: ``` NBase.signInWithPassword(activity, username, password) { user, e -> if (e != null) { Log.e("NBase", e.message) } else { Log.e("NBase", user) } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.signInWithPassword(activity, username, password, (user, e) -> { if (e != null) { Log.e("NBase", "signInWithPassword fail: " + e.getMessage()); } else { Log.e("NBase", "signInWithPassword success: " + user.toString()); } return null; }); ``` ### 認証情報でログイン (オプション) 外部から取得したソーシャルアカウントの認証情報(Access Token)を使用してログインするには、以下のコードを使用します。 Kotlin: ``` NBase.signInWithCredential(activity, Provider.GOOGLE.ToString(), providerToken) { user, e -> if (e != null) { Log.e("NBase", e.message) } else { Log.e("NBase", user) } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.signInWithCredential(activity, Provider.GOOGLE.toString(), providerToken, (user, e) -> { if (e != null) { Log.e("NBase", "signInWithCredential fail: " + e.getMessage()); } else { Log.e("NBase", "signInWithCredential success: " + user.toString()); } return null; }); ``` - **Parameter** 次の表は、認証情報ログインに必要なパラメータを説明します。 | Key | Type | Description | Required | | --- | --- | --- | --- | | activity | Activity | 現在のアクティビティ | O | | providerId | Provider | 連携する Providerタイプ | O | | providerToken | String | ソーシャルアカウントの Access Token | O | - **Callback** 次の表は、認証情報ログインコールバックの値を説明します。 | Key | Type | Description | | --- | --- | --- | | user | User | ログイン成功時のユーザー情報 | | error | Error | ログイン失敗時のエラー情報 | ## 外部アカウント連携機能 GAMEPOTユーザーアカウントに外部ソーシャルアカウントを連携して管理する機能を説明します。 ### 外部アカウント連携機能の使用 現在の GAMEPOTユーザーアカウントと別のソーシャルアカウントを連携するには、以下のコードを使用します。 Kotlin: ``` NBase.createLinking(activity, providerId) { linkingId, e -> if (e != null) { Log.e("NBase", "createLinking Fail") Log.e("NBase", "error.message : " + e.message.toString()) } else { Log.e("NBase", "createLinking") Log.e("NBase", "linkingId : " + linkingId.toString()) // アカウント連携成功後の処理ロジック } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.createLinking(activity, providerId, (linkingId, e) -> { if (e != null) { Log.e("NBase", "createLinking Fail"); Log.e("NBase", "error.message : " + e.getMessage()); } else { Log.e("NBase", "createLinking"); Log.e("NBase", "linkingId : " + linkingId); // アカウント連携成功後の処理ロジック } return null; }); ``` - **Parameter** 次の表は、アカウント連携に必要なパラメータを説明します。 | Key | Type | Description | Required | | --- | --- | --- | --- | | activity | Activity | 現在のアクティビティ | O | | providerId | Provider | 連携対象の Providerタイプ (例: Provider.GOOGLE、Provider.FACEBOOKなど) | O | - **Callback** 次の表は、アカウント連携コールバックの値を説明します。 | Key | Type | Description | | --- | --- | --- | | linkingId | String | 連携成功時に返される連携 ID | ### 連携リストの確認 現在の GAMEPOTユーザーアカウントと連携されたソーシャルアカウントリストを確認するには、以下のコードを使用します。 Kotlin: ``` NBase.getLinkedLists { linkings, e -> if (e != null) { Log.e("NBase", "getLinkedLists Fail") Log.e("NBase", "error.message : " + e.message.toString()) } else { Log.e("NBase", "getLinkedLists") Log.e("NBase", "linkings : " + linkings.toString()) // 連携リスト確認後の処理ロジック } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.getLinkedLists((linkings, e) -> { if (e != null) { Log.e("NBase", "getLinkedLists Fail"); Log.e("NBase", "error.message : " + e.getMessage()); } else { Log.e("NBase", "getLinkedLists"); Log.e("NBase", "linkings : " + linkings.toString()); // 連携リスト確認後の処理ロジック } return null; }); ``` - **Callback** 次の表は、アカウント連携リストの確認時に提供される値を説明します。 | Key | Type | Description | | --- | --- | --- | | linkings | List | 連携されたアカウントリスト | - **Linking** 次の表は、Linkingオブジェクトのフィールドを説明します。 | Key | Type | Description | | --- | --- | --- | | id | String | 連携 ID (アカウント連携解除時に使用) | | username | String | ソーシャル ID | | provider | String | ソーシャル providerタイプ | ### 連携解除 現在の GAMEPOTユーザーアカウントから特定のソーシャルアカウント連携を解除するには、以下のコードを使用します。 Kotlin: ``` NBase.deleteLinking(linkingId) { status, e -> if (e != null) { Log.e("NBase", "deleteLinking Fail") Log.e("NBase", "error.message : " + e.message.toString()) } else { Log.e("NBase", "deleteLinking") Log.e("NBase", "status : " + status.toString()) // 連携解除成功後の処理ロジック } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.deleteLinking(linkingId, (status, e) -> { if (e != null) { Log.e("NBase", "deleteLinking Fail"); Log.e("NBase", "error.message : " + e.getMessage()); } else { Log.e("NBase", "deleteLinking"); Log.e("NBase", "status : " + status.toString()); // 連携解除成功後の処理ロジック } return null; }); ``` - **Parameter** 次の表は、アカウント連携解除に必要なパラメータを説明します。 | Key | Type | Description | Required | | --- | --- | --- | --- | | linkingId | String | 解除対象の連携 ID (createLinkingまたは getLinkedListsから取得) | O | - **Callback** 次の表は、アカウント連携解除コールバックの値を説明します。 | Key | Type | Description | | --- | --- | --- | | status | Boolean | 連携解除は成功したか | ## アプリ状態の確認 現在のクライアントのメンテナンス/アップデート状態を確認するには、以下のコードをご利用ください。 Kotlin: ``` NBase.checkAppStatus(activity) { status, error -> when (status) { is NBaseAppStatus.Maintenance -> { // Maintenance /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, status) { popupStatus, e -> // Popup handling } */ } is NBaseAppStatus.Update -> { // Update /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup NBase.showAppStatusPopup(activity, status) { popupStatus, e -> // Popup handling } */ } null -> { // AppStatus Success or Error if (error != null) { Log.e("NBase", "checkAppStatus error: $error") } else { Log.e("NBase", "checkAppStatus success") } } } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.checkAppStatus(activity, (status, error) -> { if (status instanceof NBaseAppStatus.Maintenance) { // Maintenance /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup nBase.showAppStatusPopup(activity, status, (popupStatus, e) -> { // Popup handling }); */ } else if (status instanceof NBaseAppStatus.Update) { // Update /* case 1: Use in-game popup implemented directly by the developer case 2: Call the code below to use the SDK's own popup nBase.showAppStatusPopup(activity, status, (popupStatus, e) -> { // Popup handling }); */ } else if (status == null) { // AppStatus Success or Error if (error != null) { Log.e("NBase", "checkAppStatus error: " + error.toString()); } else { Log.e("NBase", "checkAppStatus success"); } } return null; }); ``` ## トラブルシューティング よくあるエラーと解決方法をご案内します。 **Q. Androidで`androidx.security.crypto.MasterKeys`クラスが見つからないというエラーが発生します。** A. `MasterKeys`クラスが見つからないために発生したエラーです。次の依存関係を`build.gradle`または`build.gradle.kts`ファイルに追加してください。 Groovy: ``` implementation("androidx.security:security-crypto:1.0.0") ``` **Q. Googleでログインすると`10: Developer console is not set up correctly.`エラーが発生します。** A. Google Cloudコンソールに登録されているウェブアプリケーションの OAuth 2.0 Client IDおよび Client Secretが、GAMEPOTダッシュボードに正しく入力されているかご確認ください。 **Q. Googleでログインすると`16: Cannot find a matching credential.`エラーが発生します。** A. Google Cloudコンソールに登録されている OAuth 2.0 Androidクライアントのパッケージ名と、アプリの SHA-1値が一致しているかご確認ください。