開発者コンソール

クイック定期購入のセットアップ

クイック定期購入のセットアップ

クイック定期購入の概要については、クイック定期購入の概要を参照してください。開始する準備ができたら、HAQMの担当者に連絡して、アカウントでクイック定期購入を有効にするように依頼します。次に、このページの手順に従います。

前提条件

クイック定期購入は、HAQMアプリストアのアプリ内課金(IAP)APIに含まれている機能です。

クイック定期購入を設定する前に、次の操作を行う必要があります。

  • Appstore SDKバージョン3.0.6以降と統合します。詳細については、Appstore SDKの統合を参照してください。
  • アクティブなアプリ内課金(IAP)アイテムを用意します。

考慮事項

作業を始める前に、以下の考慮事項と推奨事項を確認してください。

  • ダウンロードとインストールの時間を短縮するために、アプリのサイズを最適化してください。

    一般に、アプリのサイズは50MB以下に抑えることをお勧めします。アプリのサイズを小さくすると、入手しやすさが向上し、より多くのユーザーがインストールできるようになります。また、インストール時と初回使用時にかかる時間も短縮されます。さらに、アプリが小さいほど、ストレージが不足したときにアンインストールされる可能性が低くなります。

  • クイック定期購入を通じて提供するオファーは、有料の定期購入型アイテムに最も適しています。

    クイック定期購入は、無料体験を提供するアプリをサポートしています。ただし、ユーザー獲得のためにアプリでフリーミアムモデルを使用している場合は、クイック定期購入がアプリに最適であるとは限りません。フリーミアムモデルでは、アプリ自体は無料で提供され、ユーザーは有料の定期購入なしで基本的なコンテンツやサービスにアクセスできますが、追加コンテンツや高度な機能は有料で提供されます。

  • クイック定期購入による購入の処理はアプリの外部で行われます。

    クイック定期購入を使用しない標準のIAPフローでは、ユーザーはアプリにサインインし、アプリ内から購入を行います。一方、クイック定期購入では、ユーザーはまずアプリの外部で購入を行い、その後アプリを開いてサインインします。

    このため、クイック定期購入の実装には、標準のIAP実装との違いがいくつかあります。クイック定期購入を統合するには、このページの手順を使用してください。

手順1: 開発者コンソールでクイック定期購入を構成する

重要

クイック定期購入による購入に限定した定期購入型アイテムは提供しないでください。クイック定期購入を通じて提供する定期購入型アイテムのSKUは、アプリ内で既に提供しているSKUと同じでなければなりません。ただし、クイック定期購入にはオファーは最大4つという制限があるため、アプリ内で5つ以上の定期購入型アイテムを提供している場合は、4つの定期購入型アイテムのサブセットを選択する必要があります。

アプリのクイック定期購入を構成するには

  1. 開発者コンソールのダッシュボードに移動してアカウントにログインします。
  2. [アプリ&サービス] > [マイアプリ] を選択し、アプリを選択します。
  3. [アプリ内課金(IAP)アイテム] 列内のリンクをクリックして、[アプリ内課金(IAP)アイテム] 画面を開きます。
  4. [クイック定期購入を作成] を選択します。
  5. 次の画像のようなオーバーレイポップアップが表示されます。
    [クイック定期購入の新規作成]。[デフォルトの定期購入型アイテムを選択]。[期間を選択]。[サポート対象デバイスを選択]。使用可能なアクションボタンには、[キャンセル]、[テスト用のクイック定期購入を作成]、[テスト・公開用のクイック定期購入を作成] があります。
    [クイック定期購入の新規作成] ダイアログ

    [デフォルトの定期購入型アイテムを選択] ドロップダウンに、既存のアプリ内課金(IAP)定期購入型アイテムが表示されます。クイック定期購入を有効にする定期購入型アイテムを選択します。

  6. [期間を選択] ドロップダウンで、クイック定期購入の期間を選択します。
  7. クイック定期購入でほかの定期購入型アイテムを提供する場合は、[別のクイック定期購入を追加] をクリックします。
  8. クイック定期購入の対象デバイスを、チェックボックスをオンにして選択します。
  9. ライブアプリテスト(LAT)用にのみクイック定期購入を作成するか、LATと公開アプリの両方のためにクイック定期購入を作成するかを選択します。
    • LAT用にのみクイック定期購入を作成するには、[テスト用のクイック定期購入を作成] をクリックします。
    • LATと公開中のアプリの両方のためにクイック定期購入を作成するには、[テスト・公開用のクイック定期購入を作成] をクリックします。

