Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Androidのアプリ内課金をAACで実装する

Da5a59469ce3ebb55619ce34f85f8c4f?s=47 syarihu
April 10, 2019

 Androidのアプリ内課金をAACで実装する

In-tamachi Billing Nightで発表した資料です。
https://billing-night.connpass.com/event/125510/

Da5a59469ce3ebb55619ce34f85f8c4f?s=128

syarihu

April 10, 2019
Tweet

More Decks by syarihu

Other Decks in Programming

Transcript

  1. Androidの アプリ内課金を AACで実装する In-tamachi Billing Night 2019/04/10 (Wed) @syarihu

  2. Taichi Sato (@syarihu) • Money Forward, Inc. ◦ Android Engineer

    • TechBooster
  3. None
  4. 勉強会開催の経緯

  5. None
  6. 年額課金をリリース! • 月額課金に加えて年額課金がで きるようになった • 年額課金を実装する際、課金周 りの知見が少なくて困った

  7. None
  8. アプリ内課金の勉強会開催へ • そんな感じでつぶやいてみた • 「ええやん」ってなって開催するこ とになった

  9. アプリ内課金の勉強会開催へ • Subscriptionだと定期購読だけ になってしまうので In-tamachi Billing Nightになっ た

  10. Androidのアプリ内課金を AACで実装する

  11. 定期購入とは?

  12. 定期購入とは? • Play Consoleで管理可能な アプリ内アイテムは3種類ある

  13. 定期購入とは? • 管理対象アイテム • 定期購入 • 特典アイテム

  14. 定期購入とは? • 管理対象アイテム • 定期購入 • 特典アイテム

  15. 定期購入とは? • 週、月、3ヶ月、6ヶ月、年間のい ずれかの期間で定期的に課金で きるアイテム • 新規購入者に対して、無料期間 やお試し価格の設定も可能

  16. 定期購入とは? • ある定期購入アイテムから 別の定期購入アイテムへのアッ プグレードまたはダウングレード を行う仕組みも提供

  17. 定期購入のアップグレードと ダウングレード • ユーザーは定期購入期間の終了 を待たず、グレード変更可能 • 変更前のプランですでに無料期 間を終えている場合は 新たに無料期間は発生しない

  18. 定期購入のアップグレードと ダウングレード • グレード変更を行うと現在有効な 定期購入はただちにキャンセルさ れ、新たな定期購入が作成され る

  19. 定期購入のアップグレードと ダウングレード • 最初の支払いは前の定期購入の 未使用分を使い切ったあとから 始まる

  20. 月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年

    支払い日 2019年04月01日
  21. 月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年

    支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用
  22. 月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年

    支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用
  23. 月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年

    支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用 前プランの残り = 250円
  24. 月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年

    支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用 前プランの残り = 250円 5,500円 / 365日 = 15.07円 / 日
  25. 月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年

    支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用 前プランの残り = 250円 5,500円 / 365日 = 15.07円 / 日 250円 / 15.07円 = 1日分使用可能 (16.58円)
  26. 月額プラン 500円 / 月 プラン変更 2019年04月15日 年額プラン 5,500円 / 年

    支払い日 2019年04月01日 500円 / 30日 = 16.66円 / 日 250円分使用 前プランの残り = 250円 5,500円 / 365日 = 15.07円 / 日 250円 / 15.07円 = 1日分使用可能 (16.58円) 新プラン支払い開始 2019年04月17日
  27. 定期購入のアップグレードと ダウングレード • 2019年04月17日以降は毎年04 月17日に課金が発生する

  28. 定期購入のアップグレードと ダウングレード • 定期購入アイテム間のアップグ レードやダウングレードの関係性 はPlay Consoleで何か 設定するわけではない

  29. 定期購入のアップグレードと ダウングレード • 古いプランから新しいプランへ移 行するといった関連付けは実装 をする際に行う

  30. 定期購入のアップグレードと ダウングレード • たとえば年額プランから月額プラ ンへのアップグレードをするなど の見せ方も開発者が定義する

  31. Google Play Billing Libraryを利用する

  32. Google Play BIlling Library • アプリ内課金に便利なクラスを提 供するライブラリ • Google Playアプリとの通信を行

    うIn-app Billing APIの操作もライ ブラリ内部に隠蔽されている
  33. Google Play BIlling Library

  34. Google Play BIlling Library AACも利用するので一緒に入れておく

  35. ViewModelでBillingClient を管理する

  36. ViewModelでBillingClientを管理する

  37. ViewModelでBillingClientを管理する

  38. ViewModelでBillingClientを管理する

  39. Google Playのアプリ内 課金サービスに接続する

  40. BillingClientStateListenerの実装と startConnectionの実行

  41. BillingClientStateListenerの実装と startConnectionの実行

  42. BillingClientStateListenerの実装と startConnectionの実行

  43. LifecycleObserverを使って onCreateで接続を開始する

  44. LifecycleObserverを使って onCreateで接続を開始する

  45. LifecycleObserverを使って onCreateで接続を開始する

  46. ViewModelの破棄時に接続を解除する

  47. ViewModelの破棄時に接続を解除する

  48. LiveDataで状態を管理する

  49. 各状態を表すsealedクラス

  50. 各状態を表すsealedクラス

  51. 各状態を表すsealedクラス

  52. BillingStatusをLiveDataで管理する

  53. BillingStatusをLiveDataで管理する

  54. BillingStatusをLiveDataで管理する

  55. BillingStatusをLiveDataで管理する

  56. アプリ内アイテムを 管理する

  57. アプリ内アイテムを管理する

  58. アプリ内アイテムを管理する

  59. アプリ内アイテムを管理する

  60. アプリ内アイテムを管理する

  61. 商品情報を取得する

  62. 商品情報を取得する

  63. 商品情報を取得する

  64. 商品情報を取得する

  65. 商品情報を取得する

  66. 商品情報を取得する

  67. 商品情報を取得する

  68. 定期購入アイテムを 購入する

  69. 定期購入アイテムを購入する

  70. 定期購入アイテムを購入する

  71. 定期購入アイテムを購入する

  72. 定期購入アイテムを購入する

  73. 定期購入アイテムを購入する

  74. 定期購入アイテムを購入する

  75. 定期購入アイテムを購入する

  76. None
  77. 定期購入のアップグレードを 行う

  78. 定期購入のアップグレードを行う

  79. 定期購入のアップグレードを行う

  80. 定期購入のアップグレードを行う

  81. 定期購入のアップグレードを行う

  82. 定期購入のアップグレードを行う

  83. 定期購入のアップグレードを行う

  84. 定期購入のアップグレードを行う

  85. 定期購入のアップグレードを行う

  86. 定期購入のアップグレードを行う

  87. 定期購入のアップグレードを行う

  88. None
  89. None
  90. まとめ

  91. まとめ • グレード変更後の最初の支払い は前の定期購入の未使用分を使 い切ったあとから始まる

  92. まとめ • 定期購入アイテム間のアップグ レードやダウングレードの関係性 はPlay Consoleで何か 設定するわけではない • グレード変更の関連付けは 実装時に行う

  93. まとめ • Play Billing Libraryの BillingClientはViewModelで管 理するとよい • Play Billing

    Libraryの各状態は sealedクラスで定義し、LiveData で状態管理すると楽
  94. まとめ • 課金アイテムの情報はenumクラ スで管理しておくと楽

  95. まとめ • アプリ内課金の知見はWebにあ まりないのでみんな知ってるで しょって思ってることでも共有して ほしい

  96. アプリ内課金の検証や テストコードなどの より詳細な話は技術書典で!

  97. 宣伝

  98. None
  99. TechBooster 技術書典6 新刊 [さ05] Android Qなどの最新モ バイル開発情報、 TensorFlow内部の誰も知 らない最適化、今すぐ使え るアプリ内課金やテスト、

    Safe Argsなど盛りだくさん 144pです! サークル詳細 | TechBooster | 技術書典 https://techbookfest.org/event/tbf06/circle/61870001
  100. ありがとうございました