開発者コンソール

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

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

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

前提条件

Appstore SDKバージョン3.0.6以降と統合します。詳細については、Appstore SDKの統合を参照してください。

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

重要

ユーザーがアプリ内で購入できる定期購入型アイテムは、クイック定期購入でも購入できる必要があります。また、クイック定期購入で購入できる定期購入型アイテムは、アプリ内でも購入できる必要があります。ただし、アプリ内で購入できる定期購入型アイテムが5つ以上ある場合は除きます。4つの定期購入型アイテムを選択し、クイック定期購入で提供する必要があります。

アプリのクイック定期購入を設定するには、次の手順を実行します。

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

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

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

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

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

アプリのセキュリティプロファイルを設定するには、次の手順を実行します。

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

手順3: getPurchaseUpdatesを実装する

getPurchaseUpdates()メソッドを使用すると、ユーザーのレシートを取得できます。クイック定期購入は、getPurchaseUpdates()の情報を使用してユーザーの購入ステータスを検証し、使用権限のあるコンテンツにユーザーがアクセスできるようにします。

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

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

//...

  PurchasingService.getUserData();

//...

  PurchasingService.getPurchaseUpdates(false);
}

getPurchaseUpdates()メソッドの統合方法の詳細については、IAP APIに関する次のテクニカルドキュメントを参照してください。

実装要件

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

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

手順4: RVSと統合する

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

{
  "autoRenewing": true,
  "betaProduct": false,
  "binCountryCode": null,
  "cancelDate": 1641131573000,
  "cancelReason": 2,
  "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 - 購入がAmazonのシステムによってキャンセルされた(定期購入型アイテム購入時のユーザーの支払いが無効で、その購入が猶予期間内に完了しなかった場合など)。このコードは、Amazonカスタマーサポートがユーザーのリクエストに応じて注文をキャンセルした場合にも返されます。
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 ブール型 この購入が、Amazonによる公開・テストプロセスの一部として実行されたものかどうかを示します。

RVSの詳細については、 Appstore SDK IAP用レシート検証サービスを参照してください。

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

アイテム付与の結果を送信すると、ユーザーが購入したコンテンツにアクセスできるかどうかをAmazon側で確認できるようになります。必ずアイテム付与の結果をAmazonに送信してください。これには、Appstore SDKに含まれているnotifyFulfillment()メソッドを使用します。

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

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

実装要件

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

  • ユーザーがアプリを開いてコンテンツにアクセスしようとするたびに、notifyFulfillment()を呼び出す必要があります。
  • 正常にユーザーをレシートにマッピングし、ユーザーの定期購入済みコンテンツのロックを解除した場合は、FULFILLEDステータスを指定してnotifyFulfillment()を呼び出す必要があります。
  • ユーザーが既に定期購入型アイテムを所有している場合は、UNAVAILABLEステータスを指定してnotifyFulfillment()を呼び出す必要があります。
  • 問題が発生したためにUNAVAILABLEを指定してnotifyFulfillment()を呼び出した場合は、ユーザーとレシートのマッピングに成功し、ユーザーの定期購入済みコンテンツのロックを解除したときに、FULFILLEDステータスを指定してnotifyFulfillment()を呼び出す必要があります。

Acknowledge Receipt API

手順6: RTNと統合する

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

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

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

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

以下のガイドを使用して、アプリにワンクリックアカウント情報共有機能を統合します。

アプリのマニフェストの更新

アプリがワンクリックアカウント情報共有機能をサポートしていることをAmazonアプリストアに示すために、次のコードを使用してアプリのマニフェストを更新します。

<uses-feature android:name="amazon.lwa.quicksignup.supported"/>

getUserDataの変更の実装

ユーザーがAmazonアカウントの詳細をアプリと共有することに明示的に同意したかどうかを判断するには、アプリの初期化時に次のプロセスを実装する必要があります。

アプリのメインアクティビティのonCreate () メソッドで、

  • 新しいUserDataRequestオブジェクトを作成し、ユーザーのプロファイル同意ステータス情報をリクエストするように設定します。同意ステータスをリクエストするようにUserDataRequestオブジェクトを設定するには、setFetchUserProfileAccessConsentStatus()メソッドをtrueに設定します。
  • getUserData()メソッドを呼び出し、設定されたUserDataRequestオブジェクトをそのメソッドに渡します。

次の例は、UserDataRequestオブジェクトを作成して getUserData()に渡す方法を示しています。

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    
    //...
    
    // 登録するPurchasingListenerの参照を渡します。
    PurchasingService.registerListener(this.getApplicationContext(), purchasingListener);
    
    // 登録するUserProfileAccessListenerの参照を渡します
    PurchasingService.registerUserProfileAccessListener(this.getApplicationContext(), userProfileAccessListener);
     
    // isLoggedIn()内には、ユーザーのログインステータスを特定するロジックを実装します。
    if (!isLoggedIn()) {
        PurchasingService.getUserData(UserDataRequest.newBuilder().setFetchUserProfileAccessConsentStatus(true).build());
    }
    //...
}

onUserDataResponse ()コールバックメソッドを実装して、ユーザーの同意データを含むUserDataResponseオブジェクトを取得します。次のコードは、UserDataResponseオブジェクトから受け取った同意データを処理する方法を示しています。

@Override
public void onUserDataResponse(final UserDataResponse response) {

    UserDataResponse.RequestStatus status = response.getRequestStatus();

    switch (status) {
        case SUCCESSFUL:
            if (UserProfileAccessConsentStatus.CONSENTED.equals(response.getUserData().getUserProfileAccessConsentStatus())) {
                // カスタムローダー画面またはスピナーを起動します。
                PurchasingService.requestUserProfileAccess();
            }
            break;

        case FAILED:
        case NOT_SUPPORTED:
            // 失敗時の処理を適切に行います。
            break;
    }
}

ユーザーが同意した場合、UserDataオブジェクトのuserProfileAccessConsentStatusのステータスはCONSENTEDになります。ユーザーが同意していない場合、または同意トークンの有効期限が切れている場合、userProfileAccessConsentStatusのステータスはUNAVAILABLEになります。

ユーザーが同意した場合、アプリはrequestUserProfileAccess()メソッドを呼び出し、レスポンスオブジェクトにある認可コードでサーバーを更新する必要があります。次に、Appstore SDKが提供するREST APIを使用して、アクセストークンとユーザープロフィールを取得します。共有されたユーザー情報を使用して、システムにアカウントを作成します。

次のコードは、UserProfileAccessResponseオブジェクトからユーザープロフィールのアクセス認可コードを抽出する方法を示しています。

@Override
public void onUserProfileAccessResponse(final UserProfileAccessResponse response) {
    
    UserProfileAccessResponse.RequestStatus status = response.getRequestStatus();
    
    switch (status) {
        case SUCCESSFUL:
            // ここでuserProfileAccessAuthCodeを使用してサーバーを更新し、
            // Appstore SDK REST APIとさらに連携して、アクセストークンとユーザープロフィールを取得する必要があります。
            final String userProfileAccessAuthCode = response.getUserProfileAccessAuthCode();
            break;
    
        case FAILED:
        case NOT_SUPPORTED:
            // 失敗時の処理を適切に行います。
            break;
    } 
}

ユーザーが同意しない場合は、独自のサインイン画面を表示します。これにより、ユーザーはキーボードで認証情報を入力してアプリにサインインできます。

Get Access Token API

Appstore SDKには、アクセストークンを取得するためのGet Access Token REST APIが用意されています。このセクションでは、リクエスト、レスポンス、エラーについて説明します。

アクセストークンリクエスト

認可レスポンスと有効な認可コードを受け取ったアプリは、そのコードを使用してアクセストークンを取得できます。アクセストークンがあれば、クライアントはユーザープロフィールを読み取ることができます。

Get Access Token APIは、次の例に示すように、GETリクエストではなくPOSTリクエストを使用する必要があります。

POST https://appstore-sdk.amazon.com/version/1.0/auth/o2/token?
grant_type=authorization_code
&code=SplxlOBezQQYbYS6WxSbIA
&client_id=foodev
&client_secret=foosecret

次の表では、アクセストークンリクエストのパラメーターについて説明します。

アクセストークンリクエストのパラメーター
リクエストパラメーター 説明
grant_type 必須。リクエストされたアクセスグラントのタイプ。authorization_codeを指定する必要があります。
code 必須。requestUserProfileAccess()メソッドから返された認可コード。
client_id 必須。クライアント識別子。
client_secret 必須。登録時にクライアントに割り当てられたシークレット値。クライアントシークレットはウェブページに確実に保存できないため、ブラウザベースのアプリではクライアントシークレットを使用しないでください。

アクセストークンレスポンス

ユーザーデータにアクセスするには、Appstore SDKのGet User Profile APIにアクセストークンを提供する必要があります。アクセストークンは350文字以上の英数字のコードで、最大サイズは2,048バイトです。アクセストークンはAtza|という文字列で始まります。

レスポンスパラメーターは、application/jsonメディアタイプを使用してエンコードされます。詳細については、RFC4627(英語のみ)を参照してください。以下は、アクセストークンリクエストからのレスポンスの例です。

{
"access_token":"Atza|IQEBLjAsAhRmHjNgHpi0U-Dme37rR6CuUpSR...",
"token_type":"bearer",
"expires_in":3600,
"refresh_token":"Atzr|IQEBLzAtAhRPpMJxdwVz2Nn6f2y-tpJX2DeX..."
}

次の表では、アクセストークンレスポンスのパラメーターについて説明します。

アクセストークンレスポンスのパラメーター
レスポンスパラメーター 説明
access_token ユーザーアカウントのアクセストークン。最大サイズは2,048バイトです。
token_type 返されたトークンのタイプ。値はbearerです。
expires_in アクセストークンが無効になるまでの秒数。
refresh_token 新しいアクセストークンのリクエストに使用できるリフレッシュトークン。最大サイズは2,048バイトです。