クイック定期購入の作成後、アイテムを削除または変更する場合は、そのクイック定期購入アイテムの横にある [アクション] をクリックします。

手順2: セキュリティプロファイルを構成する

クイック定期購入を正しく動作させるには、アプリのセキュリティプロファイルを設定する必要があります。セキュリティプロファイルは、HAQMから開発者に安全にユーザーデータを共有することを可能にし、開発者が自動的にアカウントを作成してユーザーをサインインできるようにするために不可欠なものです。

セキュリティプロファイルにより、セキュリティ認証情報を含むHAQMデータを1つ以上のアプリに関連付けることができます。たとえば、「マイゲーム - 無料」と「マイゲーム - HD」という2つのアプリがある場合に、同じセキュリティプロファイルを使用してデータを共有できます。セキュリティプロファイルには、アプリまたはアプリファミリーを識別できる名前を付けてください。詳細については、セキュリティプロファイルを参照してください。

アプリのセキュリティプロファイルを構成するには

  1. 開発者コンソールのダッシュボードに移動してアカウントにログインします。
  2. [アプリ&サービス] > [マイアプリ] を選択し、アプリを選択します。
  3. [アプリサービス] をクリックし、[セキュリティプロファイル] セクションまでスクロールします。
  4. [既存のセキュリティプロファイルを選択、または新規作成する] をクリックしてオプションを展開します。
  5. ドロップダウンを使用して、このアプリにマップするセキュリティプロファイルを選択し、[セキュリティプロファイルを有効化] をクリックします。または、[セキュリティプロファイルを新規作成] をクリックして新しいセキュリティプロファイルを作成することもできます。

手順3: getPurchaseUpdatesを実装する

getPurchaseUpdates()メソッドはユーザーのレシートを取得します。ユーザーがクイック定期購入を通じて購入した場合、購入処理はアプリの外部で行われます。このため、クイック定期購入では、アプリからgetPurchaseUpdatesを呼び出してユーザーの購入ステータスを検証する必要があります。この呼び出しにより、アプリが開いたときに、購入されたコンテンツがユーザーに確実に付与されます。getPurchaseUpdates()を適切に実装しないと、ユーザーが購入したコンテンツにアクセスできなくなる可能性があります。

getPurchaseUpdates()は、onResume()メソッド内で呼び出します。getPurchaseUpdates()メソッドは、resetというブール型のパラメーターを1つ受け取ります。resetfalseに設定すると、前回の呼び出し以降に発行された新しいレシートのみが返されます。resettrueに設定すると、このユーザーのレシートがすべて返されます。

デバイスキャッシュに関する注意事項

getPurchaseUpdates()メソッドの動作は、クライアント(デバイス)キャッシュに存在するデータによって異なります。ユーザーが新しいデバイスからサインインした場合や、現在のデバイスのキャッシュを消去した場合は、resetの値にかかわらず、初回のgetPurchaseUpdates()の呼び出しからはすべてのレシートが返されます。後続の呼び出しでresetfalseに設定すると、前回の呼び出し以降の最新のレシートのみが返されます。

ユーザーが別のデバイスにサインインした場合や、ユーザーがデバイスをリセットした場合など、一部のシナリオではクライアントデバイス上のデータが消去されることがあります。このようなシナリオが発生すると、getPurchaseUpdates()から過去のすべてのレシートが返されます。アプリでは、新しいレシートと古いレシートを識別し、それぞれを適切に処理できる必要があります。

次のコードは、getPurchaseUpdates()メソッドを呼び出す方法を示しています。

