以前書いた iOS定期購読課金 ステータスが追加された件の保留中の課金状態についての詳細です。
定期購読時のレシートにフィールド「pending_renewal_info」が追加され、保留中の定期購読状態が取得できます。
保留中の定期購読状態とは
保留中の定期購読状態とは将来予定されている定期購読(現在購読中で今後も更新されるかもしれない、また以前購読していて自動更新もOFFに)や、何らかの理由で過去に失敗した定期購読のことです。
- 現在購読中、今後も更新されるかもしれない購読
- 過去に購読していたが現在は期限も切れており自動更新もOFFにしている状態だが、今後自動更新をONにされるかもしれない購読
- 定期購読の自動更新はONになっているがなんらかの理由で決済ができない状態で期限切れの購読
- なんらかの理由は以下がありそうです
- iThunsカードチャージが足りていない
- クレジット決済ができなかった
- キャリア決済の上限に達した
- なんらかの理由は以下がありそうです
pending_renewal_info
キー | 説明 | 値 |
---|---|---|
auto_renew_product_id | The current renewal preference for the auto-renewable subscription. |
プロダクトIDではあるが、購入状態の優先されるプロダクトIDとなります。※1 |
product_id | 購入したアイテムのプロダクトID | 現在購読中もしくは期限切れの場合は最後に購読していたプロダクトID |
original_transaction_id | Appleアカウントで一意となる購入ID | latest_receiptのフィールド内の値と同じです |
auto_renew_status | 自動更新型購読について現在の更新ステータス | “1” - 現購読期間の最終日に更新される。つまり自動更新はONになっている。 “0” - 顧客が購読の自動更新をオフにした。次は更新されない。 |
expiration_intent | 購読期限切れの理由 ※期限切れの場合のみ |
“1” - 顧客が購読をキャンセルした “2” - 課金エラー; 顧客の支払い情報が有効でなくなったなど “3” - 顧客が値上げに同意しなかった “4” - 更新の時点でプロダクトが購入できる状態でなかった “5” - 原因不明のエラー。 |
is_in_billing_retry_period | 期限切れになった購読についてAppleがなお自動更新を試みているか否か ※期限切れの場合のみ |
“1” - App Storeは購読更新を試みている “0” - App Storeは購読更新の試みをしていない |
※1 auto_renew_product_idとproduct_id
product_idはlatest_receipt_infoの最後のレシート(最後に購入したもの)のプロダクトIDとなり、現在購読中もしくは期限がきれたものとなる。
auto_renew_product_idは現在のアカウントがなにを購入しているかの予約までも考慮したプロダクトIDとなります。
アップグレード/ダウングレードやクロスグレードを使った場合、次の更新で別のプロダクトIDに切り替わる場合に切り替わる予定のプロダクトIDがこのフィールドに設定されます。
例
① あるアプリにはプロダクトA(月額)とB(年額)があります。同グループ同レベルに設定することによりクロスグレードとなります。(クロスグレードについてはiOS定期購読課金 クロスグレードを参照)
② ユーザはAを購入します。このときpending_renewal_infoは以下のようになります。
"pending_renewal_info":[
{
"auto_renew_product_id":"product_a",
"original_transaction_id":"XXXXXXXXXXXXXXXX",
"product_id":"product_a",
"auto_renew_status":"1"
}
]
③ 有効期限内にBに乗り換えます。(クロスグレード)この時点ではまだAの有効期限内なのでレシート情報は更新されていない。このときのpending_renewal_infoは以下のようになります。
"pending_renewal_info":[
{
"auto_renew_product_id":"product_b",
"original_transaction_id":"XXXXXXXXXXXXXXXX",
"product_id":"product_a",
"auto_renew_status":"1"
}
]
④ Aの有効期限日になり、Bに切り替わりました。この時点でレシートが更新され、Aは有効期限切れ、Bが有効期限内となります。このときのpending_renewal_infoは以下のようになります。
"pending_renewal_info":[
{
"auto_renew_product_id":"product_b",
"original_transaction_id":"XXXXXXXXXXXXXXXX",
"product_id":"product_b",
"auto_renew_status":"1"
}
]
つかえる場面
今までわからなかったことがわかるようになるのでいろいろ使えそうですね!
ユーザが自動更新をONにしているかOFFにしているかがわかるのでユーザ動向がわかる
クロスグレードしたかどうかがわからなかったがレシートからわかるようになった
有効期限切れの理由がわかるので、iTunesチャージ切れの場合などはアプリでお知らせするなどで促進できる