Shibuya.apk #36( https://shibuya-apk.connpass.com/event/139617/ )で発表した資料です。
Play BillingLibrary 2.0shibuya.apk #362019/08/01 (Thu)@syarihu
View Slide
登壇の経緯
https://twitter.com/mhidaka/status/1153942417021648896
https://twitter.com/syarihu/status/1153942881373003778
https://twitter.com/syarihu/status/1153942929745969152
https://twitter.com/syarihu/status/1153943259422478337
わずか3分のできごとでした
自己紹介
Taichi Sato (@syarihu)● Money Forward, Inc.○ Android Engineer● TechBooster
Play Billing Library
Play Billing Libraryとは● Google Playの課金サービスであるPlay Billingと連携するためのAIDLを抽象化したライブラリ
Play Billing Libraryとは● AIDLはライブラリ内部に隠蔽されたので実装が楽になった● いまGoogle Playの課金を実装するならこれを使わないとダメ
Play Billing Libraryとは● 2017年の9月に1.0が正式リリース○ 2019年7月現在の最新は2.0.2
IO19での発表
What's New with Google Play Billing (Google I/O'19)https://youtu.be/N4004Set4F8
IO19での発表● Play Billing LibraryがPlay Billingと連携するための正式な方法となった
IO19での発表● Play Billing Libraryのロードマップ● Play Billing Library 2.0
Play Billing Libraryロードマップ
ロードマップ● Play Billing LibraryはI/O毎にメジャーバージョンアップ● 各メジャーバージョンはリリース後2年サポート
ロードマップ● AIDL, Play Billing Library 1.xのサポートは2021年のI/Oまで
ロードマップ● サポートが切れたものを利用していると、アプリの新規公開・アップデートはできなくなる
ロードマップ● 今回の発表はビルドターゲットを最新にするだけでアプリに簡単にPlayBillingの新しい機能を採用できることを目的としている
ロードマップ● メジャーバージョンアップで毎回大きい機能がリリースされるかも…?
ロードマップ● Play Billing Libraryのアップデートは計画的に
Play Billing Library 2.0Overview
Play Billing Library 2.0● acknowledge● Pending transactions● APIの追加・変更
acknowledge
acknowledge● Play Billing Libraryを介して行った全ての購入に対してacknowledge(承認)を行うことが必須になった(2.0から)
acknowledge● 購入後、3日以内に承認をしない場合はユーザーは自動的に払い戻しを受け、Google Playは購入を取り消す
acknowledge● テスト用のライセンスアカウントでテスト購入を行った場合は3日以内ではなく5分以内に承認を行わなければ自動で取り消される
通常の支払いフロー
Google Playでの購入は正常にできているのにサービスは利用できない状態になってしまう
acknowledge対応した支払いフロー
購入情報の登録に失敗しても3日以内に承認されない場合は払い戻されるので安心
アプリ側で承認することも可能
アプリで通信失敗したときなどの考慮は必要
Pending transactions
Pending transactions● 遅延支払いができる新しい支払い方法● 支払いは実店舗での現金払いや銀行振込などを想定
Pending transactions● 管理対象アイテムで利用できる● 定期購入では利用できない○ 支払い方法の選択肢には出てこない
Pending transactions● 発表では現金払いは日本とメキシコで今日から利用可能って言っていたけれど、今のところまだ使えない(2019年7月現在)
Pending transactionsの利用例(コンビニ)
What's New with Google Play Billing (Google I/O'19) より引用https://youtu.be/N4004Set4F8
ここはサービス側が良い感じにコミュニケーションをしてあげる必要がありそう
保留中の購入はアカウント情報の購入履歴から確認可能
アプリ「外」課金が可能になった
今回はアプリ起動時に購入履歴をチェックしているが、他にも支払い後3日以内に確実に承認を成功させる工夫が必要
Real-time Developer Notificationsとか使うと良いかも
ちなみにアプリが起動中の場合は普通に購入イベントが走るので通常の購入と同じようにレシートを受け取れる
Pending transactionsのテスト
Pending transactions● Pending transactionsはテスト用のライセンスアカウントを使ってテストできる
Pending transactions● Play Billing Library 2.0を利用したアプリで管理対象アイテムのテスト購入を行うと、スローカードが選択できる
Pending transactions● Pending transactionsは購入が完了状態に移行してからacknowledgeの3日間の期間が開始される
Pending transactions● テスト購入では購入完了通知がきてから5分以内に承認しないと払い戻されるので注意
APIの変更・追加
enablePendingPurchase● BillingClientの生成時に呼び出すことが必須になった● 呼び出さないと例外が発生する
enablePendingPurchase● Pending transactionsをサポートしていることを意味する
enablePendingPurchase
PurchaseState● Pending transactions用に追加された購入状態を表すステータス● PurchaseオブジェクトにpurchaseStateが追加されている
PurchaseState● Purchase.PurchaseState.PENDING● Purchase.PurchaseState.PURCHASED
acknowledgePurchase
responseCode -> ResponseResult
queryPurchaseHistoryAsync● 購入履歴を取得するメソッド○ queryPurchases○ queryPurchaseHistoryAsync
queryPurchaseHistoryAsync● どちらもPurchaseのリストを取得できるが、2つのメソッドが取得できるPurchase内のデータに違いがあった
queryPurchaseHistoryAsync● その問題を解消するため、queryPurchaseHistoryAsyncの返り値はPurchaseHistoryRecordのリストになった
queryPurchaseHistoryAsync● PurchaseHistoryRecordは次のデータを除いてPurchaseと同じ○ autoRenewing, orderId,packageName, purchaseState,acknowledged
BillingFlowParams.setSku()の削除● Play Billing Library 1.2で非推奨になったsetSkuが2.0で削除された
BillingFlowParams.setSku()の削除● setSkuの代わりに、SkuDetailsオブジェクトを渡すsetSkuDetailsメソッドに置き換える必要がある
BillingFlowParams.setSku()の削除● Play Billing Library1.2で対応済の場合は特に対応は必要無い
まとめ
まとめ● Play Billing Library 2.0からはacknowledge対応が必須になった
まとめ● Pending transactionsは定期購入のみの場合は対応不要だが、管理対象アイテムを提供している場合は対応が必要
まとめ● レスポンスやメソッドの返り値に変更があるので、アップデートする場合はその点に注意
まとめ● もっと実装の話もしたかったけど15分では圧倒的に時間が足りなくて無理でした…気になる人は懇親会で聞いてください!
宣伝
Andoirdプログラミング短編集王女とカルテットの宝探し● Android Qのジェスチャーナビゲーション、ストレージ、ダイレクトシェア● Kotlin Coroutines Flow、WorkManagerとAndroidの歴史● Apply Changesの解説、V言語の秘密などhttps://techbooster.booth.pm/items/1485567
ご清聴ありがとうございました