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をインストールしてプロジェクトを設定する方法は次の通りです。
- 管理者アカウントでダッシュボードにログインします。
- bundle.gradleまたは bundle.gradle.ktsファイルに Nbase SDKを追加します。
- GAMEPOT 3.0からは Gradleの設定で簡単に外部ライブラリと統合できるようになりました。
Kotlin Gradleの設定
- プロジェクトの settings.gradle.ktsファイルに以下の定義を追加します。
dependencyResolutionManagement {
repositories {
...
google()
// nbase repo
maven(url = "https://repo.nbase.io/repository/nbase-releases")
}
}
- プロジェクト(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の設定
- プロジェクト(Module: project)の build.gradleファイルに定義を追加します。
allprojects {
repositories {
...
google()
// nbase repo
maven { url "https://repo.nbase.io/repository/nbase-releases" }
}
}
- プロジェクト(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 |
ゲストログインの場合は基本モジュールに適用されています。
事前準備
- プロジェクト IDとプロジェクトキーはダッシュボード > プロジェクトの設定でコピーします。
- ログイン、ストア、連携の環境設定はダッシュボード > プロジェクトの設定で行います。
- ログイン別にログイン手段別環境設定を参照し、コンソールに設定してダッシュボードに追加します。
- In-App決済時はストア別環境設定を参照し、コンソールに設定してダッシュボードに追加します。
- 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 | |
| Provider.ANONYMOUS | ゲスト |
| Provider.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 | 氏名 (提供してくれる場合) |
| 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が異なる場合にも発生します。