Slide 1

Slide 1 text

課金ユーザを増やすための InAppBilling定期購入の 活用事例 Cookpad.apk #3 @farmanlab

Slide 2

Slide 2 text

README ・山下 拓磨 twitter: @farmanlab ・2018年1月入社 会員事業部  →有料会員を増やすことを主軸にした部署 ・元鉄道運転士&  電気設備管理者

Slide 3

Slide 3 text

みなさんお金って知ってますか? Do you know money?

Slide 4

Slide 4 text

お金は超絶便利 ・好きなものが買える ・好きなことができる ・好きなとこに住める    =人生が豊かになる!!

Slide 5

Slide 5 text

お金を稼げるサービスを作らなきゃいけない ・社員に素晴らしいおちんぎんを払うため ・キレイなオフィスに住まうため ・みんなに最強のパソコンを支給するため ・事業を継続させるため

Slide 6

Slide 6 text

クックパッドの主な収入源 有料コンテンツ 広告

Slide 7

Slide 7 text

三行まとめ ・有料コンテンツの無料体験の  バリエーションを増やした話 ・課金ユーザの退会者を  猶予期間を使って減らした話 ・行あまり

Slide 8

Slide 8 text

定期購入 (In-app-Billing)

Slide 9

Slide 9 text

In-app-Billing ・Googleが提供するアプリ内課金機能  (ちなみにAppleはIn-app Purchase)    大きく分けると   ・使い切りアイテム(INAPP)    →  魔法石      ・定期購入アイテム(SUBS)    →プレミアムサービス     Amazonプライム

Slide 10

Slide 10 text

In-app-Billing ・商品の管理、金額の設定などは  基本的にGoogle Play Console上で行う ・一つの機能(アイテム)ごとにid(sku)を設定する

Slide 11

Slide 11 text

導入は2018年3月 開発者ブログにIn-app-Billing導入時の記事があります https://techlife.cookpad.com/entry/2018/03/14/090000

Slide 12

Slide 12 text

定期購入のいろいろな機能 ・無料試用期間(フリートライアル)  ・3日以上の無料期間が付けられる  ・あらゆるサービスで使われている 30日無料 90日無料

Slide 13

Slide 13 text

こうかは ばつぐんだ!

Slide 14

Slide 14 text

ここで一つの願望と問題が 生まれます

Slide 15

Slide 15 text

         願望 特定のユーザにだけ多くの無料期間を与える キャンペーンやりたい (誕生日、インストール直後 etc...)

Slide 16

Slide 16 text

         問題 ・同じ商品に複数の無料期間を設定できない  →商品別にする?   →商品別だから同時購入できる    →二重決済防止の仕組みが必要     →めっちゃ大変そう      →もう少し良い方法はない? (AppleはGroup内で一つしか有効にならないSubscription Groupというものがある)

Slide 17

Slide 17 text

解決方法 課金の延期機能を使う (Defer)

Slide 18

Slide 18 text

Defer https://developer.android.google.cn/google/play/billing/billing_subscriptions?hl=JA#Defer Defer=課金の延期  →次回の課金のタイミングを遅らせる  →特定ユーザに付与することが可能   ex:商品自体の無料期間30日+defer30日  →Google Play Developer APIを使って付与する ・そんなもんよりSubscription Group作ってくれ

Slide 19

Slide 19 text

Defer(pros) ・自前で二重課金防止策を取らずに  ユーザごとに異なる無料期間を提供できる

Slide 20

Slide 20 text

Defer(cons) ・次の課金タイミングを遅らせるだけなので  無料体験ユーザには延期分の日数が表示されない ・課金導線でユーザに認知させる工夫が必要

Slide 21

Slide 21 text

Defer適用までの流れ ログテーブル ①課金処理 ②決済情報登録 日時バッチ ④ログ取得 Cookpad 決済基盤 ③Defer適用ログ ⑤Defer適用リクエスト ⑥Defer API 決済情報 テーブル

Slide 22

Slide 22 text

