決済

Prev Next

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

決済

GAMEPOT SDKが提供する In-App決済機能を使用して、ゲーム内アイテムを販売することができます。決済の前に、ストア別環境設定にそのストアに合わせて設定する必要があります。さらに、ダッシュボード > 決済 > 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<String, Any?>? 復元された決済情報。決済リクエストの 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 復元された決済情報。決済リクエストの 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. ストア別環境設定を参照し、そのストアに合った設定が完了しているかご確認ください。

Q. (Android) java.lang.NoClassDefFoundError: Failed resolution of: Lcom/android/billingclient/api/BillingClient;
A. 以下のコードを追加してください。

<androidPackage spec="com.android.billingclient:billing:8.0.0" />

Q. (iOS) In-App情報を取得できません。
A. Apple Connectに登録された In-App商品情報とアプリ環境(Production/Sandbox)が一致していることをご確認ください。