Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

定期購入を販売する

このトピックでは、更新や有効期限など、定期購入のライフサイクル イベントを処理する方法について説明します。また、プロモーションの提供やユーザーによる定期購入の管理など、追加の定期購入機能についても説明します。

このトピックを読む前に、Google Play Billing Library をアプリに統合して、アプリ内のアイテムの販売と管理に関する一般的な手順をご確認ください。

アプリの定期購入アイテムを構成していない場合は、アイテムを作成して構成するをご覧ください。

定期購入ライフサイクルを処理する

定期購入の状態はライフサイクルを通じてさまざまに変化する場合があり、アプリはその変更に対応していく必要があります。定期購入者の状態を確認するために、アプリでは Google Play Billing Library で BillingClient.queryPurchases() を使用するか、Google Play Developer API で Purchases.subscriptions:get を使用して、クエリを行うことができます。

BillingClient.queryPurchases() Purchases.subscriptions:get
State Is returned? isAutoRenewal Is returned? expiryTimeMillis paymentState autoRenewing
有効 True 将来 1(支払いが受領済み) True
解約済み False 将来 1(支払いが受領済み) False
猶予期間中 True 将来 0(支払いが保留中) True
保留中 × なし 過去 0(支払いが保留中) True
一時停止 × なし 過去 1(支払いが受領済み) True
期限切れ × なし 過去 1(支払いが受領済み) False

定期購入のステータスが安全なバックエンド サーバーに保存されている場合、アプリではリアルタイム デベロッパー通知を使用してステータス変更をリッスンし、ステータスが常に同期されるようにする必要があります。更新や解約など、定期購入のステータスに影響するイベントに対しては、SubscriptionNotification が送信されます。リアルタイム デベロッパー通知を受信したら、Developer API を呼び出して完全なステータスを取得し、バックエンド ステータスを更新する必要があります。リアルタイム デベロッパー通知は、定期購入のステータス変更だけを通知するものです。定期購入の全体的なステータスの詳細情報は通知されません。

アプリで処理する必要があるステータスの変更については、以降のセクションで説明します。

新しい定期購入

新しい購入の処理の推奨事項に沿うようにしてください。定期購入が購入されると BillingClient.queryPurchases() によって定期購入が返され、SUBSCRIPTION_PURCHASED 通知が送信されます。この通知を受け取った場合、アプリは Google Play Developer API に照会して定期購入の最新のステータスを取得する必要があります。定期購入リソースは次のようになります。

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": next_renewal_date,
  "autoRenewing": true,
  ...
  "paymentState": 1  # Payment received
}

更新

正常に更新されると、定期購入は引き続き BillingClient.queryPurchases() によって返されます。

定期購入が更新されると SUBSCRIPTION_RENEWED 通知も送信されます。アプリでは、ユーザーに定期購入の権利があることを確認してから、Google Play Developer API から返された定期購入リソースにある新しい expiryTimeMillis を使用して、定期購入のステータスを更新する必要があります。定期購入リソースは次のようになります。

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": updated_expiration_time,
  "autoRenewing": true,
  ...
  "paymentState": 1  # Payment received
}

有効期限

定期購入の有効期限が切れると、BillingClient.queryPurchases() で定期購入が返されなくなり、ユーザーは定期購入にアクセスできなくなります。

定期購入の有効期限が切れると、SUBSCRIPTION_EXPIRED 通知も送信されます。この通知を受け取った場合、アプリは Google Play Developer API に照会して定期購入の最新のステータスを取得する必要があります。定期購入リソースは次のようになります。

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": expiry_time_in_past,
  "autoRenewing": false,
  ...
  "paymentState": 1  # Payment received
}

解約

ユーザーは、手動で Play ストアから定期購入を解約したり、アカウントの一時停止後に再開を希望しない場合は自動的に定期購入を解約したりすることができます。定期購入を解約したユーザーは、現在の請求期間が終了するまでコンテンツにアクセスできます。請求期間が終了すると、アクセスできなくなります。

定期購入が解約されても期限切れでない場合は、BillingClient.queryPurchases() から返されます。定期購入を解約すると、SUBSCRIPTION_CANCELLED 通知がトリガーされます。この通知を受け取った場合、Google Play Developer API から返された定期購入リソースには autoRenewing = false が含まれ、expiryTimeMillis にはユーザーが定期購入にアクセスできなくなる日付が含まれます。expiryTimeMillis が過去である場合、ユーザーは直ちに利用権を失います。過去でない場合、ユーザーは期限切れになるまで利用権を保持します。定期購入リソースは次のようになります。

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": expiry_time,
  "autoRenewing": false,
  ...
  "paymentState": 1  # Payment received
  "cancelReason": integer # Reason the subscription was cancelled: user, billing issue, etc.
}

アプリは Google Play Developer API から返された定期購入リソース内の cancelReason を確認することで、定期購入が解約された理由(お客様の解約、請求に関する問題など)を知ることができます。ユーザーが定期購入を解約した場合、アプリは cancelSurveyResult フィールドで、その定期購入が解約された理由を確認できます。

アプリには、「定期購入は _somedate に期限切れになります」のように、定期購入が解約されたことをユーザーに通知するメッセージを表示できます。またアプリには、ユーザーが定期購入を再開できるように、Google Play ストアへのディープリンクを設定することもできます。

このメッセージを表示する場合は、ユーザーがメッセージを完全に非表示にできるようにする必要もあります。

また解約に関するメッセージは、ユーザーに不快感を与える可能性があります。支払い方法が期限切れになって解約になったのではなく、ユーザー自身の手で定期購入を解約している場合は特にそうです。手動で定期購入を解約したユーザーには、通知を表示しないことをおすすめします。

取り消し

定期購入は、Purchases.subscriptions:revoke を使用した定期購入の取り消しやチャージバックなど、さまざまな理由でユーザーから取り消される場合があります。そのような場合、アプリではユーザーの利用権を直ちに取り消す必要があります。取り消された定期購入は BillingClient.queryPurchases() から返されなくなります。その場合は SUBSCRIPTION_REVOKED 通知も送信されます。この通知を受け取った場合、Google Play Developer API から返された定期購入リソースには autoRenewing = false が含まれ、expiryTimeMillis にはユーザーが定期購入にアクセスできなくなる日付が含まれます。定期購入リソースは次のようになります。

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": expiry_time_in_past,
  "autoRenewing": false,
  ...
  "paymentState": 1  # Payment received
}

