前提条件
クイック定期購入は、Amazonアプリストアのアプリ内課金(IAP)APIに含まれている機能です。 クイック定期購入を設定する前に、次の操作を行う必要があります。- Appstore IAPライブラリのバージョン2.12.2以降と統合します(
@amazon-devices/keplerscript-appstore-iap-lib": "~2.12.2")。 - アクティブなアプリ内課金(IAP)アイテムを用意します。
考慮事項
作業を始める前に、以下の考慮事項と推奨事項を確認してください。- ダウンロードとインストールの時間を短縮するために、アプリのサイズを最適化してください。 一般に、アプリのサイズは50MB以下に抑えることをお勧めします。アプリのサイズを小さくすると、入手しやすさが向上し、より多くのユーザーがインストールできるようになります。また、インストール時と初回使用時にかかる時間も短縮されます。さらに、アプリが小さいほど、ストレージが不足したときにアンインストールされる可能性が低くなります。
- クイック定期購入を通じて提供するオファーは、有料の定期購入型アイテムに最も適しています。 クイック定期購入は、無料体験を提供するアプリをサポートしています。ただし、ユーザー獲得のためにアプリでフリーミアムモデルを使用している場合は、クイック定期購入がアプリに最適であるとは限りません。フリーミアムモデルでは、アプリ自体は無料で提供され、ユーザーは有料の定期購入なしで基本的なコンテンツやサービスにアクセスできますが、追加コンテンツや高度な機能は有料で提供されます。
- クイック定期購入による購入の処理はアプリの外部で行われます。 クイック定期購入を使用しない標準のIAPフローでは、ユーザーはアプリにサインインし、アプリ内から購入を行います。一方、クイック定期購入では、ユーザーはまずアプリの外部で購入を行い、その後アプリを開いてサインインします。 このため、クイック定期購入の実装には、標準のIAP実装との違いがいくつかあります。クイック定期購入を統合するには、このページの手順を使用してください。
手順1:開発者コンソールでクイック定期購入を構成する
アプリのクイック定期購入を構成するには- 開発者コンソールのダッシュボードに移動してアカウントにログインします。
- ナビゲーションバーから [マイアプリ] をクリックします。
- 一覧で目的のアプリを見つけ、その行を展開します。
- [アプリ内課金(IAP)アイテム] 列内のリンクをクリックして、[アプリ内課金(IAP)アイテム] 画面を開きます。
- [クイック定期購入を作成] を選択します。
-
次の画像のようなオーバーレイポップアップが表示されます。
[デフォルトの定期購入型アイテムを選択] ドロップダウンに、既存のアプリ内課金(IAP)定期購入型アイテムが表示されます。クイック定期購入を有効にする定期購入型アイテムを選択します。
![[クイック定期購入の新規作成]。[デフォルトの定期購入型アイテムを選択]。[期間を選択]。[サポート対象デバイスを選択]。使用可能なアクションボタンには、[キャンセル]、[テスト用のクイック定期購入を作成]、[テスト・公開用のクイック定期購入を作成] があります。](https://m.media-amazon.com/images/G/01/mobile-apps/dex/in_app_purchasing/create-new-quick-subscription-vega._TTH_.png)
[クイック定期購入の新規作成] ダイアログ
- [期間を選択] ドロップダウンで、クイック定期購入の期間を選択します。
- クイック定期購入でほかの定期購入型アイテムを提供する場合は、[別のクイック定期購入を追加] をクリックします。
-
クイック定期購入の対象デバイスを、チェックボックスをオンにして選択します。
- Fire TVデバイスの場合、Fire OSデバイスとVega OSデバイスのいずれかまたは両方をターゲットとして明示的に選択できます。
- Fire OSデバイスのみをターゲットにするには、[Fire TV (Fire OS)] をオンにします。
- Vega OSデバイスのみをターゲットにするには、[Fire TV (Vega)] のみをオンにします。
- Fire OSデバイスとVega OSデバイスの両方をターゲットにするには、[Fire TV (Fire OS)] と [Fire TV (Vega)] の両方をオンにします。
- Fire TVデバイスの場合、Fire OSデバイスとVega OSデバイスのいずれかまたは両方をターゲットとして明示的に選択できます。
-
ライブアプリテスト(LAT)用にのみクイック定期購入を作成するか、LATと公開アプリの両方のためにクイック定期購入を作成するかを選択します。
- LAT用にのみクイック定期購入を作成するには、[テスト用のクイック定期購入を作成] をクリックします。
- LATと公開中のアプリの両方のためにクイック定期購入を作成するには、[テスト・公開用のクイック定期購入を作成] をクリックします。
手順2:セキュリティプロファイルを構成する
クイック定期購入を正しく動作させるには、アプリのセキュリティプロファイルを設定する必要があります。セキュリティプロファイルは、Amazonから開発者に安全にユーザーデータを共有することを可能にし、開発者が自動的にアカウントを作成してユーザーをサインインできるようにするために不可欠なものです。 セキュリティプロファイルにより、セキュリティ認証情報を含むAmazonデータを1つ以上のアプリに関連付けることができます。たとえば、「マイゲーム - 無料」と「マイゲーム - HD」という2つのアプリがある場合に、同じセキュリティプロファイルを使用してデータを共有できます。セキュリティプロファイルには、アプリまたはアプリファミリーを識別できる名前を付けてください。詳細については、セキュリティプロファイルを参照してください。 アプリのセキュリティプロファイルを構成するには- 開発者コンソールのダッシュボードに移動してアカウントにログインします。
- ナビゲーションバーから [マイアプリ] をクリックし、アプリを選択します。
- [アプリサービス] をクリックし、[セキュリティプロファイル] セクションまでスクロールします。
- [既存のセキュリティプロファイルを選択、または新規作成する] をクリックしてオプションを展開します。
- ドロップダウンを使用して、このアプリにマップするセキュリティプロファイルを選択し、[セキュリティプロファイルを有効化] をクリックします。または、[セキュリティプロファイルを新規作成] をクリックして新しいセキュリティプロファイルを作成することもできます。
手順3:getPurchaseUpdatesを実装する
getPurchaseUpdates()メソッドはユーザーのレシートを取得します。ユーザーがクイック定期購入を通じて購入した場合、購入処理はアプリの外部で行われます。このため、クイック定期購入では、アプリからgetPurchaseUpdates()を呼び出してユーザーの購入ステータスを検証する必要があります。この呼び出しにより、アプリが開いたときに、購入されたコンテンツがユーザーに確実に付与されます。getPurchaseUpdates()を適切に実装しないと、ユーザーが購入したコンテンツにアクセスできなくなる可能性があります。
実装要件
getPurchaseUpdates()メソッドを正しく実装するには、以下の要件に従ってください。
手順4:RVSと統合する
レシート検証サービス(RVS)を使用すると、アプリのユーザーが行った購入を検証できます。RVSの詳細については、アプリ内課金(IAP)アプリのレシート検証を参照してください。RVSサーバーにリクエストを送信すると、返されるJSONレスポンスにはpurchaseMetadataMapフィールドが含まれます。クイック定期購入を使用して購入を開始した場合、次の例のように、purchaseMetadataMapは{"QuickSubscribe":"true"}となります。
purchaseMetadataMapはnullになります。レスポンスオブジェクトの全フィールドについて次の表で説明します。
| フィールド | データ型 | 説明 |
|---|---|---|
autoRenewing | ブール型 | ユーザーの定期購入が自動更新されるかどうかを示します。 |
betaProduct | ブール型 | 購入商品がライブアプリテスト商品かどうかを示します。 |
cancelDate | 長整数 | 購入をキャンセルした日、または定期購入の期限が切れた日。購入がキャンセルされていない場合、このフィールドはnullになります。時間はミリ秒単位です。 |
cancelReason | 整数 | 商品がキャンセルされた理由を示します。有効な値は、null、0、1、2のいずれかです。それぞれの整数はキャンセルの理由を表します。null - 購入がキャンセルされていない。0 - 現時点ではキャンセル理由が特定されていないため、後で表示される。1 - ユーザーが注文をキャンセルした。2 - 購入がAmazonのシステムによってキャンセルされた(定期購入型アイテム購入時のユーザーの支払いが無効で、その購入が猶予期間内に完了しなかった場合など)。このコードは、Amazonカスタマーサポートがユーザーのリクエストに応じて注文をキャンセルした場合にも返されます。 |
deferredDate | 長整数 | 価格帯別の定期購入型アイテムで、定期購入型アイテムが変更され、比例配分モードが繰延の場合に、定期購入型プランが変更される日付を示します。プランの変更が適用された後はnullになります。 |
deferredSku | 文字列 | 価格帯別の定期購入型アイテムで、定期購入型アイテムが変更され、比例配分モードが繰延の場合に、変更先のプランのSKUを示します。プランの変更が適用された後はnullになります。 |
freeTrialEndDate | 長整数 | 定期購入が無料体験期間中であることを示します。定期購入の無料体験期間の終了日をエポック(ミリ秒)単位で提供します。定期購入が無料体験期間中でない場合、このフィールドはnullになります。 |
fulfillmentDate | 長整数 | 定期購入でアイテム付与完了が通知された日付。エポックからのミリ秒数として格納されます。定期購入のアイテム付与が確認されていない場合はnullになります。消費型アイテムと非消費型アイテムでは常にnullです。 |
fulfillmentResult | 文字列 | 定期購入でのアイテム付与のステータス。有効な値は次のとおりです。
|
gracePeriodEndDate | 長整数 | 定期購入が猶予期間中であることを示します。定期購入の猶予期間の終了日をエポック(ミリ秒)単位で提供します。定期購入が猶予期間中でない場合、このフィールドはnullになります。 |
parentProductId | 文字列 | null。将来使用するために予約されています。 |
productId | 文字列 | アプリ内でこのアイテムに対して定義したSKU。 |
productType | 文字列 | 購入された商品の種類。有効な商品タイプは、CONSUMABLE(消費型アイテム)、SUBSCRIPTION(定期購入型アイテム)、ENTITLED(非消費型アイテム)です。 |
promotions | List<Promotion> | 定期購入型アイテムのプロモーション価格またはリテンションオファーの詳細。プロモーションがない場合はnullになります。 |
purchaseDate | 長整数 | 購入日。エポックからのミリ秒数として格納されます。定期購入型アイテムの場合、purchaseDateは最初の購入日を表します。それ以降の更新日を表すものではありません。 |
purchaseMetadataMap | Map<String, String> | 購入がクイック定期購入を通じて開始された場合、値は{"QuickSubscribe":"true"}になります。それ以外の場合はnullになります。 |
quantity | 整数 | 購入された数量。常にnullまたは1になります。 |
receiptId | 文字列 | 購入のグローバルに一意の識別子。 |
renewalDate | 長整数 | 定期購入型アイテムの更新が必要となる日付。エポックからのミリ秒で計算されます。 |
term | 文字列 | 定期購入型IAPアイテムの有効期間(期間は購入日から始まります)。数字と期間(日、週、月、年)で構成されます(「1週間」、「2か月」など)。 |
termSku | 文字列 | 定期購入期間に対応する一意のSKU。 |
testTransaction | ブール型 | この購入が、Amazonによる公開・テストプロセスの一部として実行されたものかどうかを示します。 |
手順5:アイテム付与の結果をAmazonに送信する
アイテム付与の結果を送信すると、ユーザーが購入したコンテンツにアクセスできるかどうかをAmazon側で確認できるようになります。必ずアイテム付与の結果をAmazonに送信してください。これには、PurchasingServiceに含まれているnotifyFulfillment()メソッドを使用します。アイテム付与の結果を送信しないと、Amazonは、付与が完了していない定期購入型アイテムの料金をユーザーが払い続けることがないように、自動的に定期購入型アイテムをキャンセルします。
ユーザーがサインインした後、定期購入型アイテムが付与されたら、ステータスをFULFILLEDとしてnotifyFulfillment()を呼び出します。ユーザーが既にAmazon以外から入手した定期購入型アイテムを所有している場合は、ステータスをUNAVAILABLEとしてnotifyFulfillment()を呼び出して、ユーザーはサインインしているものの購入は適用できないことを通知します。
既にAcknowledge Receipt APIを統合している場合は、引き続きnotifyFulfillment()メソッドの代わりに使用できます。アイテム付与の結果をAmazonに通知するには、アプリ内でnotifyFulfillment()メソッドかAcknowledge Receipt APIのいずれかを使用する必要があります。
実装要件
notifyFulfillment()メソッドを正しく実装するには、以下の要件に従ってください。
- アイテム付与ステータスをAmazonに通知するために、レシートが処理されたら、そのたびに
notifyFulfillment()を呼び出す必要があります。 notifyFulfillment()を呼び出すときは、以下の要件に従います。- 次の条件に該当する場合は、
FULFILLEDを送信します。- ユーザーが正常にレシートにマッピングされ、ユーザーの定期購入済みコンテンツのロックが解除された。
- 次のいずれかの状況が発生した場合は、
UNAVAILABLEを送信します。- ユーザーがAmazon以外で購入した既存の定期購入型アイテムを所有している。
- ユーザーにサービスのアカウントにサインアップする資格がない。
- 次の条件に該当する場合は、
自動キャンセル
Amazonでは、付与が完了していない定期購入型アイテムの料金をユーザーが払い続けなくて済むように、自動キャンセルを使用しています。購入から14日以内にnotifyFulfillment()またはAcknowledge Receipt APIを使用して購入レシートのステータスをFULFILLEDに更新しないと、Amazonアプリストアは自動的に定期購入型アイテムをキャンセルし、返金を行います。ただし、購入後14日以内に購入レシートのステータスをUNAVAILABLEに更新すると、Amazonアプリストアは直ちに定期購入をキャンセルして返金します。
Acknowledge Receipt API
Acknowledge Receipt APIの詳細を表示/非表示
Acknowledge Receipt APIの詳細を表示/非表示
acknowledgeReceiptオペレーションを使用して、定期購入型アイテムの購入でアイテムの付与が完了したことをAmazonに通知できます。これにより、ユーザーがアクセスを失うことはなくなります。acknowledgeReceiptオペレーションは、RVSで使用されるverifyReceiptIdオペレーションとよく似たREST APIですが、GETリクエストではなくPUTリクエストを使用する必要があります。acknowledgeReceiptオペレーションのバージョン番号は1.0です。クエリパラメーターの詳細は、次の表のとおりです。クエリパラメーター
Acknowledge Receipt APIのレスポンスでは、次のクエリパラメーターを使用します。| クエリパラメーター | 説明 | 必須 |
|---|---|---|
developer | リクエストを発行した開発者を識別するための共有シークレット。共有シークレットは、Amazonアプリストアの開発者アカウントの [共有キー] ページで確認できます。 | ○ |
user | Amazonアプリストアで公開したアプリを使用する個々のAmazonユーザーを表すID (PurchaseResponse.getUserData().getUserId())。 | ○ |
receiptId | 購入を一意に識別するID (PurchaseResponse.getReceipt().getReceiptId()またはPurchaseUpdatesResponse.getReceipts() → Receipt.getReceiptId())。 | ○ |
fulfillmentResult | 注文のアイテム付与ステータス。有効な値は次のとおりです。
| ○ |
レスポンスコード
HTTPリクエストを行った後、Acknowledge Receipt APIは次のいずれかのコードで応答します。| レスポンスコード | 説明 |
|---|---|
| HTTP 200 | 成功しました。レシートID、ユーザーID、共有シークレットがすべて有効です。定期購入型アイテムはアイテム付与済みとしてマークされます。 |
| HTTP 400 | このreceiptIdで表されるトランザクションが無効です。または、このreceiptIdに対応するトランザクションが見つかりませんでした。 |
| HTTP 410 | このreceiptIdで表されるトランザクションは無効になりました。キャンセルされたレシートとして処理してください。 |
| HTTP 429 | リクエストがスロットリングされました。呼び出しの頻度を減らして、しばらくしてから再試行してください。 |
| HTTP 496 | 共有シークレットが無効です。 |
| HTTP 497 | ユーザーIDが無効です。 |
| HTTP 500 | 内部サーバーエラーが発生しました。 |
Acknowledge Receipt APIに関するよくある質問(FAQ)
Acknowledge Receipt APIに関するよくある質問(FAQ)を以下に示します。Acknowledge Receipt APIの呼び出しは、更新のたびに必要ですか?それとも購入後にのみ必要ですか?
Acknowledge Receipt APIの呼び出しは、更新のたびに必要ですか?それとも購入後にのみ必要ですか?
Acknowledge Receipt APIが確認済みの場合に、ステータスFULFILLEDで呼び出されると、どのような応答が返されますか?
Acknowledge Receipt APIが確認済みの場合に、ステータスFULFILLEDで呼び出されると、どのような応答が返されますか?
FULFILLEDで何度も呼び出した場合、べき等のオペレーションであるため、毎回同じ応答が返されます。手順6:RTNと統合する
クイック定期購入では、ユーザーはアプリの外部でAmazonを通じてアプリを定期購入します。そのため、ユーザーの購入ステータスに関する情報の一部がアプリに保存されない可能性があります。getPurchaseUpdates()メソッドは、アプリが開かれている場合にのみデータを送信します。
リアルタイム通知(RTN)は、アプリの外部で発生するトランザクションも含め、すべてのトランザクションの購入情報を提供します。AmazonのRTNサーバーから購入通知を受信したら、レシート検証サービス(RVS)を使用してレシートを検証します。
RTNを使用すると、ユーザーが購入、更新、キャンセルなどを行ったときに、ユーザーの定期購入イベントに関する更新通知がAmazonから届きます。この情報はクイック定期購入を使用するアプリにとって重要です。これにより、ユーザーの定期購入型アイテムに関する最新情報を常にアプリに反映できます。
RTNの設定方法の詳細については、リアルタイム通知(RTN)を使用する方法を参照してください。
手順7:ワンクリックアカウント情報共有を統合する
アプリをワンクリックアカウント情報共有機能と統合するには、ワンクリックアカウント情報共有の統合ガイドに従います。 次の図は、ワンクリックアカウント情報共有を使用したクイック定期購入のコードフローを示しています。図の説明を表示/非表示
図の説明を表示/非表示
- アプリが開きます。
-
PurchasingService.getUserData()を呼び出します。 -
UserData.userProfileAccessConsentStatusを呼び出して、UserDataレスポンスオブジェクトからUserProfileAccessConsentStatusを取得します。 - ユーザーが同意した場合は手順5に進み、それ以外の場合は手順11に進みます。
-
PurchasingService.requestUserProfileAccess()を呼び出します。 -
呼び出しが成功し、レスポンスに
userProfileAccessAuthCodeが含まれている場合は、手順7に進みます。それ以外の場合は手順11に進みます。 - 認可コードを使用してサーバーを更新します。
- Appstore IAPのGet Access Token APIを呼び出して、アクセストークンを取得します。
- 呼び出しが成功したら、アクセストークンを使用してAppstore IAPのGet User Profile APIを呼び出し、手順10に進みます。呼び出しが失敗した場合は、手順11に進みます。
- Eメールアドレスを使用してアカウントを作成します。フロー終了
- アプリのデフォルトのアカウント登録またはサインインエクスペリエンスを表示します。
- ユーザー名とパスワードを使用してローカルアカウントで認可します。フロー終了
getUserData()を実装します。- ユーザーの同意ステータスを確認します。
- ユーザーが同意していない場合は、標準のアカウント作成プロセスを使用します。
- ユーザーが同意している場合は、次の手順に進みます。
- Appstore IAPのGet Access Token REST APIを使用して、アクセストークンを取得します。
- Appstore IAPのGet User Profile REST APIを使用して、ユーザーのプロフィールデータを取得します。
- ユーザーのEメールを取得します。
- ユーザーのEメールを使用して、サービスのアカウントを作成します。
手順8:LATを使用してクイック定期購入をテストする
Amazonのライブアプリテスト(LAT)サービスを利用すると、Amazonアプリストアでアプリを公開する前に、事前に設定したテスターグループにアプリを配信することができます。テスターは、Amazonの本番環境下で用意された全サービスを試して、アプリが適切に動作するかどうかを確認できます。クイック定期購入のためのLATの設定
ライブアプリテスト(LAT)でクイック定期購入をテストするには、まず、開発者コンソールでクイック定期購入を構成するの手順を使用して、開発者コンソールでLAT用のクイック定期購入を構成します。クイック定期購入は、次の画像に示すように、LAT用にのみ構成することも、公開アプリとLATアプリの両方のために構成することもできます。
LAT用にのみクイック定期購入を構成した場合でも、次の画像に示すように [アクション] > [公開中へ昇格] を選択すると、後から構成を公開中のアプリに昇格できます。
LATアプリ用のクイック定期購入の構成が公開アプリ用と異なる場合は、次の画像に示すように、LATアプリ用のクイック定期購入の詳細に [テスト] というラベルが表示されます。
クイック定期購入フローは、AmazonのECサイトまたはFireデバイスでテストできます。ライブアプリテストを開始するときに、テスターに招待Eメールを送信できます。テスターは、Amazonウェブサイトへのリンクが記載されたEメールを受信します。このサイトには、LATバージョンのアプリが登録されています。
ウェブサイトでのクイック定期購入のテスト
LATの招待Eメールから、対象のマーケットプレイスのAmazonウェブサイトを選択します。アプリの詳細ページで、定期購入オプションを選択します。これは、月額20.00 USDのように、定期購入型アイテムの期間に対する有料オプションとして表示されます。次に、配信先のデバイスを選択し、[Get App] をクリックします。デバイスでのクイック定期購入のテスト
デバイスでクイック定期購入のテストを始めるには、LATの招待Eメールまたはデバイスの通知を使用できます。 LATの招待Eメールからテストするには- 招待Eメールに記載されているリンクを使用して、Amazonウェブサイトのアプリの詳細ページに移動します。
- [App Only] オプションをクリックします。
-
アカウントに複数のデバイスが関連付けられている場合は、次の手順を実行します。
- [Deliver to <デバイス名>] で、デバイス名をクリックします。
- [Deliver to] ダイアログで、アプリを配信するデバイスを選択します。
- [Get App] をクリックします。
- Amazonアカウントに関連付けられているFire TVデバイスで、[マイアプリ・チャンネル] のアイコンをクリックします(アイコンはナビゲーションバーに3つの四角形とプラス記号で表示されます)。
- アプリアイコンにTESTバナーが表示されているLATバージョンのアプリを探します。アプリを表示するには、[アプリライブラリ] をクリックする必要のある場合があります。
- デバイスで、アプリアイコンをクリックしてアプリの詳細ページを開きます。
- [Subscription Options] をクリックし、アプリをダウンロードします。