@Override
protected void onResume() {
  super.onResume();

//...

  PurchasingService.getUserData();

//...

  PurchasingService.getPurchaseUpdates(false);
}

getPurchaseUpdates()メソッドの統合方法の詳細については、IAP APIのドキュメントのgetPurchaseUpdatesメソッドの実装を参照してください。

実装要件

getPurchaseUpdates()メソッドを正しく実装するには、以下の要件に従ってください。

  • AndroidアクティビティのonResume()ライフサイクルメソッドで、getPurchaseUpdates()を呼び出す必要があります。
  • 最新のレシートのみを取得するために、onResume()getPurchaseUpdates()を呼び出すときは常にfalseフラグを使用します。trueフラグを使用すると、レシートのすべての履歴が返されるため、レスポンスを処理するためのフィルタリングロジックを追加することが必要になります。
  • アプリに [購入タイトルを復元] オプションを追加します。ユーザーがこのオプションを選択したら、getPurchaseUpdates()trueフラグと共に呼び出します。
  • getPurchaseUpdates()を通じて受け取ったレシートは常に保持し、アプリのログインIDにマッピングする必要があります。このマッピングを使用して、ユーザーがアプリを開いたときに定期購入済みのコンテンツのロックを解除します。

手順4: RVSと統合する

レシート検証サービス(RVS)を使用すると、アプリのユーザーが行った購入を検証できます。RVSの詳細については、 Appstore SDK IAP用レシート検証サービスを参照してください。RVSサーバーにリクエストを送信すると、返されるJSONレスポンスにはpurchaseMetadataMapフィールドが含まれます。クイック定期購入を使用して購入を開始した場合、次の例のように、purchaseMetadataMap{"QuickSubscribe":true}となります。

{
  "autoRenewing": true,
  "betaProduct": false,
  "binCountryCode": null,
  "cancelDate": 1641131573000,
  "cancelReason": 2,
  "countryCode": "US",
  "deferredDate": null,
  "deferredSku": null,
  "freeTrialEndDate": null,
  "fulfillmentDate": 1641131345000,
  "fulfillmentResult": "FULFILLED",
  "gracePeriodEndDate": null,
  "parentProductId": null,
  "productId": "IntroFreeTrial.sku",
  "productType": "SUBSCRIPTION",
  "promotions": null,
  "purchaseDate": 1641131345000,
  "purchaseMetadataMap": {
      "QuickSubscribe": "true"
  },
  "quantity": null,
  "receiptId": "k9om1rUS7gZJIg8RMfw7AlbxA3aP56ay-vdgeLU40zw=:3:11",
  "renewalDate": null,
  "term": "1 Month",
  "termSku": null,
  "testTransaction": false
}

購入がクイック定期購入を使用して開始されたものでない場合、purchaseMetadataMapはnullになります。レスポンスオブジェクトの全フィールドについて次の表で説明します。

フィールド データ型 説明
autoRenewing ブール型 ユーザーの定期購入が自動更新されるかどうかを示します。
betaProduct ブール型 購入商品がライブアプリテスト商品かどうかを示します。
cancelDate 長整数 購入をキャンセルした日、または定期購入の期限が切れた日。購入がキャンセルされていない場合、このフィールドはnullになります。時間はミリ秒単位です。
cancelReason 整数 商品がキャンセルされた理由を示します。有効な値は、null、0、1、2のいずれかです。それぞれの整数はキャンセルの理由を表します。
null - 購入がキャンセルされていない。
0 - 現時点ではキャンセル理由が特定されていないため、後で表示される。
1 - ユーザーが注文をキャンセルした。
2 - 購入がHAQMのシステムによってキャンセルされた(定期購入型アイテム購入時のユーザーの支払いが無効で、その購入が猶予期間内に完了しなかった場合など)。このコードは、HAQMカスタマーサポートがユーザーのリクエストに応じて注文をキャンセルした場合にも返されます。
countryCode 文字列 HAQMのレコードに登録されているユーザーの居住国を示します。
freeTrialEndDate 長整数 定期購入が無料体験期間中であることを示します。定期購入の無料体験期間の終了日をエポック(ミリ秒)単位で提供します。定期購入が無料体験期間中でない場合、このフィールドはnullになります。
fulfillmentDate 長整数 定期購入でアイテム付与完了が通知された日付。エポックからのミリ秒数として格納されます。定期購入のアイテム付与が確認されていない場合はnullになります。消費型アイテムと非消費型アイテムでは常にnullです。
fulfillmentResult 文字列 定期購入でのアイテム付与のステータス。有効な値は次のとおりです。
  • FULFILLED: コンテンツを提供し、ユーザーがそのコンテンツを使用しました。
  • UNAVAILABLE: ユーザーにコンテンツを提供できませんでした。