アカウントの一時停止

定期購入におけるアカウントの一時停止は、ユーザーのお支払い方法で支払いができず、解決されないまま関連する猶予期間が終了した場合に開始されるステータスです。定期購入のステータスがアカウントの一時停止になった場合は、コンテンツやサービスへのアクセスをブロックする必要があります。アカウントの一時停止期間は最大 30 日間です。

アカウントの一時停止を有効にする方法は次のとおりです。

  1. Google Play Console にログインします。
  2. アプリを選択します。
  3. 左側のメニューで、[ストアでの表示] > [アプリ内アイテム] を選択します。
  4. [定期購入] タブを選択して、[定期購入の設定] を展開します。
  5. [アカウントの一時停止を有効にする] をオンにします。

アカウントの一時停止中は、BillingClient.queryPurchases() から定期購入が返されません。

アカウントの一時停止中は、必要に応じて定期購入の解約再開、再購入を処理します。

ユーザーのアカウントが一時停止になった場合は、リアルタイム デベロッパー通知を活用して、定期購入へのアクセスが停止された理由をユーザーに通知します。アプリ内に、支払い方法を修正して定期購入に再びアクセスするための方法を記載したメッセージを表示します。ユーザーが支払い方法を修正できるように、Google Play の定期購入の設定へのリンクをメッセージ内に記載する必要があります。たとえば次のようなメッセージを使用します。

"There is a problem with your subscription. Click here to go to the
Google Play subscription settings to fix your payment method."

ユーザーがアプリ外の定期購入コンテンツにアクセスできる場合は、定期購入がアクティブでなくなったことを知らせるためにプッシュ通知またはメールをユーザーに送信することをおすすめします。

お客様が支払いに関する問題を解決できたら、定期購入が再開されたことをユーザーに知らせるメッセージをアプリ内に表示できます。たとえば次のようなメッセージを使用します。

"Your form of payment was updated, and your subscription has
been recovered."

リアルタイム デベロッパー通知を使用すると、定期購入でアカウントが一時停止になったときに SUBSCRIPTION_ON_HOLD 通知を受け取ります。定期購入の最新情報を取得するには、安全なバックエンド サーバーから Google Play Developer API を呼び出します。アカウントの一時停止中は、定期購入リソースexpiryTimeMillis が過去のタイムスタンプに設定され、paymentState0 に設定されます。

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_past,
  "autoRenewing": true,
  ...
  "paymentState": 0  # Payment pending
}

ユーザーが支払い方法を修正して定期購入がアクティブな状態に戻った場合は、定期購入されたコンテンツへのアクセスを復元する必要があります。

ユーザーが定期購入の対象かどうかをアプリが queryPurchases() のみに基づいて判断している場合、アプリはアカウントの一時停止から再開する定期購入を自動的に処理します。

定期購入のステータスがバックエンドと同期されている場合、アプリは定期購入が再開し、ユーザーがアクセス権を取り戻したことを知らせる SUBSCRIPTION_RECOVERED 通知をリッスンします。この通知を受け取った後に定期購入を照会すると、expiryTimeMillis が将来のタイムスタンプに設定され、paymentState1 になります。

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_future,
  "autoRenewing": true,
  ...
  "paymentState": 1  # Payment received
}

アカウントの一時停止期間が終了する前にユーザーがお支払い方法を修正しなかった場合は、SUBSCRIPTION_CANCELLED リアルタイム デベロッパー通知が届きます。解約の処理手順については、定期購入の解約をご覧ください。この方法で解約された定期購入を照会すると、返された expiryTimeMillis は過去のタイムスタンプに設定され、cancelReason の値は 1 になります。

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_past,
  "autoRenewing": false,
  ...
  "cancelReason": 1  # The system cancelled the subscription
}

猶予期間

猶予期間を有効にすると、請求期間の終了時に支払いの問題がある場合、定期購入は猶予期間に入ります。この期間中でも、Google Play で定期購入の更新が試行されている間は、ユーザーが定期購入にアクセスできるようにする必要があります。猶予期間の長さは、Google Play Console のアプリ内アイテムの設定で指定できます。

ユーザーが定期購入の対象かどうかをアプリが queryPurchases() のみに基づいて確認している場合、解約された購入を queryPurchases() が引き続き有効期限までは返すため、アプリは猶予期間を自動的に処理します。

定期購入のステータスがバックエンドと同期されている場合、アプリはユーザーが猶予期間に入ったことを知らせる SUBSCRIPTION_IN_GRACE_PERIOD リアルタイム デベロッパー通知をリッスンします。ユーザーが猶予期間にある場合、定期購入リソースには autoRenewing = truepaymentState = 0(保留中)が含まれます。

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": timestamp_in_future,
  "autoRenewing": true,
  ...
  "paymentState": 0  # Payment pending
}

ユーザーが猶予期間に入った場合には、支払い方法の修正方法をユーザーに知らせるメッセージをアプリ内に表示します。支払い方法を修正しないと、猶予期間が終了したときに、ユーザーは定期購入にアクセスできなくなります。ユーザーが定期購入を管理できるように、このメッセージには Google Play ストアへのディープリンクを設定できます。

ユーザーが支払い方法を修正すると定期購入が更新され、アプリが更新の説明に沿って更新を処理できるようになります。

猶予期間中にユーザーが支払い方法を修正しなかった場合、定期購入のステータスはアカウントの一時停止(有効な場合)になります。アカウントの一時停止が有効になっていない場合は、定期購入が解約されます。

一時停止中の定期購入

ユーザーが定期購入を一時停止できるようにすることで、自発的な解約を防ぐことができます。一時停止機能を有効にすると、契約期間の間隔に応じて、ユーザーは 1 週間から 3 か月の間で定期購入を一時停止することを選択できます。一時停止機能を有効にすると、定期購入センターと解約フローの両方に表示されます。年間定期購入は一時停止できません。1 週間や 3 か月の一時停止期限は、随時変更される可能性があります。

ユーザーが定期購入を一時停止できるようにする手順は次のとおりです。

  1. Google Play Console にログインします。
  2. アプリを選択して、[ストアでの表示] > [アプリ内アイテム] > [定期購入] に移動します。
  3. [定期購入の設定] を展開します。
  4. [一時停止を有効にする] チェックボックスをオンにします。

定期購入の一時停止が有効になるのは、現在の請求対象期間が終了した後に限られます。定期購入が一時停止している間、ユーザーは定期購入にアクセスできません。一時停止期間が終了すると、定期購入が再開され、Google は定期購入の更新を試みます。再開が成功すると、定期購入が再びアクティブになります。支払いに関する問題で再開できなかった場合、図 6 に示すように、ユーザーはアカウント一時停止状態になります。

ユーザーが定期購入を一時停止した後でアカウントが一時停止状態になるケース
図 6. ユーザーが定期購入を一時停止した後でアカウントが一時停止状態になるケース

図 7 に示すように、一時停止期間中、ユーザーはいつでも手動で定期購入を再開することを選択できます。ユーザーが手動で再開した場合、課金日は、手動で再開した日付に変更されます。

ユーザーが定期購入を一時停止した後で再開したケース
図 7. ユーザーが定期購入を一時停止した後で再開したケース

ユーザーの定期購入が一時停止されている場合、queryPurchases() は定期購入を返しません。定期購入が再開されると、queryPurchases() によって定期購入が返されます。

定期購入のステータスが安全なバックエンド サーバーと同期されている場合、アプリはステータスを維持するためにリアルタイム デベロッパー通知をリッスンします。これらの通知により、定期購入が一時停止になってアクセスできないことを、アプリ内でユーザーに通知することもできます。また、Google Play へのディープリンクを使用して、ユーザーが手動で定期購入を再開する方法を提供する必要もあります。

SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED リアルタイム デベロッパー通知は、ユーザーが定期購入の一時停止を開始したときに送信されます。ユーザーはこの時点で、定期購入に対するアクセス権を保持している必要があります。定期購入リソースには、autoRenewing = truepaymentState = 1(支払いが受領済み)、さらに expiryTimeMillisautoResumeTimeMillis の将来の値が含まれます。

一時停止が有効になると、SUBSCRIPTION_PAUSED リアルタイム デベロッパー通知が送信されます。ユーザーはこの時点で、定期購入に対するアクセス権を保持している必要があります。定期購入リソースには、autoRenewing = truepaymentState = 0(保留中)、autoResumeTimeMillis の将来の値、expiryTimeMillis の過去の値が含まれます。

SUBSCRIPTION_RENEWED リアルタイム デベロッパー通知は、一時停止期間の終了時に定期購入が自動的に再開された場合、またはユーザーが手動で定期購入を再開した場合に送信されます。これは、更新に記載されているとおりに処理する必要があります。

定期購入の再開の試行時に支払いが失敗した場合は、SUBSCRIPTION_ON_HOLD リアルタイム デベロッパー通知が送信されます。これは、アカウントの一時停止セクションに記載されているとおりに処理する必要があります。

再開

解約された定期購入は、有効期限まで Play ストア アプリに表示されたままになります。ユーザーは、有効期限が切れる前に解約した定期購入を再開できます。それには、Google Play ストア アプリ内の [定期購入] で [再開] をクリックします。

Google Play ストア アプリの [アカウント] > [定期購入] セクション
図 1. Google Play ストア アプリの [アカウント] > [定期購入] セクション。

ユーザーが定期購入の対象かどうかをアプリが queryPurchases() のみに基づいて判断している場合、解約された購入を queryPurchases() が引き続き有効期限までは返すため、アプリは再開を自動的に処理します。再開された定期購入は、解約されなかった場合と同様に引き続き更新されます。

定期購入のステータスがバックエンドと同期されている場合、アプリは SUBSCRIPTION_RESTARTED リアルタイム デベロッパー通知をリッスンする必要があります。アプリは受け取った通知に応答し、定期購入が更新されるように設定されたことを記録して、再開に関するメッセージが表示されないようにします。定期購入リソースは次のようになります。

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": expiry_time_in_future,
  "autoRenewing": true,
  ...
  "paymentState": 1  # Payment received
}

アップグレード、ダウングレード、再登録

ユーザーがアップグレードダウングレード、または再度定期購入を行うと、以前の定期購入が無効になり、新しい定期購入と新しい購入トークンが作成されます。

さらに、Google Play Developer API から返される定期購入リソースには、ユーザーがアップグレード、ダウングレード、または再度定期購入を行った、以前の購入を示す linkedPurchaseToken が含まれます。linkedPurchaseToken を使用して以前の定期購入を検索し、既存のユーザー アカウントを特定することで、新しい購入を同じアカウントに関連付けることができます。また、Google Play Developer API を使用して購入を承認し、ユーザーの負担を軽減することをおすすめします。定期購入リソースは次のようになります。

{
  "kind": "androidpublisher#subscriptionPurchase",
  ...
  "expiryTimeMillis": next_renewal_date,
  "autoRenewing": true,
  "linkedPurchaseToken": old_purchase_token
  ...
  "paymentState": 1  # Payment received
}

デベロッパーは、ユーザーが定期購入を簡単に管理できるようにする必要があります。アプリでは、ユーザーが定期購入を管理するためのリンクを設定画面に組み込みます。図 2 に、このリンクの例を示します。

「定期購入を管理」するリンクの例(画像内の [Google Play Subscriptions] ボタン)。
図 2. 「定期購入を管理」するリンクの例(画像内の [Google Play Subscriptions] ボタン)。

ユーザーがアプリ内で有効期限内の定期購入を利用している状態(expiryTimeMillis が将来の日付に設定されているか、autoRenewingtrue に設定されている状態)かどうかを判断するロジックを、このリンクのクリック ハンドラに追加します。

各定期購入の SKU は、Play Console 内で作成したときに割り当てたアイテム ID と一致します。プログラマティックに既存の定期購入の SKU を確認するには、個々のユーザーに関連付けられている定期購入のリストをアプリのバックエンドで照会します。

ユーザーに有効期限が切れていない定期購入がある場合は、次のような URL にユーザーを誘導できます。その際は、「your-sub-product-id」と「your-app-package」を、定期購入 ID とアプリのパッケージ情報に置き換えます。

https://play.google.com/store/account/subscriptions?sku=your-sub-product-id&package=your-app-package

有効期限が切れていない定期購入がユーザーのアプリ内にない場合は、次の URL を使用して、図 3 と図 4 に示すように、他の定期購入がすべて表示されているページにユーザーを誘導します。

https://play.google.com/store/account/subscriptions
Play ストアの定期購入画面には、ユーザーのすべての定期購入のステータスが表示されます。
図 3. Play ストアの定期購入画面には、ユーザーのすべての定期購入のステータスが表示される。
さらに詳しい情報を表示するには、定期購入をタップします。
図 4. さらに詳しい情報を表示するには、定期購入をタップする。

定期購入リンクロジックのサンプルコードは、Classy Taxi のサンプルアプリにあります。

ユーザーが定期購入をアップグレード、ダウングレード、変更できるようにする

デベロッパーは基本階層やプレミアム階層など、さまざまな定期購入の階層をユーザーに提供できます。2 つの定期購入の階層を提供する画面を図 5 に示します。

このアプリには 2 つの定期購入階層が含まれています
図 5. このアプリにある 2 つの定期購入階層。

ユーザーが定期購入をアップグレードまたはダウングレードするには、図 5 のような画面にアクセスできる必要があります。定期購入をアップグレードまたはダウングレードする場合は、比例配分モードを設定して、変更による定期購入者への影響を指定できます。次の表に、利用可能な比例配分モードを示します。

比例配分モード説明
IMMEDIATE_WITH_TIME_PRORATION 定期購入は直ちにアップグレードまたはダウングレードされます。残りの期間は価格の差に応じて調整され、次回の請求日との差分が新しい定期購入に充当されます。これがデフォルト設定です。
IMMEDIATE_AND_CHARGE_PRORATED_PRICE 定期購入は直ちにアップグレードされますが、請求期間は変わりません。ユーザーには残りの期間の差額が請求されます。
IMMEDIATE_WITHOUT_PRORATION 定期購入は直ちにアップグレードまたはダウングレードされ、定期購入の更新時に新しい価格が請求されます。請求期間は変わりません。
DEFERRED 定期購入は、更新時にのみアップグレードまたはダウングレードされます。

比例配分の例

各比例配分モードの仕組みを理解するために、次の事例について考えてみましょう。

あるユーザーが「Country Gardener」というアプリのオンライン コンテンツを定期購入しているとします。現在は、そのコンテンツの Tier 1 バージョンを月次定期購入しています(テキストのみ)。この定期購入の料金は月額 200 円で、毎月 1 日に更新されます。

4 月 15 日に、Tier 2 定期購入の年間バージョンにアップグレードすることにしました。これには、動画のアップデートと年間 3,600 円の料金が含まれています。

デベロッパーは定期購入のアップグレードに、比例配分モードを選択しています。各比例配分モードがユーザーの定期購入にどのように影響するのかを、以下のリストに示します。

IMMEDIATE_WITH_TIME_PRORATION
ユーザーの Tier 1 の定期購入は直ちに終了します。ユーザーは 1 か月分(4 月 1~30 日)をすでに支払っていますが、定期購入期間が半分経過した時点でアップグレードしたことで、月次定期購入分の残り半分(100 円)は新しい定期購入に適用されます。ただし、この新しい定期購入の年間料金が 3,600 円であることから、100 円のクレジット残高の支払いは 10 日分(4 月 16~25 日)のみとなります。したがって 4 月 26 日に新しい定期購入について 3,600 円、以降の毎年 4 月 26 日に 3,600 円が請求されます。
IMMEDIATE_AND_CHARGE_PRORATED_PRICE
このモードは、Tier 2 の定期購入の単位時間あたり価格(3,600 円/年 = 300 円/月)が、Tier 1 の定期購入の単位時間あたり価格(200 円/月)よりも大きいために使用できます。ユーザーの Tier 1 の定期購入は直ちに終了します。ユーザーは 1 か月分をすでに支払っていますが、半分しか使用しておらず、月次定期購入分の残り半分(100 円)は新しい定期購入に適用されます。ただし、新しい定期購入の料金が 3,600 円/年であり、残りの 15 日分の料金が 150 円であるため、新しい定期購入については差分の 50 円が課金され、5 月 1 日には 3,550 円が課金されます。それ以降は毎年 3,600 円が課金されます。
IMMEDIATE_WITHOUT_PRORATION
ユーザーの Tier 1 の定期購入は直ちに追加料金なしで Tier 2 にアップグレードされます。5 月 1 日には新しい定期購入について 3,600 円が課金され、以後毎年 5 月 1 日に 3,600 円が課金されます。
DEFERRED
ユーザーの Tier 1 定期購入は 4 月 30 日に有効期限が切れるまで継続します。5 月 1 日に Tier 2 定期購入が有効になり、新しい定期購入の 3,600 円が課金されるようになります。

比例配分モードを選択する際は、比例配分の推奨事項をご確認ください。

アプリでは、購入フローの開始と同じ手順でアップグレードまたはダウングレードを提供できます。ただし、アップグレードまたはダウングレードする場合は、次の例に示すように、現在の定期購入、将来(アップグレードまたはダウングレード)の定期購入、使用する比例配分モードの詳細を指定する必要があります。

Kotlin

// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync()
val flowParams = BillingFlowParams.newBuilder()
        .setOldSku(previousSku, purchaseTokenOfOriginalSubscription)
        .setReplaceSkusProrationMode(desiredProrationMode)
        .setSkuDetails(upgradeOrDowngradeSkuDetails)
        .build();
val responseCode = billingClient.launchBillingFlow(activity, flowParams)

Java

// Retrieve a value for "skuDetails" by calling querySkuDetailsAsync()
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
        .setOldSku(previousSku, purchaseTokenOfOriginalSubscription)
        .setReplaceSkusProrationMode(desiredProrationMode)
        .setSkuDetails(upgradeOrDowngradeSkuDetails)
        .build();
int responseCode = billingClient.launchBillingFlow(billingFlowParams);

即時交換比例配分モードの場合、アプリは PurchasesUpdatedListener で新しい購入を受け取ります。購入は BillingClient.queryPurchases() でも利用できます。購入トークンを受け取ったら、新しい購入トークンを検証する場合と同じ検証プロセスを行います。Google Play Billing Library の BillingClient.acknowledgePurchase()、または Google Play Developer API の Purchases.subscriptions:acknowledge を使用して購入を承認します。

Google Play Developer API は、定期購入リソースlinkedPurchaseToken を返します。 サービスに対するアクセスに以前のトークンが使用されないように、linkedPurchaseToken 内で提供されるトークンは必ず無効にしてください。アップグレードとダウングレードの購入の処理については、linkedPurchaseToken を使用してサブスクリプションのアップグレード、ダウングレード、再登録を処理するをご覧ください。

延期された交換モードの場合、アプリは PurchasesUpdatedListener に対する呼び出しと、空の購入リスト、アップグレードまたはダウングレードが正常に処理されたかどうかを示すステータスを受け取ります。交換が有効になるまで、BillingClient.queryPurchases() は引き続き元の定期購入プランに従って購入を返します。新しいプランが有効になると、queryPurchases() は新しい定期購入の購入データを返し、安全なバックエンド サーバーに SUBSCRIPTION_RENEWED 通知が送信されます。延期された交換の場合は、この通知をリッスンし、Purchases.subscriptions:acknowledge を使用して購入を承認することを強くおすすめします。定期購入リソースの linkedPurchaseToken を使用して、定期購入バックエンドのどのユーザー(該当する場合)を新しい利用権で更新する必要があるかを判断できます。プランの変更が有効になってから 3 日以内にユーザーがアプリを開かない可能性があるため、ユーザーがアプリを開いて BillingClient.acknowledgePurchase() を通じて承認することを前提にすべきではありません。

無料試用またはお試し価格でのアップグレード

無料試用の利用資格の設定は、ユーザーがアップグレードまたはダウングレードするときに適用されます。Google Play Console で無料試用の利用資格の設定を調整できます。

次の点にご注意ください。

  • ユーザーがアプリで利用できるすべての定期購入において無料試用を 1 回しか利用できない場合、変更したプランには無料試用やお試し価格が適用されません。
  • 定期購入アイテムごとに 1 回の無料試用を提供する場合、ユーザーが変更するプランには無料試用またはお試し価格が適用されます。

次の表に、新しいプランと以前のプランの両方に無料試用があり、ユーザーが無料試用中にアップグレードする場合の各比例配分モードの動作を示します。

アプリごとに 1 回の無料試用 定期購入アイテムごとに 1 回の無料試用
IMMEDIATE_WITH_TIME_PRORATION ユーザーは直ちに無料試用を失います。残りの無料試用期間は、価格差に基づいて新しい階層の無料期間に換算されます。 ユーザーは以前の無料試用を失いますが、すぐに新しい無料試用が開始されます。また、以前の階層の残りの無料試用期間は、新しい階層と同等の無料期間に変換され、新しい無料試用期間に追加されます。
IMMEDIATE_AND_CHARGE_PRORATED_PRICE

ユーザーは直ちに無料試用を失います。ユーザーには残りの期間の差額が請求されます。次回の請求日は変更されません。

注: このオプションは、時間単位の料金が引き上げられる定期購入のアップグレードでのみ利用できます。

IMMEDIATE_WITHOUT_PRORATION このユーザーはすぐに新しい階層にアップグレードされます。以前の請求対象期間が終了するまで、新しい階層への無料試用のアクセス権は保持されます。
DEFERRED ユーザーは次回の請求日まで、以前の定期購入の無料試用にアクセスできます。

アプリごとに 1 回の無料試用でデフォルトの無料試用の遷移がどのように機能するかについては、次のシナリオをご覧ください。

あるユーザーが「Country Gardener」というアプリのオンライン コンテンツを定期購入しているとします。現在は、そのコンテンツの Tier 1(テキストのみ)バージョンを月次定期購入しています。月額は 1,000 円で、4 月 1 日に定期購入しました。初回の定期購入で 30 日間の無料試用を利用しているため、5 月 1 日に初めて支払いが行われます。

4 月 15 日に、Tier 2(動画のアップデートを含む)の定期購入にアップグレードすることにしました。月額は 2,000 円になります。この 2 回目の定期購入でも 30 日間の試用期間が有効です。

以下に、各比例配分モードの無料試用の移行方法を示します。

  • IMMEDIATE_WITH_TIME_PRORATION - ユーザーは直ちに Tier 2 にアップグレードされます。ユーザーが定期購入期間が半分経過した時点でアップグレードしたため、定期購入の半月分(1,000 円/月の 15 日分)が新しい定期購入に適用されます。ただし、新しい定期購入は月額が 2,000 円のため、残りの 15 日分の残額は 7.5 日分になります。ユーザーがさらに Tier 2 の無料試用を利用できる場合は、4 月 22 日より月額 2,000 円が課金されます。
  • IMMEDIATE_AND_CHARGE_PRORATED_PRICE - このモードは、Tier 2 の定期購入の単位時間あたり価格(2,000 円/月)が、Tier 1 の定期購入の単位時間あたり価格(1,000 円/月)よりも大きいために使用できます。ユーザーの Tier 1 の定期購入が Tier 2 に直ちにアップグレードされ、ユーザーは無料試用を失います。次回の請求日は 5 月 1 日であるため、4 月の後半分として本日 1,000 円が請求されます。その後、5 月 1 日から毎月 2,000 円が課金されます。
  • IMMEDIATE_WITHOUT_PRORATION - ユーザーの Tier 1 定期購入は直ちに Tier 2 にアップグレードされます。ユーザーは 4 月 30 日まで無料試用を保持し、Tier 2 のコンテンツにアクセスできます。5 月 1 日以降、毎月 2,000 円が課金されます。
  • DEFERRED - ユーザーの Tier 1 定期購入は、次回のお支払い日である 5 月 1 日まで継続します。5 月 1 日に Tier 2 定期購入が有効になり、毎月 1 日に 2,000 円が課金されます。

