---
title: "Unity SDK"
slug: "game-gamepot3-unity-sdk"
updated: 2026-10-08T10:04:30Z
published: 2026-10-08T10:04:30Z
canonical: "guide.ncloud-docs.com/game-gamepot3-unity-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.
# Unity SDK
Classic/VPC環境で利用できます。
Unity環境向け GAMEPOT Unity SDKの使用方法をご案内します。SDKをインストールして環境を構成することで、ゲームとダッシュボードを連携できます。
## システム要件
Unity用 GAMEPOT SDKを使用するためのシステム要件は、次の通りです。
- Unity最低動作環境: 2022.3.44f1以降
- 旧バージョンの Unityへの対応が必要な場合は、[お問い合わせチャネル](https://www.ncloud.com/support/question)までご連絡ください。
## SDKのインストールと環境の構成
GAMEPOT Unity SDKをインストールしてから環境を構成し、GAMEPOTのダッシュボードとゲームを連携してゲーム開発に必要な機能を使用できます。
GAMEPOT SDKでサポートしている言語は次の通りです。
- 韓国語、英語、イタリア語、タイ語、ベトナム語、日本語、中国語(簡体字/繁体字)、インドネシア語、ドイツ語、スペイン語、フランス語
GAMEPOT初期化時に登録した言語で自動表示されます。未対応の言語の場合は英語で表示されます。
### SDKのインストール
次の手順に従って GAMEPOT Unity SDKをインストールし、Unityプロジェクトを構成します。
1. [Unity公式提供の GitHub](https://github.com/nbase-io/NBaseSDK-Unity)から最新バージョンを[ダウンロード](https://github.com/nbase-io/NBaseSDK-Unity/releases)します。
2. Unityで **Assets** > **Import Package** > **Custom Package...** メニューを順にクリックし、`nbasesdk-unity-plugin-[version].unitypackage`ファイルを取り込みます。
- GAMEPOT 3.0からは Mavenと CocoaPodsを通じてデプロイされ、デバイス別に簡単な設定で外部ライブラリと統合できます。
参考
iOSビルドの場合、正常に動作するには、[CocoaPods](https://cocoapods.org)をインストールする必要があります。
[External Dependency Manager for Unity](https://github.com/googlesamples/unity-jar-resolver)を含めてインストールされ、簡単に Android、iOSパッケージをインストールできます。
NBase SDK Unity 3.0.18以降では、**Tools** > **GamePotSDK** > **Dependency Manager**メニューから、Androidおよび iOSで使用するモジュールを選択できます。**Apply Dependencies**をクリックすると`Assets/NBaseSDK/Editor/NBaseSDKDependencies.xml`が更新され、Androidの依存関係の解決が実行されます。バージョンを直接指定する必要がある場合にのみ、**Advanced Mode**を使用してください。
#### Android Gradleの設定
Androidビルドに必要な Gradleの設定手順を、順に実行してください。
1. Player Settingsの Publishing Settingsにて、Custom Main Gradle Templateと Custom Gradle Properties Templateを選択します。

2. Minimum API Levelを24にアップグレードします。

3. **Assets** > **External Dependency Manager** > **Android Resolver** > **Settings**メニューを順にクリックし、Enable Auto-Resolutionと Explode AARs項目からチェックを外します。

4. **Tools** > **GamePotSDK** > **Dependency Manager**を開いて使用する Androidモジュールを選択し、**Apply Dependencies**をクリックします。
Dependency Managerで提供されていないモジュールを追加する場合は、`Assets/NBaseSDK/Editor/NBaseSDKDependencies.xml`を直接編集できます。以下は、NBase SDKの使用に基本的に必要な依存パッケージを定義した例です。
**Dependency modulesとは** 外部 SDKを使用するためのモジュールです。Googleログインの場合、io.nbase:nbase-adapter-provider-googleのようにアダプターとして提供されるモジュールを一緒にインストールする必要があります。
XML例:
```
```
- Googleログインと Google Play Store決済を使用する場合
XML例:
```
```
対応可能な 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 |
メール、ゲストログインの場合は基本モジュールに適用されています。
Dependency Managerが Android依存関係の解析を自動的に実行できない場合は、Unityエディタで **Assets** > **External Dependency Manager** > **Android Resolver** > **Force Resolve**をクリックしてください。
Dependencies.xmlを構成した後に Force Resolveを実行すると mainTemplate.gradleファイルで定義した内容が implementationとして自動適用されます。この設定が完了しない場合、ビルド時に必要な関連ライブラリーはダウンロードできません。
#### iOSの設定
**Tools** > **GamePotSDK** > **Dependency Manager**を開いて使用する iOSモジュールを選択し、**Apply Dependencies**をクリックします。
Dependency Managerで提供されていない Podを追加する場合は、`Assets/NBaseSDK/Editor/NBaseSDKDependencies.xml`の`iosPods`セクションを直接編集できます。
XML例:
```
...
```
Firebaseのように必要なフレームワークをインストールしたい場合にも、以下のように別途追加します。
XML例:
```
...
...
```
CocoaPodsがインストールされていない場合は、 Unityエディタにて、**Assets** > **External Dependency Manager** > **iOS Resolver** > **Install Cocoapods**をクリックします。
注意
Unityプロジェクトを iOS用にビルドすると **Unity-iPhone.xcworkspace** ファイルが作成されます。このファイルを開いてください。 **Unity-iPhone.xcodeproj**の代わりに **Unity-iPhone.xcworkspace** ファイルを開かないと CocoaPodsの依存関係は使用されません。 Unity 2021からは自動的にそのプロジェクトが選択されます。
サポートされている iOS依存モジュールは次の通りです。
| Name | Description | Dependency modules |
| --- | --- | --- |
| NBase | GAMEPOT基本モジュール | X |
| NBaseAdapterProviderGoogle | Googleログイン | X |
| NBaseAdapterProviderFacebook | Facebookログイン | FBSDKLoginKit (17.4.0) |
| NBaseAdapterProviderGameCenter | ゲームセンターログイン | X |
| NBaseAdapterProviderNaver | NAVERログイン | X |
| NBaseAdapterProviderLine | LINEログイン | X |
| NBaseAdapterProviderKakao | Kakaoログイン | X |
| NBaseAdapterProviderX | Xログイン | X |
注意
一部の依存フレームワークは Swift Package Managerを通じてのみ追加できます。
以下は、Swift Package Managerで追加が必要な、必須の依存フレームワークを手動で追加する方法です。
1. Xcodeでプロジェクト設定に移動し、Package Dependencies設定に進みます。 
2. 右上の URL入力欄に`https://github.com/apollographql/apollo-ios.git`を追加して検索し、apollo-iosを選択した後、Add Packageで追加します。
3. 表示されるモーダル内の Apolloと ApolloAPIモジュールをプロジェクトのメインターゲット(Unity-iPhone)に追加します。 
以下の表は、Swift Package Managerで追加する依存モジュールを説明します。
| Name | Dependency modules | Location | Version | Framework |
| --- | --- | --- | --- | --- |
| NBase | Apollo | https://github.com/apollographql/apollo-ios.git | 1.15.2 | Apollo, ApolloAPI |
### 事前準備
GAMEPOT Unity 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** にてアイテムを登録します。
### リセット
リセットを実行するには、ゲームを始める際にロードされる最初の画面に使用されるインスタンスに、以下のコードを追加します。
C# 例:
```
using UnityEngine;
using NBaseSDK;
public class GamePotExample : MonoBehaviour
{
void Start()
{
NBaseSDK.NBase.initialize(projectId, projectKey, [storeId], [language], [region], (init, error) => {
if (error != null)
{
Debug.Log(error.Message);
return;
}
Debug.Log(init.ToString());
});
}
}
```
- **Parameters**
次の表は、初期化に必要なパラメータを説明します。
| Key | Type | Description | Required |
| --- | --- | --- | --- |
| projectId | String | ダッシュボード → プロジェクトの設定で確認したプロジェクト ID | O |
| projectKey | String | ダッシュボード → プロジェクトの設定で確認したプロジェクトキー | O |
| storeId | String | 以下の表のストア識別子 | O |
| language | String | 言語コード(en、ko、jaなど) | O |
| region | String | リージョンコード(kr、jp、sg、us、eu) | O |
ストア識別子は、次の表をご参照ください。
| Key | Description |
| --- | --- |
| Store.google.ToString() | Google Play Store |
| Store.one.ToString() | ONE Store |
| Store.galaxy.ToString() | Galaxy Store |
| Store.amazon.ToString() | Amazon Store |
| Store.huawei.ToString() | Huawei Store |
| Store.pc.ToString() | PCストア |
| Store.steam.ToString() | Steamストア |
- **Callback**
次の表は、初期化コールバックに渡される情報を説明します。
| Key | Type | Description |
| --- | --- | --- |
| Status | bool | 状態 |
| Language | string | 言語 |
| Country | string | 国 |
| RemoteIp | string | IP |
| Platform | string | プラットフォーム |
| Sandbox | bool | サンドボックスかどうか |
#### 初期化 (イベントの受信)
はじめに NBaseイベントを受信するスクリプトを作成します。 このスクリプトは NBaseListenerと呼ばれ、シーンのどんなオブジェクトにも配置できます。このオブジェクトが永続的に存在するように DontDestroyOnLoadメソッドを呼び出すことをお勧めします。
下図は、シーンに NBaseListenerスクリプトを構成する例を示しています。 
C# 例:
```
using UnityEngine;
using NBaseSDK;
public class NBaseListener: MonoBehaviour, NBaseEventListener
{
void Start()
{
DontDestroyOnLoad(this.gameObject);
NBaseSDK.NBase.SetEventListener(this);
}
}
```
## ログイン機能
ログイン機能を利用し、さまざまな認証方法でユーザーを認証する方法について説明します。
### ログイン機能の使用
開発会社で実装したログイン UIにより、ログインボタンをクリックしたときに動作する SDKログイン機能を使用するには、以下のコードを使用します。これが正常に動作するには、ログインに必要なコンソールとダッシュボードの設定がすべて完了している必要があります。
C# 例:
```
NBaseSDK.NBase.signIn(Provider.google.ToString(), (user, error) => {
if (error != null)
{
if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_WITHDRAW) // Withdrawal status
{
// Withdrawal
Debug.Log(error.Message.ToString()); // Withdrawal message
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.SERVICE_MAINTENANCE) // Maintenance
{
Debug.Log(error.Message.ToString()); // 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
// NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// // Popup handling
// });
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.UPDATE_REQUIRED) // Update
{
Debug.Log(error.Message.ToString()); // 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
// NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// // Popup handling
// });
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_BANNED) // Access blocked
{
Debug.Log(error.Message.ToString()); // Block message
}
else
{
// signIn Failed
Debug.Log(error.Message.ToString());
}
}
else
{
// signIn Success
Debug.Log(user.ToString());
}
return;
});
```
アップデートまたはメンテナンス時に SDKが提供する独自のポップアップを使用する場合、以下のコードを追加します。
C# 例:
```
NBaseSDK.NBase.showAppStatusPopup(appStatus, (status, error) =>
{
bool shouldClose = false;
bool shouldNext = false;
var closeValue = status.Close;
var nextValue = status.Next;
if (closeValue != null)
{
if (bool.TryParse(closeValue.ToString(), out bool result))
{
shouldClose = result;
}
}
if (shouldClose)
{
// App Close
}
if (nextValue != null)
{
if (bool.TryParse(nextValue.ToString(), out bool result))
{
shouldNext = result;
}
}
if (shouldNext)
{
// Next, Optional update
}
});
```
- **Provider**
次の表は、ログイン機能で使用するサービスタイプを説明します。
| Key | Description |
| --- | --- |
| Provider.google.ToString() | Google |
| Provider.anonymous.ToString() | ゲスト |
| Provider.facebook.ToString() | Facebook |
| Provider.apple.ToString() | Apple |
| Provider.kakao.ToString() | Kakao |
| Provider.googleplay.ToString() | Play Games |
| Provider.steam.ToString() | Steam |
| Provider.x.ToString() | X |
| Provider.line.ToString() | LINE |
| Provider.naver.ToString() | NAVER |
| Provider.github.ToString() | GitHub |
| Provider.microsoft.ToString() | Microsoft |
| Provider.huawei.ToString() | 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を呼び出すには、以下のコードを使用します。
C# 例:
```
NBaseSDK.NBase.openSignInUI((user, error) => {
if (error != null)
{
if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_WITHDRAW) // Withdrawal status
{
// Withdrawal
Debug.Log(error.Message.ToString()); // Withdrawal message
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.SERVICE_MAINTENANCE) // Maintenance
{
Debug.Log(error.Message.ToString()); // 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
// NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// // Popup handling
// });
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.UPDATE_REQUIRED) // Update
{
Debug.Log(error.Message.ToString()); // 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
// NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// // Popup handling
// });
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_BANNED) // Access blocked
{
Debug.Log(error.Message.ToString()); // Block message
}
else
{
// signIn Failed
Debug.Log(error.Message.ToString());
}
}
else
{
// signIn Success
Debug.Log(user.ToString());
}
return;
});
```
### 自動ログイン(オプション)
初期化の後、最後にログインした認証手段で自動ログインを試行することができます。自動ログインを試行する前に、最終ログイン Providerタイプの確認をお勧めします。
C# 例:
```
// 最終ログイン Providerタイプを確認
string lastProviderType = NBaseSDK.NBase.getLastProviderType();
if (lastProviderType != Provider.none.ToString())
{
// 最終ログイン情報がある場合にのみ自動ログインを試行
NBaseSDK.NBase.signInLastLoggedIn((user, error) => {
if (error != null)
{
if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_WITHDRAW) // Withdrawal status
{
// Withdrawal
Debug.Log(error.Message.ToString()); // Withdrawal message
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.SERVICE_MAINTENANCE) // Maintenance
{
// Maintenance
Debug.Log(error.Message.ToString()); // 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
NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// Popup handling
});
*/
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.UPDATE_REQUIRED) // Update
{
// Update
Debug.Log(error.Message.ToString()); // 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
NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// Popup handling
});
*/
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.MEMBER_BANNED) // Access blocked
{
// Access blocked
Debug.Log(error.Message.ToString()); // Block message
}
else
{
// signIn Failed
Debug.Log(error.Message.ToString());
}
}
else
{
// signIn Success
Debug.Log(user.ToString());
}
});
}
else
{
// 最終ログイン情報なし
Debug.Log("No last login provider found");
}
```
**getLastProviderType()** メソッドは、最後にログインした Providerタイプを返します。
**signInLastLoggedIn()** メソッドは、最後にログインした認証手段で自動ログインを試みます。
- **Callback**
次の表は、自動ログインコールバックに渡される値を説明します。
| Key | Type | Description |
| --- | --- | --- |
| user | User | ログイン成功時のユーザー情報 |
| error | Error | ログイン失敗時のエラー情報 |
### ログアウト
GAMEPOTユーザーアカウントからログアウトするには、以下のコードを使用してください。
C# 例:
```
NBaseSDK.NBase.signOut((status, error) => {
if (error != null)
{
// signOut Failed
Debug.Log("signOut Failed: " + error.Message.ToString());
}
else
{
// signOut Success
Debug.Log("signOut Success: " + status.ToString());
// ログアウト成功後の処理ロジック
}
});
```
- **Callback**
次の表は、ログアウトコールバックに渡される値を説明します。
| Key | Type | Description |
| --- | --- | --- |
| status | Boolean | 成功したかどうか |
| error | Error | ログアウト失敗時のエラー情報 |
### 退会
SDK退会機能を使用するには、以下のコードを使用します。
C# 例:
```
NBaseSDK.NBase.deleteMember(providerId, (status, error) => {
if (error != null)
{
// deleteMember Failed
Debug.Log("deleteMember Failed: " + error.Message.ToString());
}
else
{
// deleteMember Success
Debug.Log("deleteMember Success: " + status.ToString());
// 退会成功後の処理ロジック
}
});
```
- **Parameters**
次の表は、退会時に渡すべきパラメータを説明します。
| Key | Type | Description | Required |
| --- | --- | --- | --- |
| providerId | String | ログインした Providerタイプ (例: Provider.google.ToString()、Provider.anonymous.ToString()など) | O |
- **Callback**
次の表は、退会コールバックの値を説明します。
| Key | Type | Description |
| --- | --- | --- |
| status | Boolean | 成功したかどうか |
| error | Error | 退会失敗時のエラー情報 |
### 独自の IDパスワード認証 (オプション)
ユーザーがメールアドレスとパスワードを使用してログインできるようにする認証メソッドです。ユーザーのメールアドレスとパスワードに基づいてユーザー認証を行います。
C# 例:
```
NBaseSDK.NBase.signInWithPassword(username, password, (user, error) => {
if (error != null)
{
Debug.Log(error.Message.ToString());
return;
}
});
```
### 認証情報でログイン (オプション)
外部から取得したソーシャルアカウントの認証情報(Access Token)を使用してログインするには、以下のコードを使用します。
C# 例:
```
NBaseSDK.NBase.signInWithCredential(Provider.google.ToString(), providerToken, (user, error) => {
if (error != null)
{
if (error.Code == NBaseSDK.NBase.ErrorCode.SERVICE_MAINTENANCE) // Maintenance
{
// Maintenance
Debug.Log("Maintenance: " + error.Message.ToString());
/* case 1: Use in-game popup implemented directly by the developer
case 2: Call the code below to use the SDK's own popup
NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// Popup handling
});
*/
}
else if (error.Code == NBaseSDK.NBase.ErrorCode.UPDATE_REQUIRED) // Update
{
// Update
Debug.Log("Update: " + error.Message.ToString());
/* case 1: Use in-game popup implemented directly by the developer
case 2: Call the code below to use the SDK's own popup
NBaseSDK.NBase.showAppStatusPopup(user?.AppStatus, (status, error) => {
// Popup handling
});
*/
}
else
{
// signInWithCredential Failed
Debug.Log("signInWithCredential Failed: " + error.Message.ToString());
}
}
else
{
// signInWithCredential Success
Debug.Log("signInWithCredential Success: " + user.ToString());
}
});
```
- **Parameter**
次の表は、認証情報ログインに必要なパラメータを説明します。
| Key | Type | Description | Required |
| --- | --- | --- | --- |
| provider | String | Provider ID (例: Provider.google.ToString()、Provider.facebook.ToString()など) | O |
| providerToken | String | ソーシャルアカウントの Access Token | O |
- **Callback**
次の表は、認証情報ログインコールバックの値を説明します。
| Key | Type | Description |
| --- | --- | --- |
| user | User | ログイン成功時のユーザー情報 |
| error | Error | ログイン失敗時のエラー情報 |
## 外部アカウント連携機能
GAMEPOTユーザーアカウントに外部ソーシャルアカウントを連携して管理する機能を説明します。
参考
Unity Standaloneの外部アカウント連携機能は、NBase SDK Unity 3.0.18以降で使用できます。
- 対応するプラットフォーム: Windows、macOS、Linux Standalone
- 対応する Provider: Steam
- 対応する API: `createLinking`、`getLinkedLists`、`deleteLinking`
- 対応していない API: `updateLinking`
Standaloneで`createLinking`を呼び出すには、Steamworks.NETがインストールされており、`STEAMWORKS_NET`スクリプティング定義シンボルが有効化されている必要があります。ゲーム側で Steam APIを初期化し、`SteamAPI.RunCallbacks()`も継続して呼び出す必要があります。NBase SDKは Steam APIの直接的な初期化や終了処理を行いません。
### 外部アカウント連携機能の使用
現在の GAMEPOTユーザーアカウントと別のソーシャルアカウントを連携するには、以下のコードを使用します。
C# 例:
```
NBaseSDK.NBase.createLinking(Provider.google.ToString(), (linkingId, error) => {
if (error != null)
{
// createLinking Failed
Debug.Log("createLinking Failed: " + error.Message.ToString());
}
else
{
// createLinking Success
Debug.Log("createLinking Success: " + linkingId);
// アカウント連携成功後の処理ロジック
}
});
```
- **Parameter**
次の表は、アカウント連携に必要なパラメータを説明します。
| Key | Type | Description | Required |
| --- | --- | --- | --- |
| providerId | String | 連携対象の Providerタイプ (例: Provider.google.ToString()、Provider.facebook.ToString()など) | O |
- **Callback**
次の表は、アカウント連携コールバックの値を説明します。
| Key | Type | Description |
| --- | --- | --- |
| linkingId | String | 連携成功時に返される連携 ID |
| error | Error | 連携失敗時のエラー情報 |
### Unity Standaloneで Steamアカウント連携
ログインしている GAMEPOTユーザーアカウントに現在の Steamクライアントのアカウントを連携するには、以下の手順で設定および呼び出しを行ってください。
1. Steamworks.NETを Unityプロジェクトにインストールします。
2. Steamworks App IDと Web API Keyを GAMEPOTダッシュボードの Steam連携設定に登録します。
3. ローカルテスト時、`steam_appid.txt`に Steamworks App IDを入力します。ビルドした実行ファイルを Steam外部から直接実行する場合は、このファイルを実行ファイルと同じフォルダに配置します。リリースビルドにはテスト用の`steam_appid.txt`を含めないでください。
4. Steamクライアントにログインした状態で Steam APIを初期化します。
5. GAMEPOTログインを完了し、`Provider.steam`で`createLinking`を呼び出します。
C# 例:
```
NBaseSDK.NBase.createLinking(Provider.steam.ToString(), (linkingId, error) => {
if (error != null)
{
Debug.LogError($"Steam account linking failed: {error.Code} / {error.Message}");
return;
}
Debug.Log($"Steam account linking succeeded: {linkingId}");
});
```
Standaloneの`createLinking`は現在 SteamProviderのみをサポートしています。Google、Appleなどの Providerを渡すと、エラーのコールバックが返されます。Steamworks.NETがインストールされていない場合、Steam APIが初期化されていない場合、Steamクライアントにログインしていない場合または認証チケットの発行に失敗した場合も、成功として処理されず、`error`として返されます。
連携が成功した後は、返された`linkingId`を保存しておくか、`getLinkedLists`で再度照会することができます。連携解除の際は Provider文字列ではなく、この連携 IDを渡します。
### 連携リストの確認
現在の GAMEPOTユーザーアカウントと連携されたソーシャルアカウントリストを確認するには、以下のコードを使用します。Unity Standaloneでも同じ APIを使用します。
C# 例:
```
NBaseSDK.NBase.getLinkedLists((linkings, error) => {
if (error != null)
{
// getLinkedLists Failed
Debug.Log("getLinkedLists Failed: " + error.Message.ToString());
}
else
{
// getLinkedLists Success
if (linkings == null || linkings.Count == 0)
{
Debug.Log("No linked accounts");
return;
}
foreach (NBaseSDK.NBase.Linking linking in linkings)
{
Debug.Log($"getLinkedLists Success: {linking.Provider} / {linking.Id}");
}
}
});
```
- **Callback**
次の表は、アカウント連携リストの確認時に提供される値を説明します。
| Key | Type | Description |
| --- | --- | --- |
| linkings | List | 連携されたアカウントリスト |
| error | Error | リスト照会失敗時ののエラー情報 |
- **Linking**
次の表は、Linkingオブジェクトのフィールドを説明します。
| Key | Type | Description |
| --- | --- | --- |
| Id | String | 連携 ID (アカウント連携解除時に使用) |
| Username | String | ソーシャル ID |
| Provider | String | ソーシャル Providerタイプ |
### 連携解除
現在の GAMEPOTユーザーアカウントから特定のソーシャルアカウント連携を解除するには、以下のコードを使用します。Unity Standaloneでも同様の APIを使用し、`getLinkedLists`で確認した`Linking.Id`を渡します。
C# 例:
```
NBaseSDK.NBase.deleteLinking(linkingId, (status, error) => {
if (error != null)
{
// deleteLinking Failed
Debug.Log("deleteLinking Failed: " + error.Message.ToString());
}
else if (status)
{
// deleteLinking Success
Debug.Log("deleteLinking Success: " + status.ToString());
// 連携解除成功後の処理ロジック
}
else
{
Debug.LogWarning("deleteLinking returned false");
}
});
```
- **Parameter**
次の表は、アカウント連携解除に必要なパラメータを説明します。
| Key | Type | Description | Required |
| --- | --- | --- | --- |
| linkingId | String | 解除対象の連携 ID (createLinkingまたは getLinkedListsから取得) | O |
- **Callback**
次の表は、アカウント連携解除コールバックの値を説明します。
| Key | Type | Description |
| --- | --- | --- |
| status | Boolean | 成功したかどうか |
| error | Error | 連携解除失敗時のエラー情報 |
## アプリ状態の確認
現在のクライアントのメンテナンス/アップデート状態を確認するには、以下のコードをご利用ください。
C# 例:
```
NBaseSDK.NBase.checkAppStatus((status, error) =>
{
if (error != null)
{
Debug.LogError("checkAppStatus Failed: " + error.Message);
return;
}
switch(status.State)
{
case NBaseSDK.NBase.AppStatus.Status.SUCCESS:
// SUCCESS
break;
case NBaseSDK.NBase.AppStatus.Status.FAILED:
// FAILED
break;
case NBaseSDK.NBase.AppStatus.Status.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
NBaseSDK.NBase.showAppStatusPopup(status, (popupStatus, popupError) => {
// Popup handling
});
*/
break;
case NBaseSDK.NBase.AppStatus.Status.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
NBaseSDK.NBase.showAppStatusPopup(status, (popupStatus, popupError) => {
// Popup handling
});
*/
break;
}
});
```
## Unity Standaloneのご案内
Standaloneは Mac、Windows、Linux用ビルドを表します。 GAMEPOT SDKはクロスプラットフォームをサポートしますが、モバイルと Standaloneでサポートされる機能が異なります。下記表を参照して開発計画を立ててください。
| Service | Android | iOS | Web | PC | 備考 |
| --- | --- | --- | --- | --- | --- |
| ログイン | O | O | O | PCログイン後、トークンを検証 | |
| 決済 | O | O | O | PC決済ページに移動 | |
| お知らせ | O | O | O | O | UIを除くリスト照会を提供 |
| カスタマーサポート | O | O | O | O | PCに移動 |
| リーダーボード | O | O | O | O | |
| 友達管理 | O | O | O | O | |
| プッシュ | O | O | X | X | |
| メンテナンス | O | O | O | O | |
| アップデート | O | O | O | O | |
| クーポン | O | O | O | O | |
| チャット | O | O | O | O | |
| データ保存場所 | O | O | O | O | |
| セキュリティ | O | O | X | 準備中 | |
| プレイヤー | O | O | O | O | |
| 外部アカウントとの連携 | O | O | X | O | PCは Steamのみ対応 (NBase SDK Unity 3.0.18以降) |
参考
Webバージョンは GamePot 3.0 Typescriptバージョンにのみ提供される機能です。
### Newtonsoft.Jsonクラッシュ
NBase Unity SDKは、APIリクエストのパースに Unityの Newtonsoft JSONパッケージを使用します。JSONは最も一般的に使用されるライブラリの1つであるため、プロジェクトに既に JSONが存在して次のようなライブラリ重複エラーが発生する可能性があります。
この場合、`Plugins/Standalone`パスにある`Newtonsoft.Json`ファイルを削除するか、プロジェクトに既にある JSONライブラリを削除して Unityの JSONを使用します。Unityの JSONパッケージは Unityエンジンと一緒に動作するように修正され、IL2CPPを完璧にサポートするバージョンです。
## トラブルシューティング
よくあるエラーと解決方法をご案内します。
**Q. UnityPlayerActivity.java uses or overrides a deprecated API.** A. Edit > Project Settings > Player > Publishing settings > Custom Properties Gradle Templateにチェックを入れてください。
**Q. error:1E08010C:DECODER routines::unsupported** A. Google Authentication Keyが一致しない場合に発生する現象で、[Google Play Store](/docs/ja/game-gamepot3-google-play-store)ガイドを参照してキーを正確に入力してください。
**Q. minimum API Levelアップグレードのご案内** A. 基本 API Levelを22から24にアップグレードしてください。 下図は API Levelを調整する場所を示しています。 
**Q. Authorization failed: Error Domain=AKAuthenticationError Code=-7026** A. TARGETS > +Capabilityをクリックして Sign in with Appleを追加してください。 下図は、Sign in with Apple機能を追加する画面を示しています。 
**Q. Couldn't get credential from result.10: Developer console is not set up correctly** A. このエラーは、Google Cloud Console > ユーザー認証情報 > OAuth 2.0クライアント IDでウェブアプリケーションタイプのクライアント IDが設定されていないため発生する可能性があります。
**Q. 16: Cannot find a matching credential.** A. この場合は、Google Cloud Console > ユーザー認証情報 > OAuth 2.0クライアント IDが登録されていないため発生する可能性があるエラーです。
**Q. java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/billingclient/api/BillingClient;** A. 以下のコードを追加してください。
XML例:
```
```
**Q. (iOS) アプリを実行するとクラッシュが発生し、「/AdapterProviderFacebook' (no such file)」エラーが確認される** A. Xcode TARGETS → General → Frameworks, Libraries, and Embedded Content → AdapterProviderFacebook.xcframeworkを追加してください。
**Q. (iOS) 実行すると「/usr/lib/swift/NBase.framework/NBase' (no such file, not in dyld cache)」エラーが発生** A. 以下のように NBase.xcframeworkを追加してください。 下図は、NBase.xcframeworkをプロジェクトに追加する手順を示しています。


**Q. (iOS) iOS 18環境で「NSBundle file:///System/Library/Frameworks/Metal.framework/ principal class is nil because all fallbacks have failed」エラーが発生**
A. Edit Schemeウィンドウ(ショートカット: CMD + SHIFT + ,)を開き、Metal項目の **API Validation**からチェックを外してください。 下図は、Metal API Validationオプションを無効化する場所を示しています。