定期購入のアイテム付与が確認されていない場合はnullになります。消費型アイテムと非消費型アイテムでは常にnullです。
gracePeriodEndDate 長整数 定期購入が猶予期間中であることを示します。定期購入の猶予期間の終了日をエポック(ミリ秒)単位で提供します。定期購入が猶予期間中でない場合、このフィールドはnullになります。
parentProductId 文字列 null。将来使用するために予約されています。
productId 文字列 アプリ内でこのアイテムに対して定義したSKU。
productType 文字列 購入された商品のタイプ。有効な商品タイプは、CONSUMABLE(消費型アイテム)、SUBSCRIPTION(定期購入型アイテム)、ENTITLED(非消費型アイテム)です。
promotions List<Promotion> 定期購入型アイテムのプロモーション価格またはリテンションオファーの詳細。プロモーションがない場合はnullになります。RVSのプロモーションを参照してください。
purchaseDate 長整数 購入日。エポックからのミリ秒数として格納されます。定期購入型アイテムの場合、purchaseDateは最初の購入日を表します。それ以降の更新日を表すものではありません。
purchaseMetadataMap Map <String, String> 購入がクイック定期購入を通じて開始された場合、値は{"QuickSubscribe":"true"}になります。それ以外の場合はnullになります。
quantity 整数 購入された数量。常にnullまたは1になります。
receiptId 文字列 購入のグローバルに一意の識別子。
renewalDate 長整数 定期購入型アイテムの更新が必要となる日付。エポックからのミリ秒で計算されます。
term 文字列 定期購入型IAPアイテムの有効期間(期間は購入日から始まります)。数字と期間(日、週、月、年)で構成されます(「1週間」、「2か月」など)。
termSku 文字列 定期購入期間に対応する一意のSKU。
testTransaction ブール型 この購入が、HAQMによる公開・テストプロセスの一部として実行されたものかどうかを示します。

手順5: アイテム付与の結果をHAQMに送信する

アイテム付与の結果を送信すると、ユーザーが購入したコンテンツにアクセスできるかどうかをHAQM側で確認できるようになります。必ずアイテム付与の結果をHAQMに送信してください。これには、Appstore SDKに含まれているnotifyFulfillment()メソッドを使用します。アイテム付与の結果を送信しないと、HAQMは、付与が完了していない定期購入型アイテムの料金をユーザーが払い続けることがないように、自動的に定期購入型アイテムをキャンセルします。

ユーザーがサインインした後、定期購入型アイテムが付与されたら、ステータスをFULFILLEDとしてnotifyFulfillment()を呼び出します。ユーザーが既にHAQM以外から入手した定期購入型アイテムを所有している場合は、ステータスをUNAVAILABLEとしてnotifyFulfillment()を呼び出して、ユーザーはサインインしているものの購入は適用できないことを通知します。notifyFulfillment()メソッドの詳細については、HAQMへのアイテム付与の結果の送信とユーザーへのアイテム付与を参照してください。

既にAcknowledge Receipt APIを統合している場合は、引き続きnotifyFulfillment()メソッドの代わりに使用できます。アイテム付与の結果をHAQMに通知するには、アプリ内でnotifyFulfillment()メソッドかAcknowledge Receipt APIのいずれかを使用する必要があります。

実装要件

