Play Billing Library 4.1.0の定期購入の支払い失敗通知機能を試してみた
2022年2月23日にPlay Billing Library 4.1.0がリリースされ、定期購入の支払い失敗通知機能が利用できるようになりました。
https://developer.android.com/google/play/billing/release-notes?hl=en#4-1
いままでであれば、開発者が支払いの失敗をサーバー側で検知し、支払い失敗状況をサーバーから取得してユーザーに通知するUIを作る必要がありました。しかし、これを利用することにより、アプリで定期購入の支払いの失敗を検知し、猶予期間やアカウント保留状態に入ってしまったユーザーへの支払い情報の更新をSnackbarで通知し、Snackbar上の更新ボタンを押すことで支払い情報をアプリ内で更新できるようになります。
本記事では、定期購入の支払い失敗通知機能の表示例や実装方法について簡単に紹介します。
表示例
まずはどのように表示されるかを見てみましょう。
画面の下部にSnackbarでGoogle Playのロゴが表示され、その後定期購入の支払いに失敗していることが表示されます。
更新ボタンを押すと支払い情報の更新画面がアプリ内で表示され、支払い情報の更新がアプリ内でできます。
情報を更新したら、再び定期購入の機能が利用できるようになります。
実装方法
実装方法は公式ドキュメントに記載のとおり、次のように実装します。
まずInAppMessageParamsでInAppMessageCategoryId.TRANSACTIONAL
を設定し、アプリ内メッセージを有効にします。これにより、Google Playは猶予期間とアカウント保留中のメッセージを1日に1回ユーザーに表示し、アプリを終了せずに支払い情報を修正できるようにします。
次に、このパラメータをBillingClient#showInAppMessagesに渡して、アプリ内メッセージを表示します。支払いに失敗していればSnackbarが表示されますし、失敗していなければNO_ACTION_NEEDEDのコールバックが返却され、何も表示しません。
Snackbarが表示された場合、更新ボタンを押すと支払い情報の更新画面が表示されます。
支払い情報の更新をした場合は SUBSCRIPTION_STATUS_UPDATE がコールバックに返却されます。purchaseTokenも同時に取得できるため、自社サーバーに購入トークンを送信するなどして、支払状況の更新なども必要があればここで行います。
支払い情報の更新をしていない場合は、 NO_ACTION_NEEDED がコールバックに返却されます。この場合は何もする必要はありません。このケースでは支払いは失敗したままですが、ドキュメントには1日1回ユーザーに表示するとあるので、ここで更新をしなかった場合でも1日後にアプリを開けば再度メッセージが表示されると思われます。
ちなみに、更新ボタンを押さずに画面を閉じようと端末の戻るボタンを押したところ画面が閉じれなくなっていたため、端末の戻るボタンが無効化されているようでした。画面上に表示されているボタンは普通に押せるので、Toolbarの戻るボタン等からは画面を閉じることができます。
注意点としてはonBillingSetupFinished後でないと動作しないため、onBillingSetupFinished後にshowInAppMessagesを呼んであげるようにしましょう。
検証する際は支払い情報を更新せずに閉じてしまうと、テスト購入であっても1日1回の表示制限は変わりません。そのため、検証時にSnackbarを再表示したい場合は、Google Playアプリのアプリ内データを削除してあげることで再表示できます。アプリ内データの削除は端末の設定から行うか、次のコマンドで削除できます。
adb shell pm clear com.android.vending
まとめ
今回は、Play Billing Library 4.1.0から追加された定期購入の支払い失敗通知機能について簡単に紹介しました。メソッド一つ呼ぶだけで支払い失敗状況の検知とユーザーへの通知まで行ってくれるため、いままでよりも簡単に支払い失敗の通知と支払い情報の更新を促せるようになりました。
わりと簡単に実装できて、非自発的解約の防止にも繋がる機能なので、支払い失敗を通知する機能を実装していない場合は、こちらの機能を使ってみることをおすすめします。