Save 37% off PRO during our Black Friday Sale! »

Billing Client 2.0 acknowledgement

2d855b951ff3160c55915821261432f9?s=47 uzzu
July 23, 2019

Billing Client 2.0 acknowledgement

2d855b951ff3160c55915821261432f9?s=128

uzzu

July 23, 2019
Tweet

Transcript

  1. Billing Client 2.0 Acknowledgement Cookpad Inc. ユーザ・決済基盤部 @uzzu

  2. 今日覚えて帰る事 •Billing Client 2.0より
 ユーザのGoogle Play決済を
 開発者が承認する必要がある(Acknowledgement) •Acknowledgementはサーバサイドでやる •Consumableな商品でも
 サーバサイドでacknowledgeしてからconsumeする

  3. Android App Google Play Service API Google API ᶃαʔϏεͷ஫จίʔυऔಘ ᶄ(PPHMF1MBZܾࡁΛ࣮ࢪ

    ᶅϨγʔτ ߪೖ৘ใ ͱᶃΛૹ৴ ᶇ DPOTVNF ɺॴ࣋঎඼ͷ৘ใߋ৽ɺߪೖ׬ྃ௨஌ ᶆϨγʔτอଘɺݕূɺ஫จඥ෇ɺ঎඼෇༩
  4. Android App Google Play Service API Google API ᶃαʔϏεͷ஫จίʔυऔಘ ᶄ(PPHMF1MBZܾࡁΛ࣮ࢪ

    ᶅϨγʔτ ߪೖ৘ใ ͱᶃΛૹ৴ ᶆϨγʔτอଘɺݕূɺ஫จඥ෇ɺ঎඼෇༩ ᶇܾࡁͷঝೝ ᶈ DPOTVNF ɺॴ࣋঎඼ͷ৘ใߋ৽ɺߪೖ׬ྃ௨஌
  5. 決済の承認(Google API) •SkuType.INAPP
 Purchases.products: acknowledge
 https://developers.google.com/android-publisher/api-ref/purchases/products/acknowledge •SkuType.SUBS
 Purchases.subscriptions: acknowledge
 https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/acknowledge

  6. Google APIの挙動 •古いアプリではBilling Client1.x使ってると
 最初からacknowledged: trueになってるけど
 acknowledged: trueな状態でacknowledge APIって
 叩けるの?

    •1.xで新developer payloadを書き込める条件って
 どうなってるの? •etc…
  7. 5月中旬のわい とりあえず試しにAPI叩いて洗い出して行けそうな気がしてきた。クライアントライブラリ実装は終わった。

  8. 7月上旬のわい もう大体できてるしいけるいける。techlifeも草稿書くぞ〜

  9. 直後 ʊਓਓਓਓਓਓʊ ʼɹ࢓༷มߋɹʻ ʉY^Y^Y^Y^Y^Y^ʉ

  10. Purchases.products: acknowledge •1.x, 2.x共通
 consume後のacknowledgeはstatus: 500
 処理フローとしてconsumeした後にacknowledgeする事は無いはずなので回避可 •1.x
 承認期限の概念なし。consume後でなければ問題なく呼べる •2.x


    期限後の呼出はstatus: 500
 そもそも purchaseType == 1 (canceled)となっているので回避可
 承認期限を過ぎるとアプリ上でレシート取得できなくなる
 ※2019/07/12時点
  11. Purchases.subscriptions: acknowledge •1.x
 承認期限の概念は無い
 ただ、次の定期購入期間に入ってacknowledgeすると
 status 400, reason: subscriptionNotOwnedByUser
 →ログに残して一応監視するが無視(成功扱い)という事に

    •2.x
 期限後の呼出はstatus: 400, reason: subscriptionNotOwnedByUser
 期限後はアプリ側でレシート取得できなくなる
 
 ※2019/07/12時点
  12. developerPayload •新developerPayload
 IABv3 AIDL時代のとはやっぱり思想が違う感(個人の感想です) •acknowledgeが成功し、developerPayloadの書込も成功した 後の挙動
 同じdeveloperPayloadでの再acknowledgeは
 status: 200
 違うdeveloperPayloadでの再acknowledgeは


    status: 400, reason: alreadyAcknowledged ※2019/07/12時点
  13. Google APIの挙動まとめ •ここまでのスライド内容を参考にしてもいいけど
 一度手前でAPI叩いてみるのをオススメ

  14. 決済の承認はアプリ内でもできるが •BillingClient#acknowledgePurchase
 https://developer.android.com/reference/com/android/billingclient/api/ BillingClient.html#acknowledgePurchase(com.android.billingclient.api.AcknowledgePurchaseParams, %20com.android.billingclient.api.AcknowledgePurchaseResponseListener) •アプリ改ざんに弱いのでオススメできない
 ちゃんとやるならサーバサイドで承認するのが良い
 特に都度課金

  15. どういう事? BDLOPXMFEHF1VSDIBTFΛ
 ݺ͹ͳ͍Α͏ʹ BQLΛվ͟Μ ՝ۚΞΠςϜΛߪೖ͢Δ ՝ۚΞΠςϜ͕෇༩͞ΕΔ վ͟ΜʹΑͬͯະঝೝ ೔ޙܾࡁ͕Ωϟϯηϧ͞Ε ՝ۚΞΠςϜ͕࠶ߪೖՄೳʹͳΔ ՝ۚΞΠςϜΛ࢖༻͢Δ

    ͔Θ͍͍
  16. アプリでの対策コスト考えると •よっぽどの事がない限り
 サーバサイドでacknowledgeしておいた方が
 改ざん対策やこれを考慮した複雑な処理フローにするより
 容易に決済の承認を実現できる…はず •Consumable productsではconsumeAsync()すれば良いと
 release notesに記載されているが
 サーバサイドでacknowledgeしてからconsumeするように

    •(サーバサイドでconsumeさせてほしい…)
  17. まとめ •Billing Client 2.0より
 ユーザのGoogle Play決済を
 開発者が承認する必要がある(Acknowledgement) •Acknowledgementはサーバサイドでやる •Consumableな商品でも
 サーバサイドでacknowledgeしてからconsumeする