Deferの注意点 ・Deferは次回の課金タイミングの先送り  →無料期間なし+defer30日の場合は   最初の課金は即時処理されるので注意 ・本来の使用用途ではないので  二重課金防止の仕組みがすでにあるなら  素直に複数商品用意したほうが良さそう

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

課金してくれるユーザもいれば 解約するユーザもいます…

Slide 25

Slide 25 text

 解約した人数を見る

Slide 26

Slide 26 text

自発的・非自発的?

Slide 27

Slide 27 text

自発的解約と非自発的解約 ・自発的解約  →ユーザやPlay Console、   GooglePlay APIから解約されたもの ・非自発的解約  →なんらかの理由によって   支払いができず解約されたもの

Slide 28

Slide 28 text

非自発的解約の原因 ・クレジットカード期限切れ ・クレジットカード限度額超え ・ギフトカードなどのプリペイド残高不足 etc…(公式で原因の一覧化はされていない)

Slide 29

Slide 29 text

非自発的解約になるまでのフロー ❌ 課金開始 課金継続 継続失敗 猶予期間 自動解約 (非自発的) 課金再開 課金開始 課金継続 解約(自発的)

Slide 30

Slide 30 text

GooglePlayConsoleから見れる

Slide 31

Slide 31 text

具体的な数字はお見せできませんが… ・非自発的解約の割合がそれなりに高い  →ユーザの意図しないタイミングで   解約されてそのまま復帰しない    →本来救えたはずのユーザ分だけ   機会損失している

Slide 32

Slide 32 text

どうにか非自発的解約を 少なくしたい

Slide 33

Slide 33 text

対策1:猶予期間伸ばす ・猶予期間を伸ばすだけでも  非自発的解約者は結構減った  →コンソールポチだけで効果絶大

Slide 34

Slide 34 text

対策2:real-time developer notificationsを使う https://developer.android.google.cn/google/play/billing/realtime_developer_notifications ・ユーザの課金ステータスが更新されると  GCPのCloud Pub/Sub(AWS Kinesis的なやつ)  へ通知が飛ぶ仕組み ・猶予期間に入ったタイミングも分かる  →猶予期間中にユーザにアプローチできる

Slide 35

Slide 35 text

通知タイプ

Slide 36

Slide 36 text

猶予期間をユーザに通知する流れ Cookpad 決済基盤 ログテーブル 日時バッチ APIサーバ ユーザ テーブル ①課金ステータス  変更通知 ②Webhook  (Push) ③通知ログ保存 ④通知ログ取得・  ユーザ情報に反映 ⑤猶予期間  取得

Slide 37

Slide 37 text

猶予期間状態のユーザに認知させる

Slide 38

Slide 38 text

実装する上での工夫や注意点① ・通知に含まれる決済関連の情報は  PurchaseTokenと呼ばれるトークンと商品IDのみ  →詳細情報をGoogleDeveloperAPIに   問い合わせる必要がある ・アプリからGooglePlayの定期購入画面に  遷移させたい場合、商品IDが必要になるので  サーバから値を渡せるように設計する必要がある   https://play.google.com/store/account/subscriptions?sku=your- sub-product-id&package=your-app-package

Slide 39

Slide 39 text

実装する上での工夫や注意点② ・ユーザの課金ステータスは  日時バッチにして更新性をある程度犠牲にした    →行き違いでユーザが復帰してる可能性がある   →その旨をユーザに知らせておく    →アプリ側の通知UIはGooglePlayの定期購入画面   に遷移したら2、3日表示しない仕様にした

Slide 40

Slide 40 text

まとめ ・有料コンテンツの無料期間提供は効果高い ・ユーザごとに違った無料期間提供したい  →Defer(課金の延期)を使って実現できた ・退会者の中に非自発的のユーザが比較的多い  →猶予期間を伸ばすこと、   real-time developer notificationを使って   猶予期間中ユーザに知らせる仕組みを作った

Slide 41

Slide 41 text

お金は超便利!!

Slide 42

Slide 42 text

ありがとうございました!