アクセストークンはBearerトークンであり、別のクライアントでも使用できます。詳細については、The OAuth 2.0 Authorization Framework: Bearer Token Usage(英語のみ)を参照してください。

アクセストークンエラー

エラーによっては、認可サービスがHTTP 401 (Unauthorized)のステータスコードを返す場合があります。これには、クライアントが認可ヘッダーでclient_idclient_secretの値を渡したものの、クライアントが認証されなかった場合などが該当します。

次の表では、失敗したレスポンスのエラーパラメーターについて説明します。

アクセストークンのエラーレスポンスパラメーター
エラーパラメーター 説明
error エラーコード値を表すASCIIエラーコード。
error_description クライアント開発者が判読できる形でエラーに関する情報を記載したASCII文字列。
request_id アクセストークンリクエストに関連付けられたID。

errorの値として次のエラーコードが返される可能性があります。

アクセストークンのエラーレスポンスコード
エラーコード 説明
invalid_request リクエストに必須パラメーターがない、値が無効である、形式に誤りがあるのいずれかです。
invalid_client クライアントの認証に失敗しました。これは、認可サービスがHTTP 401 (Unauthorized)ステータスコードを返さない場合に使用されます。
invalid_grant 認可コードが無効、期限切れ、取り消し済みであるか、または別のclient_idに対して発行されています。
unauthorized_client 認可コードを使用する権限がクライアントにありません。原因として、code_verifierが無効である可能性があります。
unsupported_grant_type クライアントが指定したtoken_typeに誤りがあります。
ServerError サーバーでランタイムエラーが発生しました。

Get User Profile API

Appstore SDKには、ユーザープロフィールデータを取得するためのGet User Profile REST APIが用意されています。このセクションでは、リクエスト、レスポンス、エラーについて説明します。

ユーザープロフィールのリクエスト

承認されたユーザープロフィールデータにアクセスするには、Get User Profile APIを使用してアクセストークンをAmazonアプリストアに送信します。Get User Profile APIは、HTTPS GETリクエストで、Get Access Token APIから受け取ったアクセストークンを唯一のパラメーターとして使用します。

次の例は、ユーザープロフィールデータを取得するGETリクエストを示しています。

GET https://appstore-sdk.amazon.com/version/1.0/user/profile?
access_token=Atza|IQEBLjAsAhRmHjNgHpi0U-Dme37rR6CuUpSR...
ユーザープロフィールリクエストのパラメーター
リクエストパラメーター 説明
access_token 必須。Get Access Token APIから受け取ったアクセストークン。

ユーザープロフィールのレスポンス

アクセストークンが有効な場合は、次の例のように、HTTPレスポンスとしてユーザーのプロフィールデータがJSONで返されます。

{
"user_id": "amznl.account.K2LI23KL2LK2",
"email":"mhashimoto-04@plaxo.com",
"name" :"Mork Hashimoto",
"postal_code": "98052"
}

プロフィールリクエストを処理できない場合は、HTTPエラーが返されます。このとき、次の例のように、詳細情報を含むJSONペイロードが返されることがあります。

{
"error": "コンピューターで解読できるエラーコード",
"error_description": "human-readable error description",
"request_id": "bef0c2f8-e292-4l96-8c95-8833fbd559df"
}

次の表に、ユーザープロフィールリクエストが失敗した場合に返される可能性のあるエラーコードを示します。

ユーザープロフィールのエラーレスポンスコード
ステータス エラーコード 説明
200 成功 リクエストは成功しました。
400 invalid_request リクエストに必須パラメーターが含まれていないか、形式に誤りがあります。
400 invalid_token 提供されたアクセストークンは、期限切れ、取り消し済み、誤った形式であるか、その他の理由により無効です。
401 insufficient_scope 提供されたアクセストークンには必要なスコープへのアクセス権がありません。
500 ServerError サーバーでランタイムエラーが発生しました。

フロー図

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

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

アカウント設定に関するベストプラクティス

ユーザーのアカウントを設定するときは、以下のベストプラクティスに従ってください。

  • getUserData()レスポンスのUserProfileAccessConsentStatusの値がCONSENTEDの場合は、次の操作を行います。
    • Appstore SDKのGet User Profile APIからユーザー情報を取得します。この情報を使用して、一時パスワードでログインアカウントを作成します。パスワードのリセットや追加情報をユーザーに要求することなく、ユーザーをアプリにサインインさせます。
    • 後で、パスワードをリセットするようにEメールでユーザーに通知します。
  • UserProfileAccessConsentStatusUNAVAILABLEの場合は、アプリのデフォルトの登録エクスペリエンスをユーザーに表示します。

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 招待Eメールに記載されているリンクを使用して、Amazonウェブサイトのアプリの詳細ページに移動します。
  2. [App Only] オプションをクリックします。
  3. [配信先:] ドロップダウンメニューで、[Cloud Only] をクリックします。
  4. [Get App] をクリックします。
  5. Amazonアカウントに関連付けられている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内の全テスターを対象)または個々のテスターの管理を参照してください。

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

Last updated: 2024年12月18日