Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Back of First Screen AB test of Hatena Bookmark...
Search
Yutaro Muta
July 22, 2019
Programming
360
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Back of First Screen AB test of Hatena Bookmark iOS app with Firebase AB Testing
https://google-admob-japan.connpass.com/event/138083/
Yutaro Muta
July 22, 2019
More Decks by Yutaro Muta
See All by Yutaro Muta
WebKit::WebView Essentials / Sapporo.swift #1
yutailang0119
0
190
Google Nest CamとApple Vision frameworkと猫🐈🐈⬛ / onishi50
yutailang0119
0
360
SwiftUI Inspectorが難しすぎる / Mobile Act OSAKA 18
yutailang0119
0
150
Swift Concurrencyでのスケジュール処理を考える / Mobile Act OSAKA 17
yutailang0119
0
170
猫と暮らすネットワークカメラ生活🐈 ~Vision frameworkでペットを愛でよう~ / iOSDC Japan 2025
yutailang0119
0
470
猫と暮らす Google Nest Cam生活🐈 / WebRTC with Google Nest Cam
yutailang0119
0
340
Swiftの “private” を テストする / Testing Swift "private"
yutailang0119
0
360
Apple Vision Pro購入RTA 1泊3日弾丸ハワイツアー / RTA: Purchase Apple Vision Pro in Hawaii
yutailang0119
0
1.6k
個人開発のたのしみ / Enjoying personal development
yutailang0119
0
1.1k
Other Decks in Programming
See All in Programming
What's New in Android 2026
veronikapj
0
270
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
240
Built Our Own Background Agent at LayerX
layerx
PRO
10
6k
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
120
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
120
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
420
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
260
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
350
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
330
リアルな遅延を測る仕様
kota_yata
1
120
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
510
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.1k
Featured
See All Featured
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
520
Discover your Explorer Soul
emna__ayadi
2
1.3k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
280
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Odyssey Design
rkendrick25
PRO
2
770
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
660
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
660
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
380
Transcript
2019/07/22 @Google AdMob Japan Meetup #5 Yutaro Muta @yutailang0119 ͯͳϒοΫϚʔΫiOSΞϓϦͷ
First Screen A/Bςετͷཪଆ with Firebase A/B Testing
• Yutaro Muta @yutailang0119 • Hatena Co., Ltd. @Kyoto •
Conference Staff • builderscon 2017, 2018 • try! Swift Tokyo 2019, 2020 • ࠷ۙͷਪ͠Combine framework Who am I ?
͢͜ͱ • ͯͳϒοΫϚʔΫͷiOSΞϓϦͰߦͬͨA/Bςετͷ֓ཁ • ্هʹ͓͚ΔFirebase A/B Testingͷׂ • ઃఆํ๏ •
Tips
͞ͳ͍͜ͱ • AdMobʹΑΔΞϓϦࠂ
ͯϒͷεϚϗΞϓϦΛ ͍ͬͯΔਓʙ
ͯϒεϚϗΞϓϦ • https:b.hatena.ne.jp ͷεϚϗΞϓϦ • ίϝϯτ͖ͰϒοΫϚʔΫͰ͖Δ • ײΛڞ༗Ͱ͖Δ • ͷϖʔδΛൃݟͰ͖Δ
• iOS / Android
࠷ۙͯϒΞϓϦͷ ϗʔϜը໘͕มΘͬͨͳʔ ͱؾ͍ͮͨਓʙ
Before
After
Before After
Before After
มߋ • First ScreenͰΧςΰϦຖͷਓؾʹΓସ͑ΒΕΔ • ݩʑ૯߹ͷਓؾͱ৽ணͷΈ͕දࣔ͞Ε͍ͯͨ • ΧςΰϦͷฒͼॱɺҙʹฒͼସ͑ΒΕΔ
Ͱɺ First ScreenΛΤΠϠοͱ มߋ͢Δͷා͍ͳ͊
ͦ͜ͰA/Bςετ
A/BςετπʔϧʹٻΊͨ͜ͱ • [Must] A or BͷΓସ͑Λ֎෦ (ΞϓϦϦϦʔεαΠΫϧ֎) ͔Βߦ͑Δ • ঢ়ଶʹ߹Θͤͯը໘ଆΛΓସ͑Δ
• ςετதͷෆ۩߹݁Ռʹ໌Β͔ʹେ͖ͳ͕ࠩग़ͨࡍʹɺׂ߹Λมߋ • Ϗδωεతͳ͋Ε͜ΕʹରԠͰ͖ΔΑ͏ • [Better] ੳπʔϧͱͷ૬ੑݕূͷ͢͠͞
Firebase A/B Testing
Firebase A/B Testing • ͢ͰʹFirebaseϓϥοτϑΥʔϜΛར༻͍ͯ͠Δͱɺಋೖίετ͕গͳ͍ • Google Analytics for Firebaseͱ࿈ܞ͕Մೳ
• Remote Configͱͯ͠ѻ͏ͷͰɺखܰ
Firebase A/B Testingͷઃఆ
ઃఆελʔτ
λʔήοτͷઃఆ
λʔήοτͷઃఆ Analytics.logEvent(_:, parameters:) ͰૹΔΠϕϯτΛͬͯɺ ಛఆͷૢ࡞Λͨ͠ϢʔβʔͷΈΛλʔήοτʹࢦఆՄೳ
ඪઃఆ
ඪઃఆ
όϦΞϯτͷઃఆ
ΞϓϦͷ࣮
Remote Config͔ΒΛऔಘ // Fetch from Remote Config func fetch() {
let expiration: TimeInterval = (60 * 60 * 3) remoteConfig.fetch(withExpirationDuration: expiration, completionHandler: nil) } // Activate fetched Remote Config settings func activateFetched() { remoteConfig.activateFetched() }
Remote ConfigͰऔಘͨ͠ઃఆ͔Βը໘Λग़͚͠Δ let viewController: UIViewController switch remoteConfig.viewSetting { case .a:
viewController = AViewController() case .b: viewController = BViewController() } // Add to ContainerView viewController.view.translatesAutoresizingMaskIntoConstraints = false addChild(viewController) containerViewController.addSubview(viewController.view) viewController.didMove(toParent: self) NSLayoutConstraint.activate([NSLayoutConstraint]) // Switch ViewController by Remote Config let viewController: UIViewController switch remoteConfig { case .a: viewController = AViewController() case .b: viewController = BViewController() default: viewController = DefaultViewController() } // Add to ContainerView viewController.view.translatesAutoresizingMaskIntoConstraints = false addChild(viewController) containerViewController.addSubview(viewController.view) viewController.didMove(toParent: self) NSLayoutConstraint.activate([NSLayoutConstraint]())
ⷁ ⷂ
A/Bςετ։࢝
~͕࣌ྲྀΕͯ~
ςετ݁Ռ • ͓Αͦ1ϲ݄΄ͲͷςετΛ࣮ࢪͨ͠ • ςετ࣮ࢪલ͔Β΄΅ఆ௨Γͷظؒ • ৽ը໘ͷํ͕ɺچը໘ΑΓઃఆͨ͠ࢦඪʹ͓͍ͯ༏ҐͳࠩΛಘΒΕͨ • ࢦඪൿີ
ίϯιʔϧը໘
ςετྃ
ςετ݁ՌΛݩʹ... • ຬΛ࣋ͯ͠ɺ৽ը໘Λ100%ʹมߋ • AndroidͰ৽ը໘Λ࣮ɺϦϦʔε • ݁ՌɺAndroidͰྑ͍݁ՌΛಘΒΕͨ
A/B Testing Q&A
Q. ॳճىಈ࣌ʹ A/BςετΛө͍ͨ͠
Q. ॳճىಈ࣌ʹA/BςετΛө͍ͨ͠ • Remote ConfigɺωοτϫʔΫ௨৴Λ௨ͯ͡ઃఆΛऔಘ͢Δ • ॳճFetch࣌ʹઃఆແ͍ • ίʔυ্Ͱͷdefault༻ҙͰ͖Δ •
(ಛʹ) First ScreenͷA/BςετͰɺөλΠϛϯάʹ͕ඞཁʹͳΔ
ॳճFetchͷҊ 1. Fetch͕ྃ͢Δ·Ͱɺը໘Λwait͢Δ Pros: ॳճA/BςετͷઃఆΛөͰ͖Δ Cons: ͕ͪ࣌ؒൃੜɺFetch͕ࣦഊͨ࣌͠Ͳ͏͢Δʁ 2. Fetch͕ྃͨ͠Βଈ࠲ʹөͤ͞Δ ->
࠷ॳdefaultͰը໘Λදࣔ -> Fetchޙ͙͢ʹ RemoteConfig.activateFetched() -> ը໘ͷߋ৽ Pros: ্࣮ͷߟྀগͳ͍ Cons: Ϣʔβʔ༻தʹUI͕มߋ͞ΕΔͷͰɺڻ͔͘ 3. ࣍ճىಈ࣌·Ͱͭ -> ىಈ࣌ʹͷΈ RemoteConfig.activateFetched() Pros: ্࣮ͷߟྀগͳ͍ Cons: 2ճҎ߱ͷىಈʹͨͲΓண͚ͳ͍ͱɺςετͰ͖ͳ͍
Q. A/Bςετͷσόοά େม͡Όͳ͍ʁ
Q. A/Bςετͷσόοάେม͡Όͳ͍ʁ • betaϏϧυͰͷΈ Khan/SwiftTweaks Λ͍ɺΓସ͑Մೳʹͨ͠ • A/BςετҎ֎ʹ௨৴ͦͷଞઃఆͷΓସ͑ɺσόοάʹ͍ͬͯΔ
&OKPZ"#5FTUJOH 5IBOLT w NVUBZVUBSP!HNBJMDPN w IUUQTUXJUUFSDPNZVUBJMBOH w IUUQTHJUIVCDPNZVUBJMBOH