GooglePlay定期購読のアップグレード/ダウングレードの仕様についてPart2です。
サーバ側でアップグレード/ダウングレードしたのかをどうやって判断するのかについてのまとめとなります。
Part1はこちら 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に変更した場合とします。
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。 |
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を使えばどういった課金の変更なのかを追えて便利ですね