Classic/VPC環境で利用できます。
決済
GAMEPOT SDKが提供する In-App決済機能を使用して、ゲーム内アイテムを販売することができます。決済の前に、ストア別環境設定にそのストアに合わせて設定する必要があります。さらに、ダッシュボード > 決済 > In-App にアイテムが追加されていない場合、「ProductID not found」というエラーが発生します。
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 | 製品 ID |
| 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, metadata, 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, metadata, 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 | 商品 ID(ダッシュボード → 決済 → In-Appアイテム) | O |
| metadata | String | メタデータ | X |
| options | String | 決済オプション機能 | X |
| 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 | ユーザーデータ |
| metadata | String | メタデータ |
| options | String | オプション |
| authCode | String | 認証コード |
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 | 製品 ID |
| productId | String | 製品の固有 ID |
| productName | String | 製品名 |
| productType | String | 製品タイプ |
| currency | String | 通貨 |
| price | Float64 | 製品の価格 |
| localizedPrice | String | 現地化された価格 |
| productDescription | String | 製品の説明 |
(iOS) 決済リクエスト
取得した In-App情報にある productIdで決済をリクエストできます。
Swift:
NBase.purchase(productId: productId, metadata: metadata, 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 metadata:metadata 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 |
| metadata | 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 | ユーザーデータ |
| metadata | String | メタデータ |
| options | String | 決済オプション |
| authCode | String | 認証コード |
| level | Int | レベル |
| price | Float64 | 価格 |
Unity
(Unity) In-App情報の取得
決済の際は、画面に決済情報と現地の通貨情報を表示する必要があります。
以下の関数を使用すると現在の決済通貨や名前などを取得できます。正常に取得できない場合は、コンソール設定をご確認ください。
NBaseSDK.NBase.getProductItems(Store.google.ToString(), (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 | 製品 ID |
| 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, metadata, options, (purchase, error) =>
{
if (error != null)
{
Debug.Log(error.Message.ToString());
return;
}
// 決済成功
});
- Parameter
| Key | Type | Description | Required |
|---|---|---|---|
| storeId | string | ストア ID (下記表を参照) | O |
| productId | string | 商品 ID(ダッシュボード → 決済 → In-Appアイテム) | O |
| metadata | string | Metadata | X |
| options | string | 決済オプション機能 | X |
| 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 | 製品 ID |
| 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 | 通貨の単位 |
トラブルシューティング
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:6.1.0" />
Q. (iOS) In-App情報を取得できません。
A. Apple Connectに登録された In-App商品情報とアプリ環境(Production/Sandbox)が一致していることをご確認ください。