notifyFulfillment()メソッドを正しく実装するには、以下の要件に従ってください。

  • アイテム付与ステータスをHAQMに通知するために、PurchaseUpdatesResponseオブジェクトからレシートが処理されたら、そのたびにnotifyFulfillment()を呼び出す必要があります。
  • notifyFulfillment()を呼び出すときは、以下の要件に従います。
    • 次の条件に該当する場合は、FULFILLEDを送信します。
      • ユーザーが正常にレシートにマッピングされ、ユーザーの定期購入済みコンテンツのロックが解除された。
    • 次のいずれかの状況が発生した場合は、UNAVAILABLEを送信します。
      • ユーザーがHAQM以外で購入した既存の定期購入型アイテムを所有している。
      • ユーザーにサービスのアカウントにサインアップする資格がない。

自動キャンセル

HAQMでは、付与が完了していない定期購入型アイテムの料金をユーザーが払い続けなくて済むように、自動キャンセルを使用しています。購入から14日以内にnotifyFulfillment()またはAcknowledge Receipt APIを使用して購入レシートのステータスをFULFILLEDに更新しないと、HAQMアプリストアは自動的に定期購入型アイテムをキャンセルし、返金を行います。

Acknowledge Receipt API

手順6: RTNと統合する

クイック定期購入では、ユーザーはアプリの外部でHAQMを通じてアプリを定期購入します。そのため、ユーザーの購入ステータスに関する情報の一部がアプリに保存されない可能性があります。getPurchaseUpdates()メソッドは、アプリが開かれている場合にのみデータを送信します。

リアルタイム通知(RTN)は、アプリの外部で発生するトランザクションも含め、すべてのトランザクションの購入情報を提供します。HAQMのRTNサーバーから購入通知を受信したら、レシート検証サービス(RVS)を使用してレシートを検証します。

RTNを使用すると、ユーザーが購入、更新、キャンセルなどを行ったときに、ユーザーの定期購入イベントに関する更新通知がHAQMから届きます。この情報はクイック定期購入を使用するアプリにとって重要です。これにより、ユーザーの定期購入型アイテムに関する最新情報を常にアプリに反映できます。

RTNの設定方法の詳細については、リアルタイム通知(RTN)を使用する方法を参照してください。

手順7: ワンクリックアカウント情報共有を統合する

アプリをワンクリックアカウント情報共有機能と統合するには、ワンクリックアカウント情報共有の統合ガイドに従います。

次の図は、ワンクリックアカウント情報共有を使用したクイック定期購入のコードフローを示しています。

説明テキストを参照してください。
クリックして拡大

ワンクリックアカウント情報共有を設定するための大まかな手順は次のとおりです。

  1. アプリのマニフェストを更新します。
  2. getUserData()を実装します。
  3. ユーザーの同意ステータスを確認します。
    • ユーザーが同意していない場合は、標準のアカウント作成プロセスを使用します。
    • ユーザーが同意している場合は、次の手順に進みます。
  4. Appstore SDKのGet Access Token REST APIを使用して、アクセストークンを取得します。
  5. Appstore SDKのGet User Profile REST APIを使用して、ユーザーのプロフィールデータを取得します。
    • ユーザーのEメールを取得します。
    • ユーザーのEメールを使用して、サービスのアカウントを作成します。

手順8: LATを使用してクイック定期購入をテストする

HAQMのライブアプリテスト(LAT)サービスを利用すると、HAQMアプリストアでアプリを公開する前に、事前に設定したテスターグループにアプリを配信することができます。テスターは、HAQMの本番環境下で用意された全サービスを試して、アプリが適切に動作するかどうかを確認できます。

クイック定期購入のためのLATの設定

ライブアプリテスト(LAT)でクイック定期購入をテストするには、まず、開発者コンソールでクイック定期購入を構成するの手順を使用して、開発者コンソールでLAT用のクイック定期購入を構成します。クイック定期購入は、次の画像に示すように、LAT用にのみ構成することも、公開アプリとLATアプリの両方のために構成することもできます。

LAT用のみの場合は、[テスト用のクイック定期購入を作成] をクリックします。LATおよび公開用の場合は、[テスト・公開用のクイック定期購入を作成] クリックします。

