開発備忘録 2018/10/17

In-App Purchase における自動更新型サブスクリプションの状態更新通知について

In-App Purchase では、サブスクリプションの状態に関する変更を App Store が通知してくれます。(※自動更新型のみ)
開発者はその通知を受け取り適切な処理を行うことで、サブスクリプションの状態を正しく更新することができます。
(以前はこの状態の更新を通知してくれる仕組みがなかったため、自分たちのサーバーから定期的に Apple のサーバーにポーリングする仕組みを整える必要がありました。)

App Store が POST してくれる通知の種類は以下の 5 つです。

種類 説明
INITIAL_BUY 初回の購読
CANCEL Apple カスタマーサポートによって購読がキャンセルされた
RENEWAL 期限切れになっていた購読が再び更新された
INTERACTIVE_RENEWAL 期限切れになっていた購読をユーザーが意図的に更新した
DID_CHANGE_RENEWAL_PREF プランを変更した

それぞれの通知について詳しく解説します。

INITIAL_BUY

アプリケーションが提供するプランをユーザーが初めて購読した際に通知されます。

CANCEL

Apple カスタマーサポートが購読をキャンセルした際に通知されます。
例えば、子供が誤ってサブスクリプションを登録してしまった場合などに、Apple に問い合わせて事情を説明することで購読をなかったことにしてくれるみたいですが、恐らくその際に通知されるものだと思われます。(実際に試したわけではないので、間違っていたらすみません……。)

ちなみにユーザーが設定アプリから自発的に購読をキャンセルした場合は通知されません。

RENEWAL

決済に不備があり購読が中断された後、Apple は何度か決済のリトライを行います。
その間にユーザーが決済情報を変更し、購読の更新に成功した場合にこの通知が POST されてきます。

INTERACTIVE_RENEWAL

期限切れになっていた購読をユーザーが自発的に更新した際に通知されます。
例えば期限切れになった後に、アプリケーションのプランの購入画面から再度購入した場合などに通知されます。

また、購読の更新に失敗し、期限切れになった場合にも通知されます。

DID_CHANGE_RENEWAL_PREF

プランを変更した際に通知されます。

自動更新型のサブスクリプションサブスクリプション間にランク付けを行うことができます。
例えば、ベージックプランやプレミアムプランといった感じでグレードに違いをもたせます。

ちなみにグレードがベーシック < プレミアムだとして、ベーシックからプレミアムに移行した場合は「アップグレード」といって、即座にプランが変更されます。
一方でプレミアムからベーシックに移行した場合は「ダウングレード」といい、こちらは次回の購読の更新時にプランが切り替わります。
どちらの場合でも POST されてくる通知の種類は同じ (DID_CHANGE_RENEWAL_PREF) です。