次のリストは、デベロッパーが定期購入ごとに 1 回の無料試用を許可している場合の移行動作を示しています。

  • IMMEDIATE_WITH_TIME_PRORATION - ユーザーは直ちに Tier 2 にアップグレードされます。ユーザーが定期購入期間が半分経過した時点でアップグレードしたため、定期購入の半月分(1,000 円/月の 15 日分)が新しい定期購入に適用されます。ただし、新しい定期購入は月額が 2,000 円のため、残りの 15 日分の残額は 7.5 日分になります。ユーザーは Tier 2 の無料試用を利用できるため、さらに 37.5 日間は課金されません。5 月 22 日以降、毎月 2,000 円が課金されます。
  • IMMEDIATE_AND_CHARGE_PRORATED_PRICE - このモードは、Tier 2 の定期購入の単位時間あたり価格(2,000 円/月)が、Tier 1 の定期購入の単位時間あたり価格(1,000 円/月)よりも大きいために使用できます。ユーザーの Tier 1 の定期購入が Tier 2 に直ちにアップグレードされ、ユーザーは無料試用を失います。次回の請求日は 5 月 1 日であるため、4 月の後半分として本日 1,000 円が請求されます。その後、5 月 1 日から毎月 2,000 円が課金されます。
  • IMMEDIATE_WITHOUT_PRORATION - ユーザーの Tier 1 定期購入は直ちに Tier 2 にアップグレードされます。ユーザーは 4 月 30 日まで無料試用を保持し、* にアクセスできます。
  • DEFERRED - ユーザーの Tier 1 定期購入は、次回のお支払い日である 5 月 1 日まで継続します。5 月 1 日に Tier 2 定期購入が有効になり、毎月 1 日に 2,000 円が課金されます。

比例配分に関する推奨事項

次の表に、さまざまな比例配分のシナリオと、各シナリオでの推奨事項を示します。

シナリオ 推奨される比例配分モード 結果
より高額な階層へのアップグレード IMMEDIATE_AND_CHARGE_PRORATED_PRICE ユーザーは、同じ請求対象期間を維持しながら、直ちにアクセスできるようになります。
安価な階層へのダウングレード DEFERRED ユーザーはすでにより高額な階層で支払い済みであるため、次の請求日までアクセスが継続されます。
同じ階層での契約期間の変更(月単位から年単位など) DEFERRED ユーザーは次回の請求日に新しい料金を支払います。
無料試用期間中のアップグレード IMMEDIATE_WITHOUT_PRORATION ユーザーは無料試用の利用権を保持し、試用期間の残りの期間は上位階層にアップグレードされます。
無料試用期間中のアップグレード - 無料試用へのアクセスの終了 IMMEDIATE_AND_CHARGE_PRORATED_PRICE ユーザーはすぐに新しい階層にアクセスできますが、無料試用期間は終了します。

再定期購入

ユーザーの再度定期購入にはさまざまなシナリオがあります。

  • 定期購入の有効期限が切れる前に、ユーザーはアプリで同じ定期購入を再購入できます。それにより、新しい定期購入と購入トークンが生成されます。
  • 定期購入の有効期限が切れる前に、ユーザーは Google Play 定期購入センターで定期購入を再開できます。それにより、同じ定期購入と購入トークンが維持されます。
  • 定期購入の有効期限が切れてから 1 年間、ユーザーは Google Play 定期購入センターを通じて同じ SKU を再購入することもできます。それにより、新しい定期購入と購入トークンが生成されます。

定期購入の有効期限が切れる前

定期購入がまだ期限切れになっていない場合でも、ユーザーは、解約した定期購入を再度定期購入できます。解約された定期購入は、同じアイテム ID を使用して、同じアプリ内アイテム購入フローを適用することで、アプリ内で再定期購入を許可することができます。

新しい定期購入は、以前の定期購入に代わって同じ有効期限で更新されます。たとえば、あるユーザーが「Example Music App」というアプリを定期購入していたとします。定期購入の有効期限は 8 月 1 日です。7 月 10 日に、同じ月額で 1 か月分再度定期購入するとします。新しい定期購入は残りのクレジットに基づいて比例配分され、すぐに有効になり、8 月 1 日に更新されます。

デベロッパーは、再度定期購入するための適切な UI を表示する必要があります。

  • アクティブな定期購入がないユーザーには、新しい定期購入を購入するボタンをアプリ内に表示します。ボタンのテキストは、「買う」、「購入する」などにします。
  • 解約した定期購入があるユーザーには、アプリ内に [再度定期購入] ボタンを表示します。

購入トークンを受け取ったら、新しい定期購入の場合と同様に購入を処理します。さらに、Google Play Developer API は、定期購入リソース内で linkedPurchaseToken を返します。サービスに対するアクセスに以前のトークンが使用されないように、linkedPurchaseToken 内で提供されるトークンは必ず無効にしてください。

定期購入の有効期限が切れた後

バージョン 2.0 以降の Billing Library を使用している場合、ユーザーは期限切れから 1 年間は、Google Play 定期購入センターを通じて定期購入を再購入できます。これはアプリ外購入であるため、アプリでこの購入を適切に処理できるようにしてください。

このシナリオでは、定期購入アイテムにつき、またはアプリで利用可能なすべての定期購入につき、ユーザーは 1 回のみ無料試用を利用できるため、ユーザーが定期購入センターから再度定期購入を行った場合、無料試用やお試し価格は適用されません。

再定期購入は、linkedPurchaseToken を使用して定期購入のアップグレード、ダウングレード、再登録を処理するに示すおすすめの方法に沿って処理してください。

この機能は、カタログ内の SKU ごとに有効にする必要があります。この機能を有効にする方法については、Console ヘルプセンターをご覧ください。

無料試用とお試し価格

無料試用やお試し価格を提供して、ユーザーにアプリを試してもらうことができます。

無料試用

ユーザーが支払いを行う前に定期購入を試すことができるようにします。無料試用は指定した期間に適用され、この期間が終了すると、自動的に正規の定期購入に切り替わります。切り替わった定期購入には、通常の定期購入と同じ期間と価格が適用されます。すべてのタイプの定期購入で無料試用を設定できます。

無料試用を開始するには、ユーザーは Google Play で定期購入の標準的な手続きを完了する必要があります。無料試用が適用されるユーザーには、期間中の料金は請求されません。またユーザーには、定期購入に無料の試用期間が適用されることがメールで通知されます。Google Play には 0 円の取引として記録され、無料試用期間を通して、または定期購入が解約されるまで、この定期購入は購入済みとして設定されます。

Google Play では、無料試用が開始する前に、ユーザーが有効なお支払い方法を設定しているか確認します。ユーザーによっては、この確認がお支払い方法に対する保留または請求として表示されることがあります。この保留または請求は一時的なものであり、後で取り消されるか払い戻されます。

試用期間後は、ユーザーのお支払い方法に対して正規の定期購入価格が請求されます。

