アドオンの定期購入型アイテムのセットアップ
次の手順は、アドオンの定期購入型アイテムをセットアップ、統合、テストする方法を示しています。
前提条件
アドオンの定期購入型アイテムを使用するには、以下の条件を満たす必要があります。
-
開発者コンソールでアドオンの定期購入型アイテムが有効になっていること。
この機能を利用できるのは一部のパートナーに限られているため、Amazonの担当者が有効にする必要があります。
-
Appstore SDKバージョン3.0.9以降。
手順1: アドオンの定期購入型アイテムをセットアップする
Amazon開発者コンソールでアドオンの定期購入型アイテムをセットアップする手順は、基本の定期購入型アイテムのセットアップ手順と似ています。新しい定期購入型アイテムをセットアップする方法については、IAPアイテムの新規作成を参照してください。
アドオンの定期購入型アイテムをセットアップするには
- 開発者コンソールにログインし、ナビゲーションバーから [マイアプリ] をクリックします。
- 一覧でアプリを選択し、[アプリ内課金(IAP)] 列で [<数字>アイテム] をクリックします。
-
[アプリ内課金(IAP)アイテム] 画面で、[新しいIAPを追加] > [Add an add-on subscription] の順にクリックします。
![ドロップダウンに [Add an Add-on Subscription] オプションが表示されます。](https://m.media-amazon.com/images/G/01/mobile-apps/dex/in_app_purchasing/add-an-add-on-subscription._TTH_.png)
-
アドオンの定期購入型アイテムの購入エクスペリエンスと定期購入型アイテムの管理エクスペリエンスをカスタマイズするには、アドオンの定期購入型アイテムのアイコンと背景画像をアップロードします。
-
[公開中の定期購入へのアドオンのマッピング] セクションで、[公開中の定期購入へのアドオンのマッピング] をクリックします。

ここでは、アドオンの定期購入型アイテムと基本の定期購入型アイテムの関係を定義するための情報を入力します。
-
すべての必須フィールドに情報を入力します。アドオンと基本の定期購入型アイテムの関係を定義するには、必ず最も詳細なレベルを使用してください。たとえば、基本の定期購入型アイテムの期間レベルで関係を定義できます。
[IAPを申請] ボタンは、必要な情報をすべて入力するまで無効のままです。
-
必須フィールドをすべて入力したら、アドオンの定期購入型アイテムをライブアプリテスト(LAT)のみに申請するか、LATと現在公開中のアプリの両方に申請するかを選択します。
詳細については、新規または更新されたIAPアイテムの申請を参照してください。
注: 変更内容を公開中のアプリに昇格させる前に、まずLATを使用してアドオンの定期購入型アイテムをテストすることを検討してください。LATを使用すると、すべてのユーザーに対して利用可能にする前に、アドオンの定期購入型アイテムをテストできます。
手順2: アドオンの定期購入型アイテムをアプリに統合する
アドオンの定期購入型アイテムを(テストモードまたはライブモードで)セットアップして公開した後、アプリのAppstore SDK統合をアップグレードする必要があります。
SDK統合をアップグレードする際は、事前に次のアドオン統合の概要表を参照してください。
| 統合コンポーネント | カテゴリー | 変更概要 |
|---|---|---|
getUserData() |
SDK API | 変更なし。 |
getProductData() |
SDK API | 特定のSKUのアドオン関係を送信するように拡張されました。詳細については、getProductData()メソッドを実装してアプリにアドオンの定期購入型アイテムを表示する方法を参照してください。 |
getPurchaseUpdates() |
SDK API | 変更なし。 |
purchase() |
SDK API | アドオン購入の検証が強化されました。詳細については、アプリにアドオンの定期購入型アイテムを購入するコードを実装する方法を参照してください。 |
modifySubscription() |
SDK API | 変更なし。 |
notifyFulfillment() |
SDK API | 変更なし。 |
verifyReceiptId REST APIオペレーション |
レシート検証サービス(RVS) | 特定のアドオンのレシートについて、基本のレシートを返すようにレスポンスが強化されました。詳細については、アドオンの定期購入型アイテム購入の処理と検証を参照してください。 |
| アプリ内課金(IAP)のリアルタイム通知 | 通知 | 変更なし。 |
このガイドでは、アプリ内でアドオンの定期購入型アイテムをサポートするためにアプリ内課金(IAP)APIを統合する方法に特に焦点を当てています。IAP APIと完全に統合するための包括的な手順については、IAP APIをアプリに組み込む方法を参照してください。
購入の更新の処理
アドオンの定期購入型アイテムのレシートは、通常の定期購入型アイテムのレシートと同じように扱われます。アドオンの定期購入型アイテムをサポートするにあたり、getPurchaseUpdates()メソッドに変更はありません。getPurchaseUpdates()を呼び出すと、レスポンスでは基本のレシートと同じ方法でアドオンのレシートが返されます。getPurchaseUpdates()メソッドの実装の詳細については、IAPの実装に関するドキュメントのgetPurchaseUpdatesメソッドの実装を参照してください。
getProductData()メソッドを実装してアプリにアドオンの定期購入型アイテムを表示する方法
getProductData()メソッドを実装するには、IAPの実装に関するドキュメントのgetProductDataメソッドの実装を参照してください。getProductData()メソッドのリクエストパラメーターに変更はありません。ただし、レスポンスには、アドオンと基本の定期購入型アイテムのSKUをマッピングするためのフィールドが2つ追加されています。
| フィールド | データ型 | 説明 |
|---|---|---|
addons |
List<String> | 特定の基本期間SKUの対象となるアドオン期間SKUのリスト。 |
bases |
List<String> | 特定のアドオン期間SKUに関連付けられている基本期間SKUのリスト。 |
getProductData()メソッドは、定期購入型アイテムの関係について以下のシナリオを処理します。
- 基本の定期購入型アイテムの期間SKUを指定する場合:
addonsフィールドに、関連するアドオンの定期購入型アイテムの期間SKUのリストを返します。
- アドオンの定期購入型アイテムの期間SKUを指定する場合:
basesフィールドに、互換性のある基本の定期購入型アイテムの期間SKUのリストを返します。
これらの関係は、開発者コンソールで設定したマッピングを反映しています。このマッピングでは、特定のアドオンの定期購入型アイテムの期間が互換性のある基本の定期購入型アイテムの期間にリンクされています。
この機能により、次のことが可能になります。
- 特定の基本の定期購入型アイテムを利用しているユーザーに、関連するアドオンの定期購入型アイテムのみを表示します。
- アドオンの定期購入型アイテムが、互換性のある基本の定期購入型アイテムがある場合にのみ提供されるようにします。
- アプリ内で適切な定期購入型アイテムの依存関係を維持します。
アプリにアドオンの定期購入型アイテムを購入するコードを実装する方法
アドオンの定期購入型アイテムの購入を実装するには、purchase()メソッドを使用し、アドオンの期間SKUをパラメーターとして渡します。アドオンの定期購入型アイテムの購入は、既存のIAP購入フローに基づいており、ユーザーの基本の定期購入型アイテムがアクティブかどうかを確認するための追加の検証が含まれます。ユーザーの基本の定期購入型アイテムが非アクティブの場合、PurchaseResponse.RequestStatusの値はINACTIVE_BASE_SUBSCRIPTIONになります。アドオンの定期購入型アイテムの購入が成功すると、ステータスの値はSUCCESSFULになります。既存のリクエストとレスポンスの構造に変更はありません。
以下は、購入リクエストとレスポンスの例です。
リクエストの例
public void onBuyOrangeClick(final View view) {
final RequestId requestId = PurchasingService.purchase("com.example.app.monthly");
Log.d(TAG, "onBuyOrangeClick: requestId (" + requestId + ")");
}
レスポンスの例
public void onPurchaseResponse(final PurchaseResponse response) {
switch (status) {
// ...
case SUCCESSFUL:
final Receipt receipt = response.getReceipt();
iapManager.setAmazonUserId(response.getUserData().getUserId(), response.getUserData().getMarketplace());
Log.d(TAG, "onPurchaseResponse: receipt json:" + receipt.toJSON());
iapManager.handlePurchase(receipt, response.getUserData());
iapManager.refresh();
break;
case ALREADY_PURCHASED:
// ユーザーは既にアイテムに対するアクティブな非消費型アイテムを持っています。
// アプリとAmazonアプリストアが同期していません。Amazonアプリストアからすべての購入を再同期します。
PurchasingService.getPurchaseUpdates(true);
break;
case INVALID_SKU:
Log.d(TAG, "onPurchaseResponse:SKUが無効です。購入ボタンは、onProductDataResponseによって既に無効になっています。");
final Set<String> unavailableSkus = new HashSet<String>();
unavailableSkus.add(response.getReceipt().getSku());
iapManager.disablePurchaseForSkus(unavailableSkus);
break;
case FAILED:
// 購入手続きの完了前にユーザーが終了しました。
Log.d(TAG, "onPurchaseResponse:失敗したため、ローカルストレージから購入リクエストを削除してください。");
iapManager.showPurchaseFailedMessage(response.getReceipt().getSku());
break;
case NOT_SUPPORTED:
Log.d(TAG, "onPurchaseResponse:失敗したため、ローカルストレージから購入リクエストを削除してください。");
iapManager.showPurchaseFailedMessage(response.getReceipt().getSku());
// デバイスがIAP機能をサポートしていません。
// このデバイスでIAPを無効にします。
iapManager.disableAllPurchases();
break;
case INACTIVE_BASE_SUBSCRIPTION:
Log.d(TAG, "onPurchaseResponse:失敗したため、ローカルストレージから購入リクエストを削除してください。");
// 開発者は実装の必要性に応じてカスタムロジックを実行できます。
break;
}
}
購入レシートの処理と購入の完了
アドオンのレシートは、通常の定期購入型アイテムのレシートと同じように処理します。アドオンのレシートの処理や購入の完了に関する実装の詳細については、IAPの実装に関するドキュメントの購入レシートの処理と購入の完了を参照してください。
アドオンの購入のレシートを検証するには、アイテムを付与する前に、バックエンドサーバーでAmazon RVSを使用してreceiptIdを検証します。RVSを使用してアドオンのレシートを検証する方法の詳細については、アドオンの定期購入型アイテム購入の処理と検証を参照してください。
アドオンの定期購入型アイテム購入の処理と検証
アドオンの定期購入型アイテムの場合も、通常の定期購入型アイテムの場合と同じRVS実装プロセスに従います。レシート処理と定期購入型アイテム検証の詳細については、レシート検証サービスの概要を参照してください。アドオンの定期購入型アイテムのリクエストパラメーターは変更されていません。アドオンの定期購入型アイテムのレシートを処理する場合、RVSレスポンスにはbaseReceiptsというフィールドが含まれます。このフィールドには、リンクされている基本の定期購入型アイテムのレシートが含まれます。アドオンと基本の両方の定期購入型アイテムのコンテンツへのアクセスを許可する前に、baseReceiptsにリストされている値を使用して基本の定期購入型アイテムの有効性を確認してください。
| フィールド | データ型 | 説明 |
|---|---|---|
baseReceipts |
List<String> | アドオンの定期購入型アイテムに対応する基本レシートIDのリスト。 |
Amazonへのアイテム付与の結果の送信とユーザーへのアイテム付与
定期購入型アイテムのコンテンツをユーザーに付与したら、基本の定期購入型アイテムのレシートの場合と同様に、アドオンの定期購入型アイテムについてnotifyFulfillment()を呼び出します。アイテム付与の結果をAmazonに送信する方法の実装の詳細については、IAPの実装に関するドキュメントの購入レシートの処理と購入の完了を参照してください。
手順3: アドオンの定期購入型アイテムをテストする
Amazonでは、アプリ内課金(IAP)の実装のテストに役立つツールやサービスを用意しています。ツールを理解し、アプリをテストするための推奨ワークフローを確認するには、アプリ内課金(IAP)のテストの概要を参照してください。
アドオンの定期購入型アイテム用のApp Tester
アプリ用にApp Testerをセットアップして構成するには、App Testerユーザーガイドを参照してください。App Testerは、JSON(JavaScript Object Notation)ファイルに格納されたデータを使用してAPI呼び出しに応答します。このファイルには、IAPアイテムの購入データが含まれています。このJSONファイルは、開発者コンソールで自動的に作成できます。
App Testerをセットアップするには
- IAPアイテムのJSONファイルをエクスポートします。
- 開発者コンソールのアプリのメインページで、[アプリ内課金(IAP)アイテム] タブをクリックして、アプリの現在のアプリ内課金(IAP)アイテムを表示します。
- [IAPをエクスポート] > [JSON] の順にクリックし、アイテムをエクスポートすることを確認します。
- リンクをクリックしてファイルをダウンロードします。
- アドオンの定期購入型アイテムのテストを有効にするには、生成されたJSONファイルに
addonsフィールドとbasesフィールドを手動で追加します。
App Testerを構成する前に、これらのフィールドを手動で追加する必要があります。addonsフィールドは対応する基本期間に適用されるアドオンの定期購入型アイテムのリストを表し、basesフィールドはアドオンの定期購入型アイテムに関連付けられる基本期間のリストを定義します。
getProductData()をテストするには
- App Tester用のJSONファイルに、テストするSKUと商品定義が格納されていることを確認します。
- [IAP API Response Settings] セクションで、[GetProductData API] の横にあるドロップダウンメニューを使用します。
SUCCESSFULレスポンスに対するテストを行うには、DefaultまたはSUCCESSFULに設定します。FAILEDレスポンスに対するテストを行うには、FAILEDに設定します。
getProductData()を呼び出します。onGetProductDataResponseコールバックを使用してレスポンスを処理します。- 追加フィールドの
addonsやbasesがあることを確認します。
JSONレスポンスの例
"your_item_SKU" : {
...
"subscriptionParent": "com.amazon.subs.gold",
"addons": ["com.example.iap.subscription.mymagazine.gold"],
"bases": ["com.example.iap.subscription.mymagazine.silver"]
...
}
purchase()をテストするには
- App Tester用のJSONファイルに、テストするSKUと商品定義が格納されていることを確認します。
- [IAP API Response Settings] セクションで、[Purchase API] の横にあるドロップダウンメニューを使用します。
SUCCESSFULレスポンスに対するテストを行うには、DefaultまたはSUCCESSFULに設定します。- 基本の定期購入型アイテムが非アクティブのときにアドオンの定期購入型アイテムの購入をテストするには、
INACTIVE_BASE_SUBSCRIPTIONに設定します。
purchase()メソッドを呼び出します。-
onPurchaseResponseコールバックを使用してレスポンスを処理します。購入が成功したコンテンツは、App Testerの [Manage Transactions] タブに表示されます。
アドオンの定期購入型アイテムのRVSレスポンスをテストする方法
Amazonが提供しているレシート検証サービス(RVS)を使用すると、バックエンドサーバーから購入を検証できます。このサービスの詳細については、レシート検証サービスの概要を参照してください。
RVS Cloud Sandboxを使用して、App Testerで生成されたレシートを検証します。詳細については、RVS Cloud Sandbox環境のセットアップを参照してください。アドオンのレシートのRVSレスポンスにbaseReceiptsフィールドが含まれていることを確認します。このフィールドは、マッピングされた基本定期購入型アイテムのreceiptId値と一致している必要があります。
ライブアプリテストでアドオンの定期購入型アイテムをテストする方法
ライブアプリテスト(LAT)を使用すると、ほかのIAPアイテムと同様にアドオンの定期購入型アイテムをテストできます。アドオンの定期購入型アイテムをユーザーに提供する前に、まずLAT環境で購入ユースケースをテストできます。
アドオンの定期購入型アイテムをテストするユースケースについては、次の表を参照してください。
| ユースケース | 想定される結果 |
|---|---|
| 購入しなくても、利用可能な定期購入型アイテムをアプリに表示する。 このユースケースでは、 getProductData()メソッドを検証します。 |
プラン選択ページには、提供している基本の定期購入型アイテムやアドオンの定期購入型アイテムを含む、すべてのIAPアイテムが表示されます。 |
| 基本の定期購入型アイテムを購入した後に、アドオンの定期購入型アイテムを購入する。 | アドオンの定期購入型アイテムの購入は正常に完了します。確認メールが届きます。 |
| 基本の定期購入型アイテムなしでアドオンの定期購入型アイテムを購入する。 | 購入は失敗し、エラーが表示されます。 |
| アドオンの定期購入型アイテムを購入した後、アプリにサインインしてアドオンコンテンツを表示する。 このユースケースでは、 getPurchaseUpdate()メソッドとRVSレスポンスを検証します。 |
アドオンコンテンツを表示できます。 |
| Amazonウェブサイトで自動更新をオフにして、アドオンの定期購入型アイテムをキャンセルする。 キャンセルまでの待ち時間を短縮するには、タイムラインが短縮された定期購入型アイテムを使用してテストすることを検討してください。 |
[お客様のメンバーシップおよび購読] ページで、定期購入型アイテムのステータスが「自動更新されません」になっています。 Amazonは、リアルタイム通知(RTN)を通じてキャンセルを通知します。 |
| アクティブなアドオンの定期購入型アイテムにリンクされている基本の定期購入型アイテムをキャンセルする。 キャンセルまでの待ち時間を短縮するには、タイムラインが短縮された定期購入型アイテムを使用してテストすることを検討してください。 |
[お客様のメンバーシップおよび購読] ページで、基本の定期購入型アイテムのステータスが「自動更新されません」になっています。 タイムラインが短縮された定期購入型アイテムを使用する場合、基本の定期購入型アイテムとアドオンの定期購入型アイテムの両方のステータスが15分後に「期限切れ」と表示されます。Amazonは、リアルタイム通知(RTN)を通じてキャンセルを通知します。 |
関連トピック
Last updated: 2026年5月20日