LAT用にのみクイック定期購入を構成した場合でも、次の画像に示すように [アクション] > [公開中へ昇格] を選択すると、後から構成を公開中のアプリに昇格できます。

[アクション] メニューと [編集]、[オフにする]、[公開中へ昇格] オプション

LATアプリ用のクイック定期購入の構成が公開アプリ用と異なる場合は、次の画像に示すように、LATアプリ用のクイック定期購入の詳細に [テスト] というラベルが表示されます。

アプリ内課金(IAP)アイテムの上部に表示された [テスト] ラベル

クイック定期購入フローは、HAQMのECサイトまたはFireデバイスでテストできます。ライブアプリテストを開始するときに、テスターに招待Eメールを送信できます。テスターは、HAQMウェブサイトへのリンクが記載されたEメールを受信します。このサイトには、LATバージョンのアプリが登録されています。

ウェブサイトでのクイック定期購入のテスト

LATの招待Eメールから、対象のマーケットプレイスのHAQMウェブサイトを選択します。アプリの詳細ページで、定期購入オプションを選択します。これは、月額20.00 USDのように、定期購入型アイテムの期間に対する有料オプションとして表示されます。次に、配信先のデバイスを選択し、[Get App] をクリックします。

デバイスでのクイック定期購入のテスト

デバイスでクイック定期購入のテストを開始するには、LATの招待Eメールまたはデバイスの通知を使用できます。

LATの招待Eメールからテストするには

  1. 招待Eメールに記載されているリンクを使用して、HAQMウェブサイトのアプリの詳細ページに移動します。
  2. [App Only] オプションをクリックします。
  3. アカウントに複数のデバイスが関連付けられている場合は、次の手順を実行します。
    1. [Deliver to <デバイス名>] で、デバイス名をクリックします。
    2. [Deliver to] ダイアログで、アプリを配信するデバイスを選択します。
  4. [Get App] をクリックします。
  5. HAQMアカウントに関連付けられているFire TVデバイスで、[マイアプリ・チャンネル] のアイコンをクリックします(アイコンはナビゲーションバーに3つの四角形とプラス記号で表示されます)。
  6. アプリアイコンにTESTバナーが表示されているLATバージョンのアプリを探します。アプリを表示するには、[アプリライブラリ] をクリックする必要のある場合があります。
  7. デバイスで、アプリアイコンをクリックしてアプリの詳細ページを開きます。
  8. [Subscription Options] をクリックし、アプリをダウンロードします。

通知からテストするには

LATの招待Eメールを送信すると、テスターEメールに関連付けられているテストデバイスに通知が届きます。通知が表示されたときに開くと、LATアプリの詳細ページに移動します。この通知は5~10秒間表示されます。通知が最初に表示されたときに見逃した場合は、設定アイコン(歯車アイコン)をクリックし、[通知] をクリックすることで確認できます。ここで通知を読み、アプリの詳細ページに移動できます。[Subscription Options] をクリックし、アプリをダウンロードします。

重要

  • LATによるクイック定期購入のテストは、以下の場合はサポートされません。
    • 配信先の特定のデバイスを選択するときに、ウェブサイトで [App Only] オプションを使用した場合。
    • デバイスで [App Only] オプションを使用した場合。
  • クイック定期購入以外の目的でLATを使用してアプリをテストする場合は、[App Only] オプションを使用して、アプリを配信する特定のデバイスを選択できます。

  • クイック定期購入のテスト中は、タイムラインが短縮された定期購入型アイテムをオフにしてください。

  • テストアカウントのクイック定期購入をリセットするには、開発者コンソールにアクセスしてLAT用の定期購入型アイテムをリセットします。詳細については、アプリ内課金(IAP)アイテムのリセット(LAT内の全テスターを対象)または個々のテスターの管理を参照してください。

  • 14日間のキャンセル期間をテスト用に1日に短縮する必要がある場合は、HAQMの担当者にお問い合わせください。

Last updated: 2025年4月7日