ユーザーが無料試用中に定期購入を解約した場合、試用期間が終了するまで定期購入は継続され、無料試用期間が終了しても請求は発生しません。

デフォルトでは、ユーザーはアプリで利用可能なすべての定期購入に対して、1 回のみ無料試用を利用できます。定期購入アイテムごとに 1 回の無料試用を提供する場合は、Google Play Console で対応する設定を変更できます。

定期購入に無料試用を追加する方法については、Google Play ヘルプセンターの無料試用の手順をご覧ください。

無料試用が提供されている定期購入の定期購入ライフサイクル イベントは、無料試用のない定期購入と同様に機能します。唯一の違いは、更新間隔が通常の定期購入の更新間隔と異なる場合があることです。

ユーザーに販売可能なアイテムを示す場合は、SkuDetails.getFreeTrialPeriod() メソッドを使用して、特定のアイテムが無料試用の対象であることを提示できます。

無料試用付きの定期購入が購入された場合、Google Play Developer API から返された定期購入には paymentState = 2(無料試用)が含まれます。定期購入が正常に更新されると、paymentState1(支払いが受領済み)に切り替わります。

お試し価格

無料試用と同様に、お試し価格でアプリを試してもらうことができます。お試し価格の詳細および有効にする方法については、定期購入を作成するをご覧ください。

お試し価格を設定した定期購入における定期購入ライフサイクル イベントは、お試し価格が設定されていない定期購入と同様に機能します。唯一の違いは、更新間隔が通常の定期購入の更新間隔と異なる場合があることです。

販売可能なアイテムを示す場合は、SkuDetails.getIntroductoryPrice() と関連メソッドを使用して、定期購入でお試し価格を利用できることをユーザーに提示できます。

定期購入を宣伝する

プロモーション コードを作成して、既存の定期購入 SKU の無料試用の延長特典を特定のユーザーに提供できます。詳細については、プロモーション コードをご覧ください。

顧客管理

解約、払い戻し、取り消し

Google Play Developer API を使用して、定期購入の解約払い戻し取り消しができます。この機能は Google Play Console でも利用できます。

  • 解約: ユーザーは Google Play で定期購入を解約できます。アプリまたはウェブサイトでユーザーが解約できるオプションを用意することもできます。アプリでは取り消しの説明に沿って、これらの解約を処理する必要があります。
  • 払い戻し: 払い戻しを行った後も、ユーザーは引き続き定期購入を利用できます。払い戻しは、たとえば、技術的なエラーによってユーザーがアイテムにアクセスできなかったものの、エラーが解決された場合に行うことができます。最新のお支払い額を超える金額を払い戻す場合、または一部払い戻しを行う場合は、Google Play Console を使用する必要があります。
  • 取り消し: 取り消しを行うと、ユーザーは直ちに定期購入を利用できなくなります。取り消しは、たとえば、技術的なエラーによってユーザーがアイテムにアクセスできなくなり、ユーザーがアイテムを使用し続けることを望まない場合に行うことができます。アプリでは取り消しの説明に沿って、これらの解約を処理する必要があります。

次の表に、解約、払い戻し、取り消しの違いを示します。

更新を停止する 料金を払い戻す アクセス権を取り消す
解約 × ×
払い戻し × ×
取り消し

定期購入者の課金を延期する

Google Play Developer API の Purchases.subscriptions:defer を使用すると、定期購入者の次回の請求日を延期することができます。延期期間中には、ユーザーは完全なアクセス権で定期購入コンテンツを利用できますが、課金はされません。定期購入の更新日は、新しい日付で更新されます。

課金を延期することで、次のことが可能になります。

  • 特別優待の一環として、映画の購入について 1 週間の無料期間を設けるなど、無料アクセス権を付与します。
  • 感謝の印としてユーザーに無料アクセス権を付与します。

課金の延期は、API 呼び出し 1 回あたり最短で 1 日、最長で 1 年間です。課金をさらに延期するには、次回の課金日の前に再度 API を呼び出します。

たとえば、あるユーザーが「Fishing Quarterly」というアプリのオンライン コンテンツを月次定期購入しているとします。普段は毎月 1 日に、125 円を支払っています。3 月に、アプリ パブリッシャーが実施したオンライン調査に回答しました。パブリッシャーは、謝礼として 6 週間分を無料にし、次の支払いを 5 月 15 日(予定されていた次回課金日 4 月 1 日の 6 週間後)まで延期することにしました。このユーザーは 4 月 1 日と 5 月 1 日には課金されませんが、通常どおりコンテンツにアクセスできます。5 月 15 日に、通常どおりの 125 円が定期購入料金として課金されます。次回の更新日は 6 月 15 日です。

延期する場合は、課金日が変更されたことを、メールまたはアプリ内でユーザーに通知することをおすすめします。

解約を思いとどまらせるための特典を提供する

リアルタイム デベロッパー通知を使用すると、ユーザーの解約をリアルタイムに検出できます。定期購入が期限切れになる前にユーザーが解約した場合は、ユーザーにプッシュ通知またはアプリ内メッセージを送信して、再度定期購入するように促すことができます。

ユーザーの定期購入が期限切れになった場合は、再購入をユーザーに依頼する必要があります。割引を適用するには、特別価格を設定した定期購入用のアイテム ID を提供します。これは再獲得用 SKU とも呼ばれます。この特典はアプリで提供することも、メールなどアプリ以外の方法でユーザーに通知することもできます。再獲得用の定期購入を開始するには、Google Play Billing Library を使用して、Android アプリ内で購入フローを開始します。これは新しい定期購入と同じプロセスですが、デベロッパーは、ユーザーが利用できる SKU を決定できます。

無料試用またはお試し価格を再獲得用 SKU に含める場合は、Google Play Console で、アプリごとの無料試用を 1 回に制限する [Allow one free trial per app] チェックボックスをオフにして、ユーザーをその対象にします。

定期購入の価格の変更

警告: Google で購読の定期購入では、価格を変更しないでください。

Google Play では、世界中のさまざまな地域のユーザーに向けて、多様な通貨と価格体系でデジタル アイテムを販売できます。各地域の物価または通貨の変動により、定期購入価格を変更する必要が生じることがあります。既存の定期購入者に既存の価格を引き続き適用する場合は、価格が更新された新しい SKU を作成し、新しい定期購入者に提供します。

登録時の価格を引き続き定期購入者に提供できず、新しい価格を承認しないユーザーの定期購入をすべて解約する場合は、価格の変更を自動的に適用できます。ユーザーが新しい価格に同意しない場合、定期購入は解約されます。オプトイン率を最大にしてユーザーによる対応を促すには、アプリで価格変更の予定に関するメッセージをユーザーに表示します。価格変更メッセージの詳細については、価格変更の通知をご覧ください。

定期購入の価格を変更するには、次のようにします。

  1. Google Play Console にログインします。
  2. 価格を変更する定期購入を含むアプリを探します。
  3. [ストアでの表示] > [アプリ内アイテム] を選択して、[定期購入] タブを開きます。
  4. 変更する価格の横にある [編集] リンクを選択します(図 8 を参照)。

    定期購入の価格の編集
    図 8. 定期購入の価格の編集
  5. 新しい定期購入価格を入力します。

  6. 価格を変更すると、図 9 に示す確認ダイアログが表示されます。

    定期購入価格を編集すると警告が表示されます
    図 9. 定期購入価格を編集したときに表示される警告。

    このダイアログでは、新規および既存の定期購入者に対する価格変更の影響について説明します。次の点にご注意ください。

    • 確定後に価格変更を元に戻すことはできません。
    • Google Play は、価格変更の確定から 7 日後に、ユーザーへの通知を開始します。
    • 定期購入価格を上げる場合、ユーザーは、30 日以内に価格変更に同意する必要があります。同意しない場合、定期購入は自動的に解約されます。
    • 定期購入価格の引き下げは、次回の更新日に既存の定期購入者に自動的に適用されます。価格の引き下げ後に定期購入したユーザーには、引き下げられた価格が自動的に適用されます。

    [適用] をクリックして続行します。

  7. 新しい定期購入価格が有効になるタイミングを示す確認ダイアログが表示されます。

    定期購入の価格変更が有効になるタイミングを示す確認ダイアログ
    図 10. 定期購入の価格変更が有効になるタイミングを示す確認ダイアログ。

価格の変更をユーザーに知らせる

価格を変更する場合、特に価格が上がるときには、既存の定期購入者に通知する必要があります。

定期購入の価格を上げる場合は、Google Play が通知を開始する少なくとも 7 日前に、価格の変更について既存の定期購入者に連絡する必要があります。Google Play によるユーザーへの通知は、図 11 のようなダイアログで表示されます。このダイアログには、以前の価格、新しい価格、新しい価格が有効になる日付が表示されます。

定期購入の価格変更をユーザーに通知する一般的なダイアログ
図 11. 定期購入の価格変更をユーザーに通知する一般的なダイアログ。

以下の方法で、このダイアログをアプリ内に表示できます。

アプリでは、定期購入リソースpriceChange フィールドによって、特定のユーザーについて保留中の価格変更があるかどうかを判断できます。このフィールドは定期購入に価格変更があるかどうかを示し、priceChange.state フィールドは、価格変更が承諾されたか未承諾であるかを示します。

価格変更確定フローを起動する

アプリの起動時に Google Play の価格変更ダイアログを表示するには、BillingClient.launchPriceChangeConfirmationFlow() を使用します。

価格変更ダイアログを表示する前に、価格変更の理由を説明する独自のメッセージまたはダイアログを表示することもできます。このようなカスタム メッセージを作成して表示すると、ユーザーが新しい価格で定期購入を更新することを選択する可能性が高くなります。

価格変更確定フローを開始する例を次に示します。

Kotlin

val priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
        .setSkuDetails(changedPriceSubscriptionSkuDetails)
        .build()

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        object : PriceChangeConfirmationListener() {
            override fun onPriceChangeConfirmationResult(responseCode: Int) {
                if (responseCode == BillingResponseCode.OK) {
                    // User has confirmed the price change.
                } else if (responseCode == BillingResponseCode.USER_CANCELED) {
                    // User hasn't confirmed the price change and should retain
                    // access until the end of the current billing cycle.
                }
            }
        })

Java

PriceChangeFlowParams priceChangeFlowParams = PriceChangeFlowParams.newBuilder()
        .setSkuDetails(changedPriceSubscriptionSkuDetails)
        .build();

billingClient.launchPriceChangeConfirmationFlow(activity,
        priceChangeFlowParams,
        new PriceChangeConfirmationListener() {
            @Override
            public void onPriceChangeConfirmationResult(int responseCode) {
                if (responseCode == BillingResponseCode.OK) {
                    // User has confirmed the price change.
                } else if (responseCode == BillingResponseCode.USER_CANCELED) {
                    // User hasn't confirmed the price change and should retain
                    // access until the end of the current billing cycle.
                }
            }
        });

価格変更に対するユーザーの同意を処理する

定期購入の新しい価格にユーザーが同意すると、定期購入が更新され、他の更新と同様に処理できるようになります。さらに、SUBSCRIPTION_PRICE_CHANGE_CONFIRMED リアルタイム デベロッパー通知を受け取ります。

価格変更が不承認となった場合に対応する

以前の定期購入が期限切れとなるまでにユーザーが価格変更に同意しなかった場合、定期購入は解約され、デベロッパーは SUBSCRIPTION_CANCELED 通知を受け取ります。このイベントは解約の説明に沿って処理できます。

誤った価格変更

定期購入の価格を誤って変更した場合は、すぐに変更を元に戻してください。価格を 7 日以内に元に戻せば、既存の定期購入者に誤った価格変更が通知されることはありません。ただし、最初の価格変更から元に戻すまでの間に、新しい定期購入者が誤った価格を受け取る可能性があるので注意してください。

価格を 2 回連続して変更する

価格変更は、必ず 1 件ずつ行ってください。テスト目的で価格を変更することはおすすめしません。

定期購入の価格を 7 日間に 2 回変更した場合、ユーザーが同意する必要があるのは最新の価格変更だけです。

価格の変更が 7 日以上の間隔で行われた場合、価格の変更は互いにキャンセルされません。代わりに、ユーザーは最初の価格変更に同意し、最初の価格で更新サイクルを 1 回完了する必要があります。更新サイクルが終了した後で、2 番目の価格による請求を開始できます。その後の更新では 2 番目の価格で毎月請求されます。