Edited at

GooglePlay定期購読でのアップグレード/ダウングレード Part2

GooglePlay定期購読のアップグレード/ダウングレードの仕様についてPart2です。

サーバ側でアップグレード/ダウングレードしたのかをどうやって判断するのかについてのまとめとなります。

Part1はこちら :arrow_right: GooglePlay定期購読でのアップグレード/ダウングレード Part1


サーバ側での課金状態取得

GoogleAPIを利用して現在の課金状態を取得します。

https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/get


前提知識

Googleではアップグレード/ダウングレード時または再購読時にはpurchaseTokenとorderIdは新たに発行されます。

結果取得できるレスポンスの一部は以下の通りです。

(すべてのレスポンス内容は公式ドキュメントを参照)

Key
詳細

startTimeMillis
商品が購入された時間を1970年1月1日から始まるミリ秒で表す。

expiryTimeMillis
期限切れになるまでの時間(ミリ秒)。

autoRenewing
自動更新が有効かどうかを表す。trueの場合は自動更新購読が有効で、次の課金日に自動的に更新されます。falseの場合はユーザーが自動更新購読をキャンセルしたことを示します。

paymentState
注文の購入状況。
0:支払保留中
1:支払い済み
2:無料トライアル
自動更新がOFF(autoRenewing:false)かつ有効期限も切れている場合はKey自体ない。

orderId
購入に関連付けられた最新の定期注文の注文ID。

cancelReason
自動更新購読をキャンセルした or 有効期限が切れた理由。

0: ユーザーが定期購入をキャンセルした
1:システムによってキャンセルされた(請求ができなかった等)
2:新しいサブスクリプションに置き換えられた(アップグレード/ダウングレードや、再購読した等)
3:開発者によってキャンセルした

userCancellationTimeMillis
cancelReasonが0の場合のみ入る。自動更新をキャンセルしたときの時間(ミリ秒)。

linkedPurchaseToken
この購読に紐づく購読情報となる。パターンは2つ。
1. アップグレード/ダウングレードした場合、アップグレード/ダウングレード前のpurchaseTokenとなる。
2. ある購読を有効期限内にPlayストアでキャンセルする。その購読の有効期限内に再購読をするとキャンセルした購読のpurchaseTokenとなる。


アップグレード/ダウングレードかどうかを見極めるには

金額
アイテム
期間      

300円
アイテムA
1ヶ月      

600円
アイテムB
1ヶ月      

アイテムAからBに変更した場合とします。

:one: Aを4/1に登録すると、次の更新日は5/1となる。このときの課金状態は以下となる(purchaseTokenをAAAとする)

Key
詳細

startTimeMillis
2018/4/1 xx:xxをミリ秒で表す。

expiryTimeMillis
2018/5/1 xx:xxをミリ秒で表す。

autoRenewing
true

paymentState
1

orderId
購入に関連付けられた最新の定期注文の注文ID。

:two: 4/10にBに乗り換える。この時点でBに変更となる。次の更新日は4/20となる。(Bで購入したpurchaseTokenをBBBとする※)

このときのAの課金状態は以下となる

Key
詳細

startTimeMillis
2018/4/1 xx:xxをミリ秒で表す。

expiryTimeMillis
2018/4/10 xx:xxをミリ秒で表す。乗り換えを実施した時間となる。

autoRenewing
false

cancelReason
2

このときのBの課金状態は以下となる

Key
詳細

startTimeMillis
2018/4/10 xx:xxをミリ秒で表す。乗り換えを実施した時間となる。

expiryTimeMillis
2018/5/20 xx:xxをミリ秒で表す。

autoRenewing
true

paymentState
1

linkedPurchaseToken
アップグレード前のpurchaseTokenとなるので「AAA」となる。

linkedPurchaseTokenがある時点で、再購読かアップグレードかダウングレードは確定となる。

あとはlinkedPurchaseTokenとサーバ側で保持しているデータを参照してどのアイテムからどのアイテムへの変更なのかを検証できればよさそう。またlinkedPurchaseTokenの課金状態のcancelReasonを見てもわかりそうですね。


まとめ

linkedPurchaseTokenを使えばどういった課金の変更なのかを追えて便利ですね:sparkles: