Slide 1

Slide 1 text

Play Billing Library 2.0 shibuya.apk #36 2019/08/01 (Thu) @syarihu

Slide 2

Slide 2 text

登壇の経緯

Slide 3

Slide 3 text

https://twitter.com/mhidaka/status/1153942417021648896

Slide 4

Slide 4 text

https://twitter.com/syarihu/status/1153942881373003778

Slide 5

Slide 5 text

https://twitter.com/syarihu/status/1153942929745969152

Slide 6

Slide 6 text

https://twitter.com/syarihu/status/1153943259422478337

Slide 7

Slide 7 text

わずか3分のできごとでした

Slide 8

Slide 8 text

自己紹介

Slide 9

Slide 9 text

Taichi Sato (@syarihu) ● Money Forward, Inc. ○ Android Engineer ● TechBooster

Slide 10

Slide 10 text

Play Billing Library

Slide 11

Slide 11 text

Play Billing Libraryとは ● Google Playの課金サービスであ るPlay Billingと連携するための AIDLを抽象化したライブラリ

Slide 12

Slide 12 text

Play Billing Libraryとは ● AIDLはライブラリ内部に隠蔽 されたので実装が楽になった ● いまGoogle Playの課金を実装す るならこれを使わないとダメ

Slide 13

Slide 13 text

Play Billing Libraryとは ● 2017年の9月に1.0が正式リリー ス ○ 2019年7月現在の最新は 2.0.2

Slide 14

Slide 14 text

IO19での発表

Slide 15

Slide 15 text

What's New with Google Play Billing (Google I/O'19) https://youtu.be/N4004Set4F8

Slide 16

Slide 16 text

IO19での発表 ● Play Billing Libraryが Play Billingと連携するための 正式な方法となった

Slide 17

Slide 17 text

IO19での発表 ● Play Billing Libraryのロードマッ プ ● Play Billing Library 2.0

Slide 18

Slide 18 text

Play Billing Library ロードマップ

Slide 19

Slide 19 text

ロードマップ ● Play Billing LibraryはI/O毎に メジャーバージョンアップ ● 各メジャーバージョンは リリース後2年サポート

Slide 20

Slide 20 text

ロードマップ ● AIDL, Play Billing Library 1.xの サポートは2021年のI/Oまで

Slide 21

Slide 21 text

ロードマップ ● サポートが切れたものを利用して いると、アプリの新規公開・アップ デートはできなくなる

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

ロードマップ ● 今回の発表はビルドターゲットを最 新にするだけでアプリに簡単にPlay Billingの新しい機能を採用できるこ とを目的としている

Slide 24

Slide 24 text

ロードマップ ● メジャーバージョンアップで 毎回大きい機能がリリース されるかも…?

Slide 25

Slide 25 text

ロードマップ ● Play Billing Libraryの アップデートは計画的に

Slide 26

Slide 26 text

Play Billing Library 2.0 Overview

Slide 27

Slide 27 text

Play Billing Library 2.0 ● acknowledge ● Pending transactions ● APIの追加・変更

Slide 28

Slide 28 text

Play Billing Library 2.0 ● acknowledge ● Pending transactions ● APIの追加・変更

Slide 29

Slide 29 text

Play Billing Library 2.0 ● acknowledge ● Pending transactions ● APIの追加・変更

Slide 30

Slide 30 text

Play Billing Library 2.0 ● acknowledge ● Pending transactions ● APIの追加・変更

Slide 31

Slide 31 text

acknowledge

Slide 32

Slide 32 text

acknowledge ● Play Billing Libraryを介して行っ た全ての購入に対して acknowledge(承認)を行うこと が必須になった(2.0から)

Slide 33

Slide 33 text

acknowledge ● 購入後、3日以内に承認をしない場 合はユーザーは自動的に払い戻し を受け、Google Playは購入を取り 消す

Slide 34

Slide 34 text

acknowledge ● テスト用のライセンスアカウントでテ スト購入を行った場合は3日以内で はなく5分以内に承認を行わなけれ ば自動で取り消される

Slide 35

Slide 35 text

通常の支払いフロー

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

Google Playでの購入は正常にできているのに サービスは利用できない状態になってしまう

Slide 39

Slide 39 text

acknowledge対応した 支払いフロー

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

購入情報の登録に失敗しても 3日以内に承認されない場合は払い戻されるので安心

Slide 43

Slide 43 text

アプリ側で承認することも可能

Slide 44

Slide 44 text

アプリで通信失敗したときなどの考慮は必要

Slide 45

Slide 45 text

Pending transactions

Slide 46

Slide 46 text

Pending transactions ● 遅延支払いができる新しい 支払い方法 ● 支払いは実店舗での現金払いや 銀行振込などを想定

Slide 47

Slide 47 text

Pending transactions ● 管理対象アイテムで利用できる ● 定期購入では利用できない ○ 支払い方法の選択肢には出てこ ない

Slide 48

Slide 48 text

Pending transactions ● 発表では現金払いは日本とメキ シコで今日から利用可能って言っ ていたけれど、今のところまだ使 えない (2019年7月現在)

Slide 49

Slide 49 text

Pending transactionsの 利用例(コンビニ)

Slide 50

Slide 50 text

What's New with Google Play Billing (Google I/O'19) より引用 https://youtu.be/N4004Set4F8

Slide 51

Slide 51 text

What's New with Google Play Billing (Google I/O'19) より引用 https://youtu.be/N4004Set4F8

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

ここはサービス側が良い感じに コミュニケーションをしてあげる必要がありそう

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

保留中の購入は アカウント情報の購入履歴から確認可能

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

アプリ「外」課金が可能になった

Slide 62

Slide 62 text

今回はアプリ起動時に購入履歴をチェックしているが、 他にも支払い後3日以内に確実に承認を成功させる工夫が必要

Slide 63

Slide 63 text

Real-time Developer Notificationsとか使うと良いかも

Slide 64

Slide 64 text

ちなみにアプリが起動中の場合は普通に購入イベントが 走るので通常の購入と同じようにレシートを受け取れる

Slide 65

Slide 65 text

Pending transactions のテスト

Slide 66

Slide 66 text

Pending transactions ● Pending transactionsはテスト用 のライセンスアカウントを使ってテ ストできる

Slide 67

Slide 67 text

Pending transactions ● Play Billing Library 2.0を利用し たアプリで管理対象アイテムのテ スト購入を行うと、スローカードが 選択できる

Slide 68

Slide 68 text

No content

Slide 69

Slide 69 text

No content

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

Pending transactions ● Pending transactionsは購入が 完了状態に移行してから acknowledgeの3日間の期間が 開始される

Slide 72

Slide 72 text

Pending transactions ● テスト購入では購入完了通知が きてから5分以内に承認しないと 払い戻されるので注意

Slide 73

Slide 73 text

APIの変更・追加

Slide 74

Slide 74 text

enablePendingPurchase ● BillingClientの生成時に呼び出す ことが必須になった ● 呼び出さないと例外が発生する

Slide 75

Slide 75 text

enablePendingPurchase ● Pending transactionsをサポートし ていることを意味する

Slide 76

Slide 76 text

enablePendingPurchase

Slide 77

Slide 77 text

PurchaseState ● Pending transactions用に追加さ れた購入状態を表すステータス ● Purchaseオブジェクトに purchaseStateが追加されている

Slide 78

Slide 78 text

PurchaseState ● Purchase.PurchaseState.PENDING ● Purchase.PurchaseState.PURCHASED

Slide 79

Slide 79 text

acknowledgePurchase

Slide 80

Slide 80 text

acknowledgePurchase

Slide 81

Slide 81 text

acknowledgePurchase

Slide 82

Slide 82 text

acknowledgePurchase

Slide 83

Slide 83 text

acknowledgePurchase

Slide 84

Slide 84 text

responseCode -> ResponseResult

Slide 85

Slide 85 text

responseCode -> ResponseResult

Slide 86

Slide 86 text

queryPurchaseHistoryAsync ● 購入履歴を取得するメソッド ○ queryPurchases ○ queryPurchaseHistoryAsync

Slide 87

Slide 87 text

queryPurchaseHistoryAsync ● どちらもPurchaseのリストを取得で きるが、2つのメソッドが取得できる Purchase内のデータに違いがあっ た

Slide 88

Slide 88 text

queryPurchaseHistoryAsync ● その問題を解消するため、 queryPurchaseHistoryAsyncの 返り値はPurchaseHistoryRecord のリストになった

Slide 89

Slide 89 text

queryPurchaseHistoryAsync ● PurchaseHistoryRecordは次の データを除いてPurchaseと同じ ○ autoRenewing, orderId, packageName, purchaseState, acknowledged

Slide 90

Slide 90 text

BillingFlowParams.setSku()の削除 ● Play Billing Library 1.2で非推奨 になったsetSkuが2.0で削除され た

Slide 91

Slide 91 text

BillingFlowParams.setSku()の削除 ● setSkuの代わりに、SkuDetailsオ ブジェクトを渡すsetSkuDetailsメ ソッドに置き換える必要がある

Slide 92

Slide 92 text

BillingFlowParams.setSku()の削除 ● Play Billing Library1.2で対応済 の場合は特に対応は必要無い

Slide 93

Slide 93 text

まとめ

Slide 94

Slide 94 text

まとめ ● Play Billing Library 2.0からは acknowledge対応が必須になっ た

Slide 95

Slide 95 text

まとめ ● Pending transactionsは定期購 入のみの場合は対応不要だが、 管理対象アイテムを提供している 場合は対応が必要

Slide 96

Slide 96 text

まとめ ● レスポンスやメソッドの返り値に 変更があるので、アップデートす る場合はその点に注意

Slide 97

Slide 97 text

まとめ ● もっと実装の話もしたかったけど15 分では圧倒的に時間が足りなくて 無理でした…気になる人は懇親会 で聞いてください!

Slide 98

Slide 98 text

宣伝

Slide 99

Slide 99 text

Andoirdプログラミング 短編集 王女とカルテットの宝探 し ● Android Qのジェスチャーナ ビゲーション、ストレージ、ダ イレクトシェア ● Kotlin Coroutines Flow、 WorkManagerとAndroidの 歴史 ● Apply Changesの解説、V言 語の秘密など https://techbooster.booth.pm/items/1485567

Slide 100

Slide 100 text

ご清聴ありがとうございました