$30 off During Our Annual Pro Sale. View Details »
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
540
In-App Purchase / Subscription with StoreKit
worlddowntown
3
3k
20150225_iqon.pdf
worlddowntown
0
87
ios_push_local_notification
worlddowntown
0
140
Other Decks in Programming
See All in Programming
認証・認可の基本を学ぼう前編
kouyuume
0
250
TUIライブラリつくってみた / i-just-make-TUI-library
kazto
1
390
開発に寄りそう自動テストの実現
goyoki
2
990
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
130
【CA.ai #3】ワークフローから見直すAIエージェント — 必要な場面と“選ばない”判断
satoaoaka
0
250
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
230
ローターアクトEクラブ アメリカンナイト:川端 柚菜 氏(Japan O.K. ローターアクトEクラブ 会長):2720 Japan O.K. ロータリーEクラブ2025年12月1日卓話
2720japanoke
0
730
AIコーディングエージェント(Gemini)
kondai24
0
230
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
440
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
230
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
390
AIコーディングエージェント(skywork)
kondai24
0
180
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
The Language of Interfaces
destraynor
162
25k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Producing Creativity
orderedlist
PRO
348
40k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
Optimizing for Happiness
mojombo
379
70k
How GitHub (no longer) Works
holman
316
140k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Designing for Performance
lara
610
69k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Making Projects Easy
brettharned
120
6.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
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ΤϯδχΞืूதʂ