--- title: "決済" slug: "game-gamepot3-purchase" updated: 2026-10-08T10:04:27Z published: 2026-10-08T10:04:27Z canonical: "guide.ncloud-docs.com/game-gamepot3-purchase" --- > ## 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. # 決済 Classic/VPC環境で利用できます。 ## 決済 GAMEPOT SDKが提供する In-App決済機能を使用して、ゲーム内アイテムを販売することができます。決済の前に、[ストア別環境設定](/docs/ja/game-gamepot3-google-play-store)にそのストアに合わせて設定する必要があります。さらに、**ダッシュボード** > **決済** > **In-App** にアイテムが追加されていない場合、「ProductID not found」というエラーが発生します。 ### Android Androidで商品情報を照会したり、決済をリクエストしたり、未処理決済を復元する方法をご案内します。 #### (AOS) In-App情報の取得 決済の際は、画面に決済情報と現地の通貨情報を表示する必要があります。以下の関数を使用すると現在の決済通貨や名前などを取得できます。正しく取得できない場合は、コンソールの設定を確認してください。 Kotlin: ``` import com.nbase.sdk.Store NBase.getProductItems() {products, e -> if (e != null) { Log.e("NBase", e.message) } else { // In-Appアイテム情報 Log.e("NBase", products) } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.getProductItems((products, e) -> { if (e != null) { Log.e("NBase", "getProductItems fail: " + e.getMessage()); } else { if (products != null) { Log.e("NBase", "getProductItems success: " + products.toString()); } } return null; }); ``` 次の表は、商品情報の照会コールバックで渡される値について説明します。 - **Callback** | Key | Type | Description | | --- | --- | --- | | id | String | productId | | productName | String | 製品名 | | title | String | 製品のタイトル | | price | Float | 製品の価格 | | localizedPrice | Float | 現地化された価格 | | productId | String | 製品の固有 ID | | productType | String | 製品タイプ | | productDescription | String | 製品の説明 | | currency | String | 通貨の単位 | #### (AOS) 決済リクエスト 取得した In-App情報を使用して、productIdによる決済をリクエストできます。 Kotlin: ``` import com.nbase.sdk.Store NBase.purchase(activity, Store.GOOGLE, productId, メタデータ, options) { purchase, e -> if (e != null) { Log.e("NBase", e.message) } else { Log.e("NBase", purchase) } } ``` Java: ``` import com.nbase.sdk.Store; NBase nBase = NBase.INSTANCE; nBase.purchase(activity, storeId, productId, メタデータ, options, (purchase, e) -> { if (e != null) { Log.e("NBase", "purchase fail: " + e.getMessage()); } else { if (purchase != null) { Log.e("NBase", "purchase success: " + purchase.toString()); } } return null; }); ``` 次の表は、決済リクエスト時に渡すパラメータについて説明します。 - **Parameter** | Key | Type | Description | Required | | --- | --- | --- | --- | | activity | Activity | 現在のアクティビティ | O | | storeId | Store | ストア ID (下記表を参照) | O | | productId | String | productId (ダッシュボード → 決済→ In-Appアイテム) | O | | メタデータ | String | メタデータ | X | | options | String | 決済オプション機能 | X | 次の表は、`storeId`に渡すことのできるストア値について説明します。 | 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 | | --- | --- | --- | | id | String | ID | | orderId | String | 注文 ID | | storeId | String | ストア ID | | productId | String | 商品 ID | | billingKey | String | 決済キー | | signature | String | 署名 | | originalJson | String | オリジナル JSON | | developerPayload | String | 開発者ペイロード | | packageName | String | パッケージ名 | | isAcknowledged | bool | 確認の有無 | | purchaseState | String | 購入状態 | | purchaseTime | String | 購入時間 | | quantity | String | 数 | | recurringState | String | 定期決済状態 | | currency | String | 通貨 | | country | String | 国 | | paymentId | String | 決済 ID | | price | Float | 価格 | | iapVersion | String | In-App決済バージョン | | playerId | String | プレイヤー ID | | serverId | String | サーバ ID | | level | Int | レベル | | userdata | String | ユーザーデータ | | メタデータ | String | メタデータ | | options | String | オプション | | authCode | String | 認証コード | #### (AOS) 未処理決済の復元 決済は完了しているが、ゲームに結果が反映されていない決済を復元します。`restorePurchase`で復元をリクエストすると、復元された決済情報が`setPurchaseRestoreListener`に登録したリスナーに1件ずつ渡されます。 参考 nbasesdk 3.0.98以降で使用できます。 - **復元リスナーの登録** ログインが完了すると SDKがすぐ復元を開始するため、ログインを呼び出す前に一度登録してください。ログイン時およびアプリへの復帰時に SDKが自動で実行する復元結果も同一のリスナーに通知され、同一の決済に対する成功通知は1回のみ行われます。 Kotlin: ``` NBase.setPurchaseRestoreListener { purchase, e -> if (e != null) { // 復元失敗 Log.e("NBase", "restore Failed: ${e.message}") } else { // 復元成功: orderId、productIdに基づいてアイテムを付与します。 Log.d("NBase", "restore Success: ${purchase?.get("orderId")} / ${purchase?.get("productId")}") } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.setPurchaseRestoreListener((purchase, e) -> { if (e != null) { // 復元失敗 Log.e("NBase", "restore Failed: " + e.getMessage()); } else if (purchase != null) { // 復元成功: orderId、productIdに基づいてアイテムを付与します。 Log.d("NBase", "restore Success: " + purchase.get("orderId") + " / " + purchase.get("productId")); } return null; }); ``` 次の表は、復元リスナーコールバックで渡される値について説明します。 - **Callback** | Key | Type | Description | | --- | --- | --- | | purchase | Map? | 復元された決済情報。[決済リクエスト](/docs/ja/game-gamepot3-purchase#AOS%EA%B2%B0%EC%A0%9C%EC%9A%94%EC%B2%AD)の Callbackと同じキーで渡す | | e | CoreException? | 復元失敗時のエラー情報。成功時、`null` | - **復元リクエスト** 初期化とログインが完了した後に呼び出してください。 Kotlin: ``` NBase.restorePurchase(activity) { success, e -> if (e != null) { Log.e("NBase", "restorePurchase Failed: ${e.message}") } else { Log.d("NBase", "restorePurchase Success") } } ``` Java: ``` NBase nBase = NBase.INSTANCE; nBase.restorePurchase(activity, (success, e) -> { if (e != null) { Log.e("NBase", "restorePurchase Failed: " + e.getMessage()); } else { Log.d("NBase", "restorePurchase Success"); } return null; }); ``` 次の表は、復元リクエスト時に渡すパラメータについて説明します。 - **Parameter** | Key | Type | Description | Required | | --- | --- | --- | --- | | activity | Activity | 現在のアクティビティ | O | | storeId | Store | 復元対象のストア。省略すると、初期化に設定したストア | X | 次の表は、復元リクエストのコールバックとして渡される値について説明します。 - **Callback** | Key | Type | Description | | --- | --- | --- | | success | Boolean | 復元リクエストを開始したか。復元された決済情報はリスナーに通知されます。 | | e | CoreException? | リクエスト失敗時のエラー情報。成功時、`null` | - **復元リスナーの解除** 登録済みのリスナーを解除します。 Kotlin: ``` NBase.setPurchaseRestoreListener(null) ``` Java: ``` NBase.INSTANCE.setPurchaseRestoreListener(null); ``` ### iOS iOSで商品情報を照会し、決済をリクエストする方法をご案内します。 #### (iOS) In-App情報の取得 決済の際は、画面に決済情報と現地の通貨情報を表示する必要があります。以下の関数を使用すると現在の決済通貨や名前などを取得できます。正しく取得できない場合は、コンソールの設定を確認してください。 Swift: ``` let products = NBase.getProductItems() ``` Objective-C: ``` [NBaseBridge.shared getProductItems:^(NSString * _Nullable result) { NSLog(@"getProductItems result: %@", result); }]; ``` 次の表は、商品情報の照会コールバックで渡される値について説明します。 - **Callback** | Key | Type | Description | | --- | --- | --- | | id | String | productId | | productId | String | 製品の固有 ID | | productName | String | 製品名 | | productType | String | 製品タイプ | | currency | String | 通貨 | | price | Float64 | 製品の価格 | | localizedPrice | String | 現地化された価格 | | productDescription | String | 製品の説明 | #### (iOS) 決済リクエスト 取得した In-App情報を使用して、productIdによる決済をリクエストできます。 Swift: ``` NBase.purchase(productId: productId, メタデータ: メタデータ, options: options) { result in switch result { case .success(let data): NBase.showToast(message: data?.encodeToJson() ?? "") case .failure(let error): NBase.showToast(message: error.errorDescription ?? "") } } ``` Objective-C: ``` [NBaseBridge.shared purchase:productId メタデータ:メタデータ options:options:^(NSDictionary * _Nullable result, NSError * _Nullable error) { if (error) { NSLog(@"purchase Error: %@", error.localizedDescription); } else { NSLog(@"purchase succeeded with result: %@", result); } }]; ``` 次の表は、決済リクエスト時に渡すパラメータについて説明します。 - **Parameter** | Key | Type | Description | Required | | --- | --- | --- | --- | | productId | String | 商品 ID(ダッシュボード > 決済 > In-Appアイテム) | O | | メタデータ | String | メタデータ | X | | options | String | 決済オプション機能 | X | 次の表は、決済リクエストのコールバックで返される値について説明します。 - **Callback** | Key | Type | Description | | --- | --- | --- | | orderId | String | 注文 ID | | receipt | String | レシート | | signature | String | 署名 | | productId | String | 商品 ID | | storeId | String | ストア ID | | country | String | 国 | | quantity | Int | 数 | | paymentId | String | 決済 ID | | currency | String | 通貨 | | serverId | String | サーバ ID | | playerId | String | プレイヤー ID | | userdata | String | ユーザーデータ | | メタデータ | String | メタデータ | | options | String | 決済オプション | | authCode | String | 認証コード | | level | Int | レベル | | price | Float64 | 価格 | ### Unity Unityで商品情報を照会したり、決済をリクエストしたり、Androidの未処理決済を復元する方法をご案内します。 #### (Unity) In-App情報の取得 決済の際は、画面に決済情報と現地の通貨情報を表示する必要があります。 以下の関数を使用すると現在の決済通貨や名前などを取得できます。正しく取得できない場合は、コンソールの設定を確認してください。 ``` NBaseSDK.NBase.getProductItems((products, error) => { if (products != null && products.Count > 0) { // 製品リストをループします。 foreach (var product in products) { // 各製品の情報をトーストメッセージで表示します。 // 例では product.ToString()を呼び出していますが、 // 実際は productの具体的な属性(例: 名前、価格など)を表示できます。 NBaseSDK.NBase.showToast(product.ToString()); } } else { // 製品リストが空の場合、ユーザーに通知します。 NBaseSDK.NBase.showToast("製品リストが空です。"); } }); ``` 次の表は、商品情報の照会コールバックで渡される値について説明します。 - **Callback** | Key | Type | Description | | --- | --- | --- | | Products[].id | string | productId | | Products[].title | string | 製品のタイトル | | Products[].productId | string | 製品の固有 ID | | Products[].productType | string | 製品タイプ | | Products[].productName | string | 製品名 | | Products[].productDescription | string | 製品の説明 | | Products[].currency | string | 通貨の単位 | | Products[].price | float | 製品の価格 | #### (Unity) 決済リクエスト 取得した In-App情報にある productIdで決済をリクエストできます。 ``` NBaseSDK.NBase.purchase(Store.google.ToString(), productId, メタデータ, options, (purchase, error) => { if (error != null) { Debug.Log(error.Message.ToString()); return; } // 決済成功 }); ``` 次の表は、決済リクエスト時に渡すパラメータについて説明します。 - **Parameter** | Key | Type | Description | Required | | --- | --- | --- | --- | | storeId | string | ストア ID (下記表を参照) | O | | productId | string | productId (ダッシュボード → 決済→ In-Appアイテム) | O | | メタデータ | string | メタデータ | X | | options | string | 決済オプション機能 | X | 次の表は、`storeId`に渡すことのできるストア値について説明します。 | 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 | 次の表は、決済リクエストのコールバックで返される値について説明します。 - **Callback** | Key | Type | Description | | --- | --- | --- | | storeId | string | ストアの固有 ID | | paymentId | string | 決済 ID | | iapVersion | string | In-App決済バージョン | | productId | string | productId | | billingKey | string | 請求キー | | signature | string | 署名 | | originalJson | string | オリジナル JSON | | orderId | string | 注文 ID | | developerPayload | string | 開発者ペイロード | | packageName | string | パッケージ名 | | isAcknowledged | bool | 確認の有無 | | purchaseState | int | 購入状態 | | purchaseTime | long | 購入時間 | | price | float | 価格 | | quantity | int | 数 | | currency | string | 通貨の単位 | #### (Unity) 未処理決済の復元 決済は完了しているが、ゲームに結果が反映されていない決済を復元します。`restorePurchase`で復元をリクエストすると、復元された決済情報が`setPurchaseRestoreListener`に登録したリスナーに1件ずつ渡されます。 参考 nbasesdk-unity-plugin 3.0.18以降の Androidで使用できます。 - **復元リスナーの登録** ログインが完了すると SDKがすぐ復元を開始するため、ログインを呼び出す前に一度登録してください。ログイン時およびアプリへの復帰時に SDKが自動で実行する復元結果も同一のリスナーに通知され、同一の決済に対する成功通知は1回のみ行われます。 ``` NBaseSDK.NBase.setPurchaseRestoreListener((purchase, error) => { if (error != null) { // 復元失敗 Debug.Log("restore Failed: " + error.Message); return; } // 復元成功: orderId、productIdに基づいてアイテムを付与します。 Debug.Log("restore Success: " + purchase.orderId + " / " + purchase.productId); }); ``` 次の表は、復元リスナーコールバックで渡される値について説明します。 - **Callback** | Key | Type | Description | | --- | --- | --- | | purchase | Purchase | 復元された決済情報。[決済リクエスト](/docs/ja/game-gamepot3-purchase#Unity%EA%B2%B0%EC%A0%9C%EC%9A%94%EC%B2%AD)の Callbackと同じ | | error | Error | 復元失敗時のエラー情報。成功時、`null` | - **復元リクエスト** 初期化とログインが完了した後に呼び出してください。 ``` NBaseSDK.NBase.restorePurchase((success, error) => { if (error != null) { Debug.Log("restorePurchase Failed: " + error.Message); return; } Debug.Log("restorePurchase Success"); }); ``` 次の表は、復元リクエストのコールバックとして渡される値について説明します。 - **Callback** | Key | Type | Description | | --- | --- | --- | | success | bool | 復元リクエストを開始したか。復元された決済情報はリスナーに通知 | | error | Error | リクエスト失敗時のエラー情報。成功時、`null` | - **復元リスナーの解除** 登録済みのリスナーを解除します。 ``` NBaseSDK.NBase.removePurchaseRestoreListener(); ``` ## トラブルシューティング 決済連携中によく発生するエラーや確認事項をご案内します。 **Q. ProductID not foundエラーが発生します。** A. **ダッシュボード** > **決済** > **In-App** にその商品 IDが登録されていることをご確認ください。 **Q. 決済ができません。** A. [ストア別環境設定](/docs/ja/game-gamepot3-google-play-store)を参照し、そのストアに合った設定が完了しているかご確認ください。 **Q. (Android) java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/billingclient/api/BillingClient;** A. 以下のコードを追加してください。 ``` ``` **Q. (iOS) In-App情報を取得できません。** A. Apple Connectに登録された In-App商品情報とアプリ環境(Production/Sandbox)が一致していることをご確認ください。