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
Firebase Dynamic Links 導入事例
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Chiharu Nameki
December 12, 2018
Technology
2.9k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Firebase Dynamic Links 導入事例
CA.swift #7
Chiharu Nameki
December 12, 2018
More Decks by Chiharu Nameki
See All by Chiharu Nameki
iPhoneでの空間メディア視聴体験の探求
ridwy
1
77
空間再現力の鍵、APMPを読み解く
ridwy
1
410
空間ビデオフォーマット、MV-HEVCが写し撮る世界
ridwy
4
2.8k
空間オーディオを活用しよう!
ridwy
1
700
AVPlayerのHLS再生時のエラーをハンドリングする
ridwy
0
900
AirPlayの裏舞台
ridwy
0
3k
AVPlayerできちんとコンテンツ保護
ridwy
0
2.1k
検証 SharePlay media playback
ridwy
1
2.1k
カスタムInstrumentsでアプリをピカピカに!
ridwy
5
12k
Other Decks in Technology
See All in Technology
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
1
170
ACE-Step-1.5で見る 音楽生成AIのしくみと“破綻だけ直す”Retake機能の開発【zennfes spring 2026 登壇資料】
personabb
1
540
Kubernetesにおける学習基盤とLLMOpsの概要
ry
1
320
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
120
AIチャット検索改善の3週間
kworkdev
PRO
2
140
AIはどのように 組織のアジリティを変えるのか?
junki
4
1k
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
240
自宅LLMの話
jacopen
1
650
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
270
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
170
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク ~実装編~
sonic
0
280
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
300
Featured
See All Featured
WENDY [Excerpt]
tessaabrams
11
38k
Designing Powerful Visuals for Engaging Learning
tmiket
1
420
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
140
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
Technical Leadership for Architectural Decision Making
baasie
3
420
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
Raft: Consensus for Rubyists
vanstee
141
7.5k
Everyday Curiosity
cassininazir
0
230
Building an army of robots
kneath
306
46k
Six Lessons from altMBA
skipperchong
29
4.3k
The Curse of the Amulet
leimatthew05
1
13k
Un-Boring Meetings
codingconduct
0
320
Transcript
ߦ ઍय़ʢͳΊ͖ ͪΔʣ גࣜձࣾαΠόʔΤʔδΣϯτ Firebase Dynamic Links ಋೖࣄྫ CA.swift #7
2018 Dec. 12 Twitter, Qiita, GitHub @Ridwy
ࣗݾհ ߦ ઍय़ (ͳΊ͖ ͪΔ) 2015த్ೖࣾ Ameba iOSΤϯδχΞ ݩ macOSιϑτΣΞΤϯδχΞ
WWDC 2015, 2017ࢀՃ
Firebase Dynamic Linksͱʁ
͜ͷػೳΛ࣮ݱͯ͘͠ΕΔϦϯΫ ΞϓϦͰ։͘
ϢʔβΛঢ়ଶʹΑͬͯ࠷దͳભҠઌ ΞϓϦͰ։͘ ΠϯετʔϧࡁΈ ະΠϯετʔϧͳΒετΞ ΞϓϦىಈ & linkʹ֘͢Δը໘ʹભҠ (=σΟʔϓϦϯΫॲཧ)
Firebase Dynamic Linksͷಛ • ແྉ • ຊՈͷυΩϡϝϯτ͕͔ͬ͠Γ͍ͯ͠Δ • OSS https://github.com/firebase
• iOS, Android • ωΠςΟϒSDK • C++ SDK • UnityϓϥάΠϯ • ॖURL & ΞφϦςΟΫεػೳ
ఆ͞Ε͍ͯΔར༻γʔϯ • ΞϓϦͷಋઢ e.g. ʮΞϓϦͰ։͘ʯϘλϯ ΩϟϯϖʔϯLPͷϘλϯ • ϓϩϞʔγϣϯ༻ͷϦϯΫΛSNSͰ֦ࢄ • ΞϓϦͷϢʔβಉ࢜ͰϦϯΫΛڞ༗
Firebase Dynamic Links (Ҏ߱FDLͱུ)ͷྫ FDLͷ࣮ମඞཁͳใΛύϥϝʔλͱͯ࣋ͭ͠URL ͜ͷURLΛʮΞϓϦͰ։͘ʯϘλϯͳͲʹࠐΜͰ͏ https://example.page.link/? link=https://www.example.com/foo &apn=com.example.android &amv=3
&ibi=com.example.ios &isi=1234567 ↑Subdomain
ओͳύϥϝʔλ ڞ௨ link σΟʔϓϦϯΫ iOS ibi iOSΞϓϦͷόϯυϧID isi App Store্ͷΞϓϦͷID
ifl ະΠϯετʔϧ࣌ʹετΞҎ֎ʹભҠ͍ͤͨ͞߹ɺભҠઌURL Android apn AndroidΞϓϦͷύοέʔδ໊ afl ະΠϯετʔϧ࣌ʹετΞҎ֎ʹભҠ͍ͤͨ͞߹ɺભҠઌURL PC ofl PCͰlinkҎ֎ʹભҠ͍ͤͨ͞߹ɺભҠઌURL
ϦονϓϨϏϡʔ༻ͷύϥϝʔλ st λΠτϧ sd આ໌ si ը૾URL 300 x 200
ϐΫηϧҎ্ɺ300 KB ະຬ SNS֦ࢄ࣌ͷݟͨετΞϓϨϏϡʔΛϦονʹͰ͖Δ Rich Link Preview
ετΞϓϨϏϡʔ • App StoreભҠલʹFirebaseʹΑͬͯ දࣔ͞ΕΔϓϨϏϡʔ • ࠓͷॴiOSͷΈ • ΫϦοϓϘʔυΛར༻ͯ͠ ϢʔβͷಉҰੑΛ୲อ
• efr=1Λ͚ͭΔͱදࣔΛεΩοϓՄೳ
ετΞϓϨϏϡʔ st, sd, si Λઃఆͨ͠ྫ
શύϥϝʔλͱৄࡉެࣜυΩϡϝϯτͰʂ https://firebase.google.com/docs/dynamic-links/create-manually
ϦϯΫͷੜํ๏ • खಈͰύϥϝʔλΛΈཱͯ • Firebaseͷίϯιʔϧ্Ͱ࡞ • SDKͰ࡞ 3ͭͷํ๏͕͋Δ
Firebaseίϯιʔϧ
None
ϦϯΫͷσόοά ϦϯΫʹEΛ͚ͭͯϒϥβͰΞΫηεʂ
iOS 9Ҏ߱ iOS 8
ॖURLػೳ • SDKREST APIͰURLΛॖͰ͖Δ • ॖURLղܾ࣌ʹΫϦοΫͳͲ͕ूܭ͞ΕΔ • ूܭ݁ՌREST APIͳͲͰऔಘՄೳ CLICK
ΫϦοΫ REDIRECT ετΞ(or ࢦఆͨ͠ભҠઌ)ͷૹ٬ APP_INSTALL Πϯετʔϧ (AndroidͷΈ) APP_FIRST_OPEN ΠϯετʔϧޙΞϓϦΛ։͍ͨ APP_RE_OPEN ΞϓϦΛ։͍ͨ
※ Firebaseͷίϯιʔϧ্Ͱ࡞Ͱ͖ΔURLॖURL ίϯιʔϧ্Ͱ࡞ͨ͠߹ɺूܭ݁Ռίϯιʔϧʹදࣔ͞ΕΔ
ॖURLػೳ • ͍ (TwitterͳͲͰͷ֦ࢄʹศརʣ • ༰͕૾Ͱ͖ͳ͍ͷͰΞϓϦ͕ϋοΫ͞Εʹ͍͘ • Firebase͕ूܭΛߦͬͯ͘ΕΔ • ΞϓϦͰड৴ޙɺ௨৴ΛߦͬͯϦϯΫΛղܾ͢Δඞཁ͕͋Δ
εϜʔζͳσΟʔϓϦϯΫॲཧͷ͛ʹͳΔέʔε Pros. Cons.
iOSΞϓϦʹΈࠐΉ
• Universal Links • ΧελϜεΩʔϚURLʹΑΔΞϓϦىಈ FDLʹར༻͞Ε͍ͯΔiOSͷΈʹ͍ͭͯগ͠ ΠϯετʔϧࡁΈఆɾΞϓϦىಈʹҎԼ͕ར༻͞Ε͍ͯΔ
Universal Links • υϝΠϯͱΞϓϦΛؔ࿈͚ͮΔ • αʔόʹઃఆϑΝΠϧ apple-app-site-association Λஔ • ΞϓϦͷEntitlementsͷAssociated
Domainsʹ֘υϝΠϯΛهड़ • ΞϓϦͷΠϯετʔϧ / Ξοϓσʔτ࣌ʹؔ࿈͚͕ߦΘΕΔ • ϦϯΫΛ։͘ͱ͖ʹ֘ΞϓϦ͕͋ͬͨΒͦͷΞϓϦΛىಈ • ಉҰυϝΠϯͷ߹ΞϓϦΛىಈ͠ͳ͍ ͢ͰʹϢʔβαΠτͰαʔϏεΛମݧதͷͨΊ • ΞϓϦΛىಈ͢Δ͔ԡ͠ͷϝχϡʔͰϢʔβ͕બՄೳ ࠷ޙͷબ͕OSʹهԱ͞ΕΔ iOS 9Ͱొͨ͠Deep LinkͷΈ
Universal Links ҙ • ΞϓϦΛ։͘ڍಈɺϢʔβͷͷOSʹΑ੍ͬͯޚ͞Ε͍ͯΔ • ڍಈΛม͑ΔτϦΨʔΞϓϦͷΞοϓσʔτ • apple-app-site-association͚ͩॻ͖͑ͯޮՌ͕ͳ͍
͍͟ಋೖ
ಋೖͷྲྀΕ 1. FirebaseϓϩδΣΫτʹΞϓϦΛ݁ͼ͚ͭΔ 2. SDKΛΠϯετʔϧ 3. Firebase Dynamic Links ίϯιʔϧͰαϒυϝΠϯΛऔಘ
4. EntitlementsΛઃఆ 5. ड৴ॲཧΛ࣮
FirebaseϓϩδΣΫτʹΞϓϦΛ݁ͼ͚ͭΔ ࢦࣔ௨ΓΞϓϦͷใΛೖྗ & ηοτΞοϓ ҙ νʔϜIDʹ x νʔϜID Ͱͳ͘ o
Provisioning ProfileͷApp IDͷPrefix Λઃఆʢݹ͍ΞϓϦͰҟͳΔ͜ͱ͕͋Δʣ
SDKΛΠϯετʔϧ CocoaPodsΛར༻ pod 'Firebase/Core' pod 'Firebase/DynamicLinks' $pod install
FirebaseίϯιʔϧͰαϒυϝΠϯΛऔಘ 5ݸ·Ͱొ/আͰ͖Δ
ૣ͍ऀউ͔ͪͱࢥ͍͖…ʁ amebloΛऔΖ͏ͱͨ͠Β͜Μͳը໘͕ ΞϝʔόϒϩάͷυϝΠϯ ameblo.jp Ͱ͢ ͋Γ͕ͱ͏͍͟͝·͢ʂ
EntitlementsΛઃఆ Associated Domainsʹઌ΄Ͳऔಘͨ͠υϝΠϯΛՃ
ड৴ॲཧΛ࣮ ४උ import Firebase // Firebaseͷڞ௨ΠϯελϯεΛηοτΞοϓ FirebaseApp.configure()
ड৴ॲཧΛ࣮ ΞϓϦʹͬͯདྷͨURL͔ΒSDKͰlinkΛऔΓग़͠ɺ֘ը໘ભҠ URLड৴ϝιου • ΧελϜεΩʔϚURL application(_:open:options:) • Universal Links application(_:continue:restorationHandler:)
※ ىಈ࣌launchOptionsʹURL͕ͬͯ͘ΔͷͰ ΑΓૣ͘ॲཧΛ։࢝Մೳ
Firebase iOS SDK FDLͷॲཧΛߦ͏I/F FIRDynamicLinks.h ಡΜͰΈΔ
͓͜ͱΘΓ SwiftͰهࡌ͍ͯ͠·͕͢ ࣮ࡍObjective-CͰ͢ CA.swift
// ΧελϜεΩʔϚURLΛFDLͱͯ͠ॲཧ͖͔͢Ͳ͏͔ func shouldHandleDynamicLink(fromCustomSchemeURL: URL) -> Bool // ΧελϜεΩʔϚURLΛύʔε func
dynamicLink(fromCustomSchemeURL: URL) -> DynamicLink? // ͍Universal LinkΛύʔε func dynamicLink(fromUniversalLink: URL) -> DynamicLink? // Universal Link(͍URLॖURLOK!)Λॲཧ͢Δศརϝιου func handleUniversalLink(_: URL, completion: (DynamicLink?, Error?)->()) -> BOOL // ॖURLΛղܾ func resolveShortLink(_: URL, completion: (DynamicLink?, Error?)->()) -> BOOL // FDLͷॖURL͔Ͳ͏͔ func matchesShortLinkFormat(_: URL) -> Bool FIRDynamicLinks.h FDLॲཧΛ୲͏γϯάϧτϯ DynamicLinks.dynamicLinks() ͷI/F
FIRDynamicLink.h FDLΛදݱ͢ΔΫϥε class DynamicLink: NSObject { private(set) var url: URL?
/// Ϣʔβʔ͕Ұக͍ͯ͠Δ࣮֬ੑ private(set) var matchType: DLMatchType }
࣮ͯ͠ΈͨΒ…
ςετͰԿϦϯΫΛ౿ΜͩͨΊ͔ɺ ϦϯΫΛ౿ΜͰ͍ͳͯ͘ΞϓϦΛىಈͨ͠Β σΟʔϓϦϯΫॲཧ͕ΔΑ͏ʹͳͬͯ͠·͍· ͨ͠ ςετνʔϜ • ࣌ؒܦաͰղফ • efr=1Λࢦఆͯ͠ϓϨϏϡʔϖʔδΛόΠύε͍ͯͨ͠ •
ͦͷ߹ΠϯετʔϧΛڬΜͰϢʔβͷใΛ࣮֬ʹҾ͖ܧ͙Έͳ͍ • λΠϜελϯϓ༷ʑͳใΛΈ߹ΘͤͯແཧΓߦ͍ͬͯΔͱࢥΘΕΔ • ͜͏ͨ͠ෆ࣮֬ੑ͕͋ΔͷͰɺԿ͔Λ֬ఆ͢ΔΑ͏ͳॲཧͷલʹ ඞͣ֬ೝΛߦ͏͖
ͨ·ʹىಈޙ͙͢Ͱͳ͘ɺগ͠Εͯදࣔ͞ ΕΔΜ͚ͩͲେৎʁ σΟϨΫλʔ σόοάͨ͠ΒɺͳΜͱ Firebase iOS SDKͷ matchesShortLinkFormat(_:) ͕͍63-ʹରͯ͠ true
͜ͷ͍࣌··ͷURLͩͬͨͷͰ ड৴͔ͯ͠Βൃಈ͢Δ·ͰλΠϜϥάͳ͍ͣ
firebase-ios-sdk/Firebase/DynamicLinks/Utilities/FDLUtilities.m let url = URL(string: "https://hoge.page.link/?abc=123")! url.path // -> "/"
ॖURLͱޡఆ͞ΕΔ͍URLͷྫ
let dl = DynamicLinks.dynamicLinks() if dl.matchesShortLinkFormat(url) && url.path != "/"
{ dl.handleUniversalLink(url) { [weak self] dynamicLink, _ in self?.dynamicLink = dynamicLink } } else { self.dynamicLink = dl.dynamicLink(fromUniversalLink: url) } W/AͰରԠ
ϦϯΫΛ౿Ήͷ͕2ճ͔ͩΒɺදࣔ͞Εͳ͍Μ Ͱ͢Ͷʂ σβΠφʔ ͢Έ·ͤΜɺෆ۩߹Ͱ͢ɻ • ॖURLͷղܾʹωοτϫʔΫ௨৴͕ඞཁ • Universal Linksड৴࣌ application(_:continue:restorationHandler:)
ΞϓϦ͕ActiveͰͳ͍͜ͱ͋Δ • ΞϓϦ͕ActiveͰͳ͍࣌ʹ௨৴͠Α͏ͱ͢Δ → ࣌ʑ௨৴Τϥʔ ॖURLͷղܾʹ࣌ʑࣦഊ͍ͯͨ͠ ॖURLͷղܾΛߦ͏λΠϛϯάΛௐͯ͠ରԠ
ΞϓϦΛΠϯετʔϧࡁΈͳͷʹετΞʹߦͬͯ ͠·͏͕͋ΔΜͰ͚͢Ͳ... ϑϩϯτΤϯδχΞ • ΠϯετʔϧఆʹUniversal LinksΛར༻͍ͯ͠Δ͕ނͷ՝ Universal Links →ͲͪΒͰ։͔͘Ϣʔβ͕બΔ ֘υϝΠϯΛΞϓϦͰ։͔ͳ͍Α͏ʹ͍ͯ͠Δέʔε
• ετΞʹભҠ͢ΔͱΠϯετʔϧࡁΈͳͷͰΠϯετʔϧϘλϯ͕ ʮ։͘ʯϘλϯʹͳ͍ͬͯΔɻ • ͜ͷϘλϯͰ։͍ͨ߹ɺ೦ͳ͕ΒσΟʔϓϦϯΫॲཧߦΘΕͳ͔ͬͨ • ϓϨϏϡʔϖʔδΛܦ༝͢Ε͋Δ͍…ʁ ະղܾ
ӡ༻͢Δʹ͋ͨͬͯߦͬͨࣄ
ӡ༻୲ऀʹଘࡏΛͬͯΒ͏ ษڧձΛ։࠵
؆୯͔ͭ҆શʹ͑ΔΑ͏ʹ͢Δ Ωϟϯϖʔϯ୲ऀ͕ϦϯΫΛ࡞ & ཧ & ੳͰ͖ΔΑ͏ʹ • linkΛೖྗ͢Δͱ͍FDL͕ੜ͞ΕΔεϓϨουγʔτΛ༻ҙ • ΫϦοΫɺΞϓϦॳճىಈɺΞϓϦ࠶ىAmebaͰར༻͍ͯ͠Δ
طଘͷΈͰૹ৴
උߟ: App Store ConnectͷApp Analyticsͷύϥϝʔλ FDLʹ༩ՄೳɻͲͷΩϟϯϖʔϯ͕༗ޮ͔ͷஅࡐྉʹɻ • ct : Ωϟϯϖʔϯ໊,
40จࣈҎ • pt :ϓϩόΠμID, App Store ConnectͷʮΩϟϯϖʔϯϦϯΫΛ࡞ʯ ϖʔδͰ֬ೝͰ͖Δ • ݁Ռʹදࣔ͞ΕΔʹ5ͭҎ্ͷApple IDʹΠϯετʔϧ͞ΕΔඞཁ ͕͋Δ • அใͷૹ৴ʹಉҙͨ͠ϢʔβͷΈͷࣈ
ॴײ • ؔ࿈ٕज़ηΩϡϦςΟͱརศੑͷτϨʔυΦϑ • ඞཁेͳػೳ • ಛʹಉҰυϝΠϯͰͷΞϓϦಋઢʹྑ͍ • ϦϦʔεͨͯ͠ͳͷͰυΩυΩ͠ͳ͕Βݟक͍ͬͯ·͢
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