【2020年版】Play Commerceアップデート対応
こんにちは、@syarihuです。
Google Playの課金関連のアップデートやPlay Billing Libraryのアップデートは毎年Google I/Oで発表されていました。しかし、2020年は昨今の状況によりGoogle I/O 2020は中止となってしまったため、毎年Google I/Oのセッションで行っているような発表はYouTubeの動画で公開されました。
Google I/O 2019ではPlay Billing Libraryのロードマップが発表されたり、Play Billing Library 2.0が公開され、Play Billing Libraryに関連する数多くのアップデートがありました。
2020年はPlay Billing Library 3.0が発表され、ライブラリに関連する多くのアップデートがあるのかと予想していました。しかし、2020年はPlay Billing Library 3.0の発表はあったものの、ライブラリ自体には大きな新機能などのアップデートはなく、Google Playの定期購入に関連するいくつかの発表がありました。
本記事では、今回発表された対応必須の対応や新しい機能について、いつまでにどのような対応が必要になるのかについて解説します。
Play Commerceロードマップ
YouTubeで公開された「What's new in Play Commerce」にて、次のようなロードマップが発表されました。
まずPlay Billing Libraryについてです。Google I/Oが中止されたため、本来であればGoogle I/O 2020で発表される予定だったPlay Billing Library 3.0が6月3日に公開されました。2019年の発表では毎年Play Billing Libraryのメジャーバージョンアップがされること、そして発表されてから2年間サポートされることが発表されました。2020年はそれに加えて2021年の8月2日から新規で公開するアプリでアプリ課金を実装する場合はPlay Billing Library 3.0以上が必須になること、アプリのアップデートを行う場合は2021年の11月1日からPlay Billing Library 3.0以上が必須になることが発表されました。
今回のロードマップ上には記載はありませんが、Play Billing Library 1.xと2.x、そしてAIDLのサポートについてはGoogle I/O 2019では2021年5月にサポート終了するとの発表がありましたが、少し期間が伸びて新規アプリは2021年8月、既存アプリは2021年11月にサポート終了することになりました。そのため、Google Playの課金機能を提供するアプリは、新規アプリは2021年の8月2日まで、既存アプリは2021年の11月1日までには必ずPlay Billing Library 3.x以上に移行する必要があります。
次にGoogle Playの定期購入についてです。今までは対応必須ではなかったAccount HoldとRestoreの機能が2020年の11月1日から有効にすることが必須になりました。また、新たにPaused SubscriptionとResubscribeの機能が追加され、2020年11月1日からデフォルトで有効になりました(後から無効にすることは可能)。
2020年11月までに対応しなければならない機能
すでにGoogle Playに公開されているアプリにおいて、2020年11月1日までに対応しなければならないのは次の2つです。
- Account Hold
- Restore
Account HoldはGrace Period(猶予期間)が終わった後に発生する状態です。Grace Periodは対応必須ではありませんが、Account Holdを対応するのであればGrace Periodも対応しておきたいところです。
Account Holdの解説をする前にGrace Periodを知っておいたほうがAccount Holdの理解がしやすいため、先にGrace Periodについて解説します。
Grace Period(猶予期間)
Grace Period(猶予期間)とは、定期購入の更新時にクレジットカードの期限切れなどで支払いに失敗した場合に入る期間です。定期購入が猶予期間に入っている間は、ユーザーは定期購入により提供されている機能を引き続き利用できます。
猶予期間は3日、7日、14日、30日のいずれかの期間をPlay Console上から課金アイテムごとに設定できます。猶予期間が終了すると、ユーザーは定期購入により提供されている機能を利用できなくなります。
定期購入の有効期間から猶予期間が終了して定期購入が自動キャンセルされるまでの流れを図にすると、次のようになります。
図中のqueryPurchases()はPlay Billing LibraryのBillingClientにあるメソッドで、アプリから購入情報を取得できるかを表しています。猶予期間中はアプリから購入情報は取得できますが、現在猶予期間であるかどうかの判別ができません。
定期購入の継続課金に失敗し、猶予期間であることをアプリ上からユーザーに通知して支払いの解決を促してあげるためには、Google Play Developer APIもしくはReal-time Developer Notificationsを使って猶予期間であることを検知し、自社サーバーのAPIからその状態を返してあげる必要があります。
また、猶予期間に入ると定期購入の有効期間が猶予期間分、動的に延長されるため、自社サーバーで定期購入サービスの課金状況を保持している場合には定期購入サービスの有効期間を延長するなどの対応が必要になります。
猶予期間に入るとGoogle Playからユーザーに対してメールやGoogle Playアプリにて通知はされますが、それでは気づかないユーザーもいます。猶予期間に対応する場合は、アプリ上からも猶予期間であることを通知し、支払いの解決を促すような仕組みを実装するとよいでしょう。
猶予期間は今回は必須の対応ではありませんが、定期購入サービスが意図せず解約されてしまうことを防ぐためにはとても有効な手段です。Account Holdを有効化することを機に、ぜひ猶予期間も有効にすることを検討してみてください。
Account Hold(アカウント保留)
Account Hold(アカウント保留)とは、ユーザーの支払いが失敗して猶予期間に入ったあと、猶予期間中に支払いが解決しなかった場合に猶予期間が終わった後に始まる定期購入の状態です。定期購入がアカウント保留状態になったら、定期購入サービスを利用できなくする必要があります。アカウント保留は最大30日間続きます。
2020年11月1日以降、Playストアの課金を提供するすべての開発者はAccount Holdに対応する必要があります。
定期購入の有効期間からアカウント保留期間が終了して定期購入が自動キャンセルされるまでの流れを図にすると次のようになります。
猶予期間ではアプリから購入情報を取得できましたが、アカウント保留期間に入るとアプリからは購入情報の取得もできなくなります。猶予期間と同様に、現在アカウント保留状態であることはアプリからは判別できません。アカウント保留状態であることを判別するには、Google Play Developer APIもしくはReal-time Developer Notificationsを使う必要があります。
アカウント保留状態では購入情報が取得できず、定期購入サービスの有効期間も切れています。つまり課金していないのとほぼ同じ状態です。そのため、Androidアプリで提供している定期購入サービスを他のプラットフォームにも提供している場合、アカウント保留状態であることをサーバー側で検知してあげなければ、他のプラットフォームで課金することが可能になってしまうため、Google Playでアカウント保留状態を解決した場合に2重課金されてしまう可能性があります。
アカウント保留を有効にする際には、次の2点を確認した上で有効にしましょう。
- アカウント保留状態になった場合、保留状態であることを自社サーバーで検知し、他プラットフォームで課金できないようになっているか
- ユーザーがアカウント保留状態を解決した場合に、アプリからアカウント保留が解決されたことを自動検知し、自社サーバーに送信するようになっている、もしくはReal-time Developer Notifications等を使ってサーバー側で自動検知できるようになっているか
自社サーバーがユーザーの課金状態の変更を自動で検知できるようになっていれば、特に問題無くアカウント保留を有効にできます。
アカウント保留状態になったときも、猶予期間と同様にGoogle Playからユーザーに対してメールやGoogle Playアプリにて通知はされますが、やはり気づかないユーザーもいるでしょう。
2020年11月1日までに対応が必須なのは前述した2点の対応が主ですが、猶予期間と同様にユーザーに支払いを促すような通知をしてあげたほうがより親切です。アカウント保留状態の場合もアプリからユーザーに対してアカウント保留状態であることを通知し、支払いを促せるような仕組みを作っておくとよいでしょう。
Restore(定期購入の復元)
Restore(定期購入の復元)とは、ユーザーが自発的にキャンセルした定期購入(以降、分かりやすいように解約予約と表現します)が実際に解約されるまでの間に、ユーザーが解約予約をキャンセルできる機能です。解約予約のキャンセルはPlayストアアプリなどからアクセスできるGoogle Play Subscriptions Center(定期購入管理画面)から行えます。Restoreは、後述するResubscribeの一部の機能です。
2020年11月1日以降、Playストアの課金を提供するすべての開発者はRestoreに対応する必要があります。
まず、定期購入の有効期間中にユーザーが自発的に解約予約を行い、実際に解約されるまでの流れを図にすると次のようになります。
解約予約をすると自動更新がオフとなり、autoRenewingはfalseが返ってきます。その後、定期購入の期間が終わるとReal-time Developer NotificationsではSUBSCRIPTION_EXPIREDが通知され、定期購入が解約されます。
Restoreはこの解約予約期間中に解約をキャンセルできる機能です。解約予約期間中に解約をキャンセルするまでの流れを図にすると次のようになります。
解約予約期間にユーザーが解約をキャンセルすると、autoRenewingがtrueになり、元の状態に復元されていることが分かります。定期購入の有効期間は解約予約をキャンセルするとReal-time Developer NotificationsにはSUBSCRIPTION_RESTARTEDが通知されます。
RestoreはGoogle Play Subscriptions Centerからしか行なえないことと、Purchase Tokenや定期購入の有効期間も変わらないため、基本的には特に対応は必要ありません。
ドキュメントには画面上には「Restore」ボタンがありますが、2020年7月16日現在、Playストアアプリから確認できる画面には「Resubscribe」と書いてあり、違う機能のように見えます。
2020年7月16日現在のResubscribeボタンを押すと解約予約のキャンセルが行われ、定期購入の有効期間も変わりません。そのため、これは今後Subscriptions画面がドキュメントに記載されているような画面に変わるのだと推測されます。
2020年11月からデフォルトで有効になる機能
次に、今回新しく発表された機能で、2020年11月からはデフォルトで有効になる機能について解説します。
新しく追加されたのは次の2つの機能です。
- Resubscribe
- Paused Subscriptions
簡単に言うと、Paused Subscriptionは定期購入を一時停止できる機能で、Resubscribeはアプリ内またはGoogle Play Subscriptions Centerから定期購入を再購入できる機能です。それぞれ詳しく解説します。
Resubscribe(定期購入の再購入)
Resubscribeは、解約予約した定期購入を再購入できる機能です。再購入には次の3つのパターンがあります。
- 解約予約した定期購入の有効期限が切れる前に、アプリ内から定期購入を再購入する
- 解約予約した定期購入の有効期限が切れる前に、Google Play Subscriptions Centerから定期購入を再購入する
- 定期購入の有効期限が切れた後に、Google Play Subscriptions Centerから最大1年間、同じSKUを再購入する
2つ目の「解約予約した定期購入の有効期限が切れる前に、Google Play Subscriptions Centerから定期購入を再購入する」が、前述したRestoreです。そのため、RestoreはResubscribeの一部の機能ということになります。
定期購入の有効期限が切れる前と切れた後でそれぞれ詳しく見ていきます。
定期購入の有効期限が切れる前
ユーザーは、解約予約状態の定期購入を有効期限が切れる前であれば、解約予約をキャンセルできます。解約予約のキャンセルはGoogle Play Subscriptions Centerまたはアプリ内のどちらかから再購入できます。
Google Play Subscriptions Centerからの購入は前述したRestoreと同じなので、まだ読んでいない場合はRestoreの説明を見てください。アプリ内からの復元が今回新しく追加された機能で、Restoreと少し挙動が違います。
アプリ内から再購入する場合は、定期購入の有効期間は同じですが、Purchase Tokenが新しく生成されます。そのため、自社サーバーで定期購入状況を管理している場合は、定期購入のアップグレードやダウングレードの場合と同じように、Purchase Tokenを新しく生成されたものに置き換える必要があります。
アプリ内から再購入できるようにする場合は、isAutoRenewingがfalseかどうかでアプリまたはGoogle Play Developers APIから解約予約中かを判別できるため、再購入であることが分かるように「再購入」ボタンを設置する必要があります。しかし、だいたいのアプリはそもそも定期購入が既に購入されている場合は購入導線を出していないと思います。
あえてアプリ内から購入可能にすると考慮しなければならない点が増えてややこしくなるので、アプリ内に再購入動線を出すくらいならGoogle Play Subscriptions Centerを開く導線を設置するのがおすすめです。
Resubscribeを考えたときに気になるのが定期購入のアップグレードやダウングレードです。定期購入の解約予約中でも違う期間の定期購入にアップグレードまたはダウングレードができます。
定期購入のアップグレードやダウングレードは、解約予約中でなくても以前の定期購入が即解約され、新しい定期購入を購入する仕組みになっています。そのため、普通にPurchase Tokenは変更されますし、以前のプランは即解約されるため、これはResubscribeではないので特に気にする必要はありません。
定期購入の有効期限が切れた後
Play Billing Library 2.0以上を使用している場合、ユーザーは定期購入の有効期限が切れてから最大1年間、Google Play Subscriptions Centerから定期購入を再購入できます。
この購入はアプリの外部で行われるため、アプリ側で購入を検知して自社サーバーに購入情報を送信するなどの対応が必要になります。
このResubscribeについてはデフォルトで有効にはなりますが、SKUごとにあとから設定を無効化することもできるため、すぐに対応するのが難しい場合は無効化しておくのがよいでしょう。
Paused Subscriptions(定期購入の一時停止)
Paused Subscriptionsは、ユーザーが自発的に定期購入を一時停止できる機能です。ユーザーが定期購入を一時停止できるようにすることで、自発的な解約を防ぐことができます。
Paused Subscriptionsを有効にすると、ユーザーは定期的な期間に応じて一週間から3ヶ月の期間、定期購入を一時停止できます。しかし、年間定期購入は一時停止できません。
Paused Subscriptionsは、現在の請求期間が終了した後にのみ、有効になります。つまり、ユーザーが定期購入の一時停止をリクエストすると、定期購入の一時停止が予約され、現在有効な定期購入期間が終わったあとに定期購入の一時停止期間が開始します。
ユーザーが定期購入を一時停止してから、Account Hold状態に入るまでの図がドキュメントに記載されていたので、それを引用して説明します。
定期購入が一時停止されている間、ユーザーは定期購入によって提供されるサービスにアクセスできません。一時停止期間が終了すると、定期購入が再開し、Googleは定期購入の更新を試みます。定期購入の購入が成功すると、定期購入が再び有効になります。カードの有効期限切れなどの問題で購入に失敗し、定期購入の再開に失敗した場合は、Account Hold状態になります。
定期購入の再開が成功した場合は次のようになります。
ユーザーは一時停止期間中、いつでも手動で定期購入を再開できます。ユーザーが手動で再開すると、請求日が手動で再開した日に変わります。
定期購入の一時停止を有効にする場合は、次の2点を確認しておくとよいでしょう。
- 定期購入が一時停止状態になった場合、一時停止状態であることを自社サーバーで検知し、他プラットフォームで課金できないようになっているか
- 自動で再開された、もしくはユーザーが手動で定期購入を再開した場合に、定期購入の再開をアプリまたは自社サーバーで自動検知し、購入情報が自社サーバーに送信されるようになっているか
Paused Subscriptionsもデフォルトで有効になりますが、後から無効にすることもできます。Grace PeriodやAccount Holdと同じく、こちらもユーザーの解約を防ぐための施策としては有効ですが、すぐに対応するのが難しい場合は無効にしておくのがよいでしょう。
Play Billing Library 3.0について
Play Billing Library 3.0は2020年6月3日に公開されました。
Google Playのアプリ内課金を利用する場合、新規アプリは2021年の8月2日から、既存アプリは2021年の11月1日から、Play Billing Library 3.0以上を利用することが必須になります。もし対応しない場合はアプリが公開できません。
今回は1から2へのアップデートとは違い、大きな変更はありませんでした。すでにPlay Billing Library 2.xを使っている場合は3.xに移行するのは難しくは無いので、早めにアップグレードしておくのがよいでしょう。
まだAIDLやPlay Billing Library 1.xを使っている場合は、Play Billing Library 2.xへの移行は対応しなければならないことが多いです。アップグレード期限まで約1年ありますが、課金の対応ということもあり検証等にも時間がかかるため、今年のうちにはロードマップに乗せるなり、開発を始めるなどしておいたほうがよいでしょう。
AIDLからPlay Billing Libraryへの移行については、Googleが移行ガイドを用意してくれています。ぜひ確認してください。
AIDL to Google Play Billing Library migration guide
https://developer.android.com/google/play/billing/migrate
Play Billing Libraryを使った実際の実装や、Play Billing Library 2.xからの新しい機能、機能や実装の解説、実装する上でのハマりどころなどについては、DroidKaigiの公式チャンネルにて私が発表した動画がありますので、こちらも参考にしてみてください。
おわりに
Grace PeriodやAccount Holdは、対応することでユーザーの定期購入の非自発的な解約への対策にはとても有効です。もしまだ対応していない場合はぜひ対応するとよいでしょう。
今回紹介した機能やPlay Billing Libraryは、ハマりどころが多く大変なことも多いですが、うまく利用することでよりよい課金機能をユーザーに提供できます。ぜひ積極的に活用していきましょう。
それでは、よい課金ライフを。
謝辞
今回この記事を書くにあたり、@ymndさんに多くのご協力をいただきました。この場を借りてお礼申し上げます。
参考情報
- What’s new in Play Commerce — YouTube
https://youtu.be/gnrNckXeSjQ - Android Developers Blog: Meet Google Play Billing Library Version 3
https://android-developers.googleblog.com/2020/06/meet-google-play-billing-library.html - Google Play Billing Library release notes | Android Developers
https://developer.android.com/google/play/billing/release-notes - Sell subscriptions | Android Developers
https://developer.android.com/google/play/billing/subs - Purchases.subscriptions | Google Play Developer API
https://developers.google.com/android-publisher/api-ref/purchases/subscriptions - Real-time developer notifications reference guide | Android Developers
https://developer.android.com/google/play/billing/rtdn-reference?hl=en#sub-example - Integrate the Google Play Billing Library into your app
https://developer.android.com/google/play/billing/integrate#life - DroidKaigi 2020 — Re:ゼロから始めるPlay Billing Library / syarihu [JA] — YouTube
https://youtu.be/UjZxICZXOa8
サブスクリプションライフサイクル
ドキュメントにBillingClientから取れる値と、Google Play Developer APIから取れる値の状態ごとの分かりやすい比較表が記載されているので、迷ったら参考にしてみてください。