Slide 1

Slide 1 text

Play Billing Library 7.0.0 変更点まとめ potatotips #88

Slide 2

Slide 2 text

自己紹介 kako351 / @kako_351 株式会社ZOZO Androidエンジニア ● バイク(ハンターカブ) ● ギター ● コーヒー自宅焙煎 趣味

Slide 3

Slide 3 text

本日話す内容 Play Billing Library 7.0.0での変更点を以下の分類で紹介します ● 新機能 ● 削除されたAPI ● 非推奨になったAPI 💡 Play Billing Library は Androidのアプリ内課金ライブラリです

Slide 4

Slide 4 text

新機能 1. 分割払い定期購入をサポート
 2. プリペイド プランの保留中の取引をサポート
 3. offerTokenが空の場合例外を返す


Slide 5

Slide 5 text

分割払い用の InstallmentPlanDetails API が追加。 ● getInstallmentPlanCommitmentPaymentsCount ○ ユーザーがプランを購入時、コミットされた支払い回数を返す ○ 12回払いのプランなら12が返る ● getSubsequentInstallmentPlanCommitmentPaymentsCount ○ プランが更新された後の支払い回数を返す ○ 12回払いのプランを更新した場合、12が返る 分割払い定期購入をサポート ※現在は、ブラジル、フランス、イタリア、スペインでのみ


Slide 6

Slide 6 text

● 保留中の取引を有効 ○ enablePrepaidPlans() と enablePendingPurchases(PendingPurchaseParams) を使用すると、 定期購入のプリペイド プランの保留中の取引を有効になる。 ● 保留中のプランの変更サポート ○ Purchase.PendingPurchaseUpdate ■ 既存の購入に対して、保留中のチャージや変更を取得できる 定期購入のプリペイド プランの保留中 の取引をサポート

Slide 7

Slide 7 text

● ユーザーが購入するオファーを指定するsetOfferTokenが空の場合例外を返すよう になりました。 offerTokenが空の場合例外を返す BillingFlowParams.ProductDetailsParams.newBuilder() .setProductDetails(productDetails) .setOfferToken(selectedOfferToken) // これを忘れると例外 .build() ただし、setOfferTokenは1回だけ課金商品(OneTime Purchase)の場合は指 定してはいけないので注意が必要です

Slide 8

Slide 8 text

削除されたAPI 1. enablePendingPurchases() サポート終了
 2. AlternativeBilling系の関数削除
 3. setOldSkuPurchaseToken() の削除


Slide 9

Slide 9 text

PendingPurchasesParams とenablePendingPurchases(PendingPurchaseParams) を追加 enablePendingPurchases() サポート終了 BillingClient.newBuilder(context) .setListener(/* …. */) .enablePendingPurchases() .build() BillingClient.newBuilder(context) .setListener(/* …. */) .enablePendingPurchases( PendingPurchasesParams .newBuilder() .enableOneTimeProducts() .build() ) .build()

Slide 10

Slide 10 text

GooglePlay以外での課金方法を有効にするいくつかの関数が削除。今後は UserChoiceBillingを使用する。 ● 削除された関数 ○ BillingClient.Builder.enableAlternativeBilling() ○ AlternativeBillingListener ○ AlternativeChoiceDetails ● 代わりに使用する関数 ○ BillingClient.Builder.enableUserChoiceBilling() ○ UserChoiceBillingListener ○ UserChoiceDetails AlternativeBilling系の関数削除

Slide 11

Slide 11 text

setOldSkuPurchaseToken()が削除、代わりにsetOldPurchaseToken(purchaseToken)を使 う setOldSkuPurchaseToken() の削除 BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOldSkuPurchaseToken(purchaseToken) .build() BillingFlowParams.SubscriptionUpdateParams.newBuilder() .setOldPurchaseToken(purchaseToken) .build()

Slide 12

Slide 12 text

非推奨に なったAPI 1. queryPurchaseHistoryAsyncが非推奨
 a. 確認済み購入と保留中の購入 
 b. 消費した購入の取得 
 c. 過去の購入を保持する例 
 (今日はこれを話に来た!)

Slide 13

Slide 13 text

BillingClient.queryPurchaseHistoryAsync() は非推奨となり、今後のリリースで削 除される予定。 ● 確認済み購入と保留中の購入の取得 ○ BillingClient.queryPurchasesAsync() を使用して、有効な購入を取得 ● 消費した購入の取得 ○ デベロッパーは、消費した購入を独自のサーバーで追跡する必要がある ● キャンセルされた購入の取得 ○ voided-purchases デベロッパー API を使用 queryPurchaseHistoryAsyncが非推奨

Slide 14

Slide 14 text

● BillingClient.queryPurchasesAsync() ○ 有効なサブスクリプションと消費されていない1回限りの購入のみが返される ○ GracePriod(猶予期間)の場合は購入が返ってくる ○ AccountHold(一時停止)の場合は返ってこない ○ 期限切れの場合は返ってこない ● queryPurchaseHistoryAsync() との違い ○ queryPurchaseHistoryAsync() は期限切れや停止された購入も含め、購入履歴すべて返ってき ていた 確認済み購入と保留中の購入の取得

Slide 15

Slide 15 text

消費した購入(過去の購入履歴)を保持しておきたい場合は、In-App Purchases APIやRTDN(リアルタイムデベロッパー通知)などを利用し、独自でバックエン ド処理を行う必要がある。 消費した購入の取得

Slide 16

Slide 16 text

RTDNを利用して購入プランが更新されるたびにDBに履歴を保持。バックエンド にはFirebaseを利用。 過去の購入を保持する例(個人アプリ) Firestore
 Firebase Functions 
 購入
 Google Play
 RTDN
 更新やキャンセル
 新規購入
 購入履歴


Slide 17

Slide 17 text

● 分割払いやプリペイドプランのサポート追加 ● 削除されたAPIは代替APIがあるので移行しましょう ● queryPurchaseHistoryAsyncが非推奨になったので、ユースケースごとに代替 処理に変更するのがよい。 ○ 購入履歴を保持したい場合は独自でサーバー側の処理が必要。 まとめ

Slide 18

Slide 18 text

● https://developer.android.com/google/play/billing/release-notes?hl=ja ● https://developer.android.com/reference/com/android/billingclient/api/Billi ngClient#queryPurchasesAsync ● https://developer.android.com/reference/com/android/billingclient/api/Billi ngFlowParams.ProductDetailsParams.Builder#setOfferToken(java.lang.String) ● https://zenn.dev/attomicgm/articles/about_google_billing_query_purchase 参考

Slide 19

Slide 19 text

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