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
iqon_ios_growth_hack
Search
WorldDownTown
February 20, 2014
Programming
3
4.3k
iqon_ios_growth_hack
2014/02/20 at VASILY
iQON, Growth Hack, iOS, Objective-C
WorldDownTown
February 20, 2014
Tweet
Share
More Decks by WorldDownTown
See All by WorldDownTown
WWDC動画鑑賞会📹🍱を支える技術 / WWDC Video Lunch
worlddowntown
0
290
Live Renderingとの上手い付き合い方
worlddowntown
1
530
In-App Purchase / Subscription with StoreKit
worlddowntown
3
3k
20150225_iqon.pdf
worlddowntown
0
84
ios_push_local_notification
worlddowntown
0
140
Other Decks in Programming
See All in Programming
[堅牢.py #1] テストを書かない研究者に送る、最初にテストを書く実験コード入門 / Let's start your ML project by writing tests
shunk031
11
5.7k
Micro Frontendsで築いた 共通基盤と運用の試行錯誤 / Building a Shared Platform with Micro Frontends: Operational Learnings
kyntk
0
130
How Software Deployment tools have changed in the past 20 years
geshan
0
5.2k
チーム開発の “地ならし"
konifar
8
5.9k
Java_プロセスのメモリ監視の落とし穴_NMT_で見抜けない_glibc_キャッシュ問題_.pdf
ntt_dsol_java
0
230
「文字列→日付」の落とし穴 〜Ruby Date.parseの意外な挙動〜
sg4k0
0
260
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
0
480
AIと協働し、イベントソーシングとアクターモデルで作る後悔しないアーキテクチャ Regret-Free Architecture with AI, Event Sourcing, and Actors
tomohisa
2
8.4k
PHPライセンス変更の議論を通じて学ぶOSSライセンスの基礎
matsuo_atsushi
0
170
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 1
philipschwarz
PRO
0
100
『実践MLOps』から学ぶ DevOps for ML
nsakki55
2
470
[SF Ruby Conf 2025] Rails X
palkan
0
350
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
5.9k
Docker and Python
trallard
46
3.7k
The Pragmatic Product Professional
lauravandoore
36
7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.2k
Statistics for Hackers
jakevdp
799
230k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
680
The Cult of Friendly URLs
andyhume
79
6.7k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Mobile First: as difficult as doing things right
swwweet
225
10k
BBQ
matthewcrist
89
9.9k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Transcript
άϩʔεͤ͞ΔͨΊͷJ04 ։ൃख๏ ϩάऩूฤ 7"4*-:J04νʔϜ
"HFOEB wͳͥϩάऩूΛ͢Δͷ͔ wJ04Ͱߦ͍ͬͯΔϩάऩूख๏ͷࣄྫ wϩάऩू։ൃςΫχοΫ w·ͱΊ
ࣗݾհ w໊લߥҪ༐ี w'BDFCPPLBSBSBKQ w1)1 3VCZ 0CKFDUJWF$ 1FSM +BWB4DSJQUͳͲগʑ w7"4*-:ͰʮJ20/ʯͷJ04ΞϓϦΛ୲
ͳͥJ04ΤϯδχΞͷ ͕ͨͪϩάऩूʹ͍ͭͯ ޠΖ͏ͱ͍ͯ͠Δͷ͔
ϓϩμΫτͷάϩʔεʹ ϩάऩू͕ඞཁෆՄܽ
άϩʔεͤ͞ΔͨΊͷ ϩάऩूͷॏཁੑ wάϩʔεϋοΫݱঢ়ͷѲͱվળͷ܁Γฦ͕͠ॏཁ wϩάूܭΛߦͬͯվળΛߦ͍ɺԾઆΛ࣮ূ͍ͯ͘͠ ੳ վળ ϩάऩू ϓϩμΫτͷ
J04Ͱಛʹॏཁ w J04Ͱ"OESPJE8FCʹൺͯ 6*ͷදݱ͕෯͍ w ը໘Λදࣔ͢ΔʹɺϙοϓΞοϓɺ ϞʔμϧɺϑΣʔυΠϯͳͲزͭͷ ํ๏͕ߟ͑ΒΕΔ w Կ͕࠷దͳ6*ͳͷ͔ɺԿ͕Ұ൪ͬͯ
Β͑ͯϓϩμΫτ͕άϩʔε͢Δͷ͔Λ ΔͨΊʹࡉ͔ͳܭଌ͕ඞਢ
ϩάऩूํ๏ͷࣄྫ
wΞϓϦͷϩάऩू ʢJ20/༻தͷΠϕϯτʣ wΞϓϦ֎ͷϩάऩू J20/Λىಈ͍ͯ͠ͳ͍߹ͷ164)Πϕϯτ wαʔϏε֎ͷϩάऩू J20/Λͬͨࣄ͕ͳ͍߹ͷμϯϩʔυΠϕϯτ
ΞϓϦͷϩά ͯ͢ऩू
φϏήʔγϣϯ ϝχϡʔΘΕ͍ͯΔʁ ͓ؾʹೖΓϦετ ؾ͔ͮΕ͍ͯΔʁ ϑΟϧλʔԡ͞Ε͍ͯΔʁ
λϒ ͲΕ͕Ұ൪ԡ͞ΕΔͷʁ ྑ͋͘ΔΈ͚ͩͲJ20/Ϣʔβʔ ͦͦλϒ͏ʁ
ϝχϡʔ ΞίʔσΟΦϯදݱͬͯ ೝࣝ͞Ε͍ͯΔʁ λϒͱͲͪΒ͕ΘΕͯ ͍Δʁ φϏήʔγϣϯͷϑΟϧ λʔͱͲͪΒ͕ΘΕͯ ͍Δʁ
λϒϘλϯ
ಛఆͷ݅Ͱग़Δ7JFX FY ίʔσ࡞ͨ͠ޙʹදࣔ -*,&͕ݸ͍ͭͨޙʹදࣔ ! ͦͦදࣔͲΕ͘Β͍͞Ε͍ͯΔͷʁ ϢʔβͲΕΛબͿʁ ͜ͷ1PQVQΛग़͢ࣄʹΑͬͯޮՌ͋Γͦ͏ʁ
εΫϩʔϧ Ͳ͜·ͰεΫϩʔϧ͔ͨ͠ εΫϩʔϧΛࢭΊͯԿΛݟ͍ͯΔ͔
ϖʔδͷܭଌ ΞϓϦ͕όοΫάϥϯυҠಈ ͢ΔࡍʹɺϢʔβʔ͕࠷ޙʹͲͷ ϖʔδ 7JFX$POUSPMMFS Λݟ͍ͯͨ ͔Λϩάʹམͱ͍ͯ͠Δ
શ෦ϩάͱͬͯ·͢
ͦͷFWFOU
wΞϓϦͰͷϩάऩू wΞϓϦ֎͔Βͷϩάऩू wαʔϏε֎͔Βͷϩάऩू
164)ͷϩάऩू
Կͷ164)௨Λ ͲͷϢʔβʔ͕։͍͔ͨ ͯ͢ऩू͍ͯ͠·͢
ࣗͷͲͷίʔσͷ17͕ᮢΛ͑ͨ ࣗͷͲͷίʔσʹίϝϯτ͞Εͨ ࣗͷͲͷίʔσʹίϝϯτ͞Εͨ ࣗͷίʔσΛ-*,&͞Εͨ ࣗͷίʔσͷ-*,&ͷᮢΛ͑ͨ -*,&ͯ͠ΔΞΠςϜΛͬͨίʔσ͕ߘ͞Εͨ -*,&ͯ͠ΔΞΠςϜΛ୭͔͕-*,&ͨ͠ -*,&ͯ͠ΔΞΠςϜ͕Լ͕Γ࣌ J20/͔Βͷ͓Βͤ ϑΥϩʔ͞Εͨ
ಛఆͷ݅Λୡͨ͠Β ಧ͘164)௨ -*,&͍ͯ͠ΔΞΠςϜ͕εϖγϟϧϖʔδʹΘΕͨ -*,&͍ͯ͠Δίʔσ͕εϖγϟϧϖʔδʹΘΕͨ ࣗͷίʔσ͕εϖγϟϧϖʔδʹΘΕͨ -*,&͍ͯ͠ΔϒϥϯυʹۙिؒΞΠςϜ͕Ճ͞Εͨ -*,&͍ͯ͠Δϒϥϯυͷࡏݿ͕͘͢ͳ͍ ϨϏϡʔͰݶఆΞΠςϜ͕ϓϨθϯτ͞Εͨ ͍ͷQVTI͕ૹ৴͞Εͨ ͕ࣗ࡞ͬͨίϨΫγϣϯ͕-*,&͞Εͨ ͕ࣗ࡞ͬͨίϨΫγϣϯ͕-*,&ͷᮢΛ͑ͨ ͕ࣗ࡞ͬͨίʔσ͕ίϨΫγϣϯʹΘΕͨ GBDFCPPLͷ༑ୡ͕J20/Λ࢝Ίͨ
ҙͷλΠϛϯάͰૹΔ 164)௨ ίϯςετ։࢝ ίϯςετ݁Ռൃද ίϯςετऴྃؒۙ ͓Βͤ ϚΠϖʔδ ਓؾͷΞΠςϜ ਓؾͷελΠϦετ -*,&ΞΠςϜίʔσ
ਓؾͷΞΠςϜ ͕͢͞τοϓ ΞΠςϜݕࡧ -1 ਓؾͷ·ͱΊ ৽ண·ͱΊ ·ͱΊৄࡉ ϗʔϜ ΤσΟλʔτοϓ ίʔσৄࡉ ΞΠςϜৄࡉ ਓؾͷίʔσ ελοϑΦεεϝͷίʔσ ελοϑΦεεϝͷελΠϦετ ϑΥϩʔ͍ͯ͠Δਓͷίʔσ ৽ணͷίʔσ ελοϑΦεεϝͷ·ͱΊ ϥϯΩϯά
164)Λىಈͨ࣌͠ͷ ΞϓϦͷঢ়ଶͱ͍ͬͯ·͢ w ΞϓϦ༻தʹ164)௨͔Βड͚औͬͨ w ΞϓϦ͕όοΫάϥϯυʹ͋Δঢ়ଶͰ164)௨ ͔ΒΞϓϦΛىಈͨ͠ w ΞϓϦ͕ىಈ͍ͯ͠ͳ͍ঢ়ଶͰ164)௨͔ΒΞ ϓϦΛىಈͨ͠
164)௨ʹΑΔ3FUFOUJPO ࠶๚
wΞϓϦͰͷϩάऩू wΞϓϦ֎͔Βͷϩάऩू wαʔϏε֎͔Βͷϩάऩू
টػೳ 5XJUUFS 'BDFCPPL -*/& ࿈བྷઌ ͷ༑ୡΛট͢Δػೳ ͢ͰʹJ20/Ϣʔβʔͷ༑ୡͱͭ ͳ͕Δ͜ͱ͕Ͱ͖Δ
ট͔Β%-·Ͱͷܭଌ ͲͷιʔγϟϧϝσΟΞ͔Βͷট͕%-ʹ݁ ͼ͍͔ͭͨΛɺটϝοηʔδҰͭҰͭʹ ͍ͭͯܭଌ͍ͯ͠Δ
ϩάूܭ ։ൃςΫχοΫ
ࣗݾհ • ঙ࢘ ܒี • twitter/github: WorldDownTown • iOSྺ1 iQONͷiOSΤϯδχΞ
2େྔͷϩάͷຒΊࠐΈ ͬͯͲ͏ͬͯΔͷʁ
"ϩάूܭܥͷॲཧ ϝιουҰߦ
#import "IQLocalyticsUtil.h" #import "LocalyticsSession.h" #import "UIApplication+UIID.h" ! @implementation IQLocalyticsUtil !
#pragma mark - public method ! + (void)openSession { @try { if (LOCALYTICS_DEBUG) { LocalyticsSession.sharedLocalyticsSession.loggingEnabled = YES; } [LocalyticsSession.sharedLocalyticsSession startSession:kLocalyticsAppKey]; } @catch (NSException * e) {} } ϩάूܭͷ໘ͳॲཧ6UJMJUZΫϥεʹ·ͱΊͯ ϝιουҰߦͰϩάΛམͱͤΔΑ͏ʹ͍ͯ͠Δ ·ͨɺڞ௨ॲཧͰͲͷΠϕϯτܭଌʹඞͣ VTFS@JEؚ͕·ΕΔΑ͏ʹͳ͍ͬͯΔ - (IBAction)likeButtonPressed:(id)sender { // LIKEボタンのタップイベントをログに落とす [IQLocalyticsUtil tagEvent:@"/tap/item/like/"]; ! // LIKE処理 // ... }
2ͦΜͳʹͨ͘͞Μ ϩάΛऩूͯ͠Δ͚Ͳɺ ύϑΥʔϚϯεʹӨڹʁ
"ϩάΛΞοϓϩʔυ ͢Δ௨৴࠷খݶʹ ͓͍͑ͯ͞ΔͷͰେৎ
ྫ εΫϩʔϧͷܭଌ Ϧετදࣔ6*5BCMF7JFXͰ࡞ΒΕ͍ͯͯɺ UBCMF7JFXXJMM%JTQMBZ$FMMGPS3PX"U*OEFY1BUI ͰͲΕ͚ͩηϧΛද͔ࣔͨ͠ΛTRMJUFʹཷΊࠐΜ Ͱ͍Δɻ ! ৗʹϩάΛΞοϓϩʔυ͢ΔͨΊͷ௨৴ߦΘͣɺ ΞϓϦέʔγϣϯ͕όοΫάϥϯυʹ͍ͬͨ࣌ ʹ·ͱΊͯૹ৴͍ͯ͠ΔɻͦͷͨΊεΫϩʔϧύ
ϑΥʔϚϯεͷӨڹͳ͍ɻ
2164)͔Βͷىಈͬ ͯͲ͏ͬͯ ܭଌͯ͠Δͷʁ
"ΞϓϦىಈ࣌ʹ QBZMPBEΛνΣοΫ
1̨̪̝௨ΛΧελϚΠζ +40/QBZMPBEͷҰྫ { aps: { alert: 'あなたのコーデがLIKEされました', badge: 1, sound:
'default' }, id: 'like' // ログ用パラメータ }
1̨̪̝௨ΛΧελϚΠζ 164)௨͔ΒΞϓϦΛىಈ͢ΔࡍʹQBZMPBEͷ σʔλΛΈͯͲͷ164)͔Βىಈ͔ͨ͠Λಛఆ QBZMPBEͷσʔλΛड͚औΔʹɺ "QQ%FMFHBUF̎ͭͷϝιουͰ࣮͠·͢ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
1̨̪̝௨ΛΧελϚΠζ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSMutableDictionary *payload =
[launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] mutableCopy]; payload[@"type"] = @"not_running"; if (payload) { // アプリの未起動時にプッシュ通知を受け取り、ユーザーがアクションボタンをタップしたとき // payload[@"id"] -> like [self startWithPayload:payload]; } return YES; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { NSMutableDictionary *payload = userInfo.mutableCopy; if (application.applicationState == UIApplicationStateActive) { // フォアグラウンドでプッシュ通知を受け取ったとき payload[@"type"] = @"active"; } else { // アプリがサスペンド中にプッシュ通知を受け取り、ユーザーがアクションボタンをタップしたとき payload[@"type"] = @"background"; } // payload[@"id"] -> like [self startWithPayload:payload]; }
2%-ܭଌͲ͏ͬ ͯΔͷʁ
"J20/ಠࣗͷΈ
%-ܭଌͷσʔλϑϩʔ
2˓˓ͷσʔλ͕ཉ ͍͠Μ͚ͩͲʁ ϦϦʔεޙʹ
"ੜϩάΛཷΊࠐΜͰ ͍ΔͷͰղੳͰ͖·͢
None
LocalyticsͰਂ͍ੳΛߦ͏ͨΊɺ ऩूͨ͠ੜσʔλΛamazonS3ʹΤΫεϙʔτ Ͱ͖ɺ͜ΕΛಠࣗʹղੳ͍ͯ͠Δɻ -PDBMZUJDTΛ͍ͬͯ·͢
·ͱΊ
ࠓճհͨ͠ࡉ͔͍ूܭ ϓϩμΫτΛάϩʔεͤ͞Δ खஈͷҰʹ͗͢ͳ͍
༏लͳάϩʔεϋοΧʔ ͕͍ͯΤϯδχΞ͕ΈΛ ࡞Εͳ͚ΕάϩʔεͰ͖ͳ͍
άϩʔεΛҙࣝͯ͠։ൃͷ ஈ֊͔ΒΤϯδχΞ ͱ͜ͱΜ)"$,͠·͠ΐ͏
WANTED https://www.wantedly.com/projects/5530 iOSΤϯδχΞืूதʂ