Android SDK

Prev Next

Classic/VPC環境で利用できます。

Androidでゲームを開発するための GAMEPOT Android SDKの使用方法について説明します。SDKをインストールして環境を構成することで、ゲームとダッシュボードを連携できます。

システム要件

Android用 GAMEPOT SDKを使用するためのシステム要件は、次の通りです。

  • 最低スペック: Android Level 24以降
    (以前のバージョンの Androidへの対応が必要な場合は、お問い合わせチャネルにてご確認ください。)

SDKのインストールと環境の構成

Android SDKをインストールしてから環境を構成し、GAMEPOTのダッシュボードとゲームを連携してゲーム開発に必要な機能を使用できます。

GAMEPOT SDKでサポートしている言語は次の通りです。

  • 韓国語、英語、イタリア語、タイ語、ベトナム語、日本語、中国語(簡体字/繁体字)、インドネシア語、ドイツ語、スペイン語、フランス語

アプリ実行時にデバイスの言語によって SDK内サポート言語で表記され、サポートされていない言語は英語で表記されます。

SDKのインストール

GAMEPOT Android SDKをインストールしてプロジェクトを設定する方法は次の通りです。

  1. 管理者アカウントでダッシュボードにログインします。
  2. bundle.gradleまたは bundle.gradle.ktsファイルに Nbase SDKを追加します。
  3. GAMEPOT 3.0からは Gradleの設定で簡単に外部ライブラリと統合できるようになりました。

Kotlin Gradleの設定

  1. プロジェクトの settings.gradle.ktsファイルに以下の定義を追加します。
dependencyResolutionManagement {
    repositories {
        ...
        google()
        // nbase repo
        maven(url = "https://repo.nbase.io/repository/nbase-releases")
    }
}
  1. プロジェクト(Module: app)の build.gradle.ktsファイルに SDK依存関係を追加します。
dependencies {
...
    implementation("io.nbase:nbasesdk:latest.release")
}

例) Googleログインと Google Play Store決済を使用する場合

 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の設定

  1. プロジェクト(Module: project)の build.gradleファイルに定義を追加します。
allprojects {
    repositories {
        ...
        google()
        // nbase repo
        maven { url "https://repo.nbase.io/repository/nbase-releases" }
    }
}
  1. プロジェクト(Module: app)の build.gradleファイルに SDK依存関係を追加します。
dependencies {
...
    implementation("io.nbase:nbasesdk:latest.release")
}

例) Googleログインと Google Play Store決済を使用する場合

 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")
}

ライブラリリスト

Name Version Description Dependeny modules
io.nbase:nbasesdk 3.0.87 GAMEPOT基本モジュール X
io.nbase:nbase-adapter-provider-google 3.0.10 Googleログイン X
io.nbase:nbase-adapter-provider-apple 3.0.6 Appleログイン X
io.nbase:nbase-adapter-provider-facebook 3.0.4 Facebookログイン com.facebook.android:facebook-login:latest.release
io.nbase:nbase-adapter-provider-kakao 3.0.2 Kakaoログイン X
io.nbase:nbase-adapter-provider-line 3.0.2 LINEログイン X
io.nbase:nbase-adapter-provider-naver 3.0.1 NAVERログイン X
io.nbase:nbase-adapter-provider-huawei 3.0.1 Huaweiログイン X
io.nbase:nbase-adapter-provider-playgame 3.0.3 Google Play Gamesログイン X
io.nbase:nbase-adapter-provider-x 3.0.1 Xログイン X
io.nbase:nbase-adapter-billing-googleplay 3.0.6 Google Play Store com.android.billingclient:billing-ktx:6.1.0
io.nbase:nbase-adapter-billing-onestore 3.0.2 ONE Store X
io.nbase:nbase-adapter-billing-galaxy 3.0.3 Galaxy Store X
io.nbase:nbase-adapter-billing-huawei 3.0.1 Huawei Store X

ゲストログインの場合は基本モジュールに適用されています。

事前準備

  1. プロジェクト IDとプロジェクトキーはダッシュボード > プロジェクトの設定でコピーします。
  2. ログイン、ストア、連携の環境設定はダッシュボード > プロジェクトの設定で行います。
  3. ログイン別にログイン手段別環境設定を参照し、コンソールに設定してダッシュボードに追加します。
  4. In-App決済時はストア別環境設定を参照し、コンソールに設定してダッシュボードに追加します。
  5. In-App決済のために、ストアごとにアイテムを登録します。 ダッシュボード > 決済 > In-App で追加します。

リセット

リセットを実行するには、ゲームを始める際にロードされる最初の画面に使用されるインスタンスに、以下のコードを追加します。

Kotlin:

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)
    } else {
        Log.e("NBase", init)
    }
}

Java:

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.e("NBase", "initialize success: " + init.toString());
    }
    return null;
});
  • Parameter
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 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 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
    }
}
  • Parameter
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
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
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タイプを返します。

Return Type Description
Provider 最終ログインの Providerタイプ
  • signInLastLoggedIn() Parameter
Key Type Description Required
activity Activity 現在のアクティビティ O

ログアウト

SDKログアウト機能を使用するには、以下のコードをお使いください。

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
Key Type Description Required
activity Activity 現在のアクティビティ O
  • Callback
Key Type Description
status Boolean 成功したかどうか

退会

会員退会機能を使用するには、以下のコードを使用します。

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;
});
  • Parameter
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;
});

認証情報でログイン(オプション)

さまざまな認証方法(メールやパスワード、ソーシャルメディアアカウント、電話番号など)で取得した認証情報(credentials)でユーザーログインを処理するのに使用されます。さまざまな認証方式を簡単に実装できるようにサポートし、GAMEPOTにログインできるようにします。

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;
});

外部アカウント連携機能

外部アカウント連携機能を使用する

現在の 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
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で以下のようなエラーが発生します。

Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.security.crypto.MasterKeys" on path: DexPathList[[zip file "/data/app/~~KKBtt9efgPjpqDSP6o3P1g==/com.nbase.je_beta-6fz3RrA1gqu27fSFW0ehcQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~KKBtt9efgPjpqDSP6o3P1g==/com.nbase.je_beta-6fz3RrA1gqu27fSFW0ehcQ==/lib/arm64, /system/lib64, /system/system_ext/lib64]]

A. MasterKeysクラスが見つからず発生したエラーです。以下のコードを build.gradleまたは build.gradle.ktファイルに入力してください。

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コンソール上で Androidタイプの OAuth 2.0 Client IDで登録されているパッケージとアプリの SHA-1が異なる場合にも発生します。