Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Firebase Dynamic Links 導入事例
Search
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
110
空間再現力の鍵、APMPを読み解く
ridwy
1
490
空間ビデオフォーマット、MV-HEVCが写し撮る世界
ridwy
4
2.9k
空間オーディオを活用しよう!
ridwy
1
750
AVPlayerのHLS再生時のエラーをハンドリングする
ridwy
0
960
AirPlayの裏舞台
ridwy
0
3.1k
AVPlayerできちんとコンテンツ保護
ridwy
0
2.2k
検証 SharePlay media playback
ridwy
1
2.1k
カスタムInstrumentsでアプリをピカピカに!
ridwy
5
13k
Other Decks in Technology
See All in Technology
Codex概要
ymiya55
0
150
「とりあえず動く」の先へ。 AI時代のチーム開発と内部設計/2026-slsdays
slsops
0
100
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
10年欲しかった音楽管理アプリを、AIと一緒に作りはじめた
judau
1
200
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
9
2.6k
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
130
[2026 Oracle Technical Deep Dive] AI時代のデータベース基盤をどう選ぶ? Exadata Database Serviceの選択肢と使い分け (2026年9月17日開催)
oracle4engineer
PRO
0
130
雪かき部 #7 もう怖くない!SELECT文!
foursue
0
270
AIに書かせて、プラットフォームで縛る ― EKSプラットフォームで実践した責任境界と権限設計
elmodev09
1
1.1k
生成AIと進める探索的データ分析(2026.10.03 第122回Tokyo.R勉強会)
tatamiya
0
570
インバスケット試験対策アプリを 作って見えたAIエージェント構築 ナレッジ2選
shichijoyuhi
0
100
Apache Iceberg が拓く AI 時代のオープンレイクハウス
tomtanaka
0
210
Featured
See All Featured
First, design no harm
axbom
PRO
2
1.3k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Designing for humans not robots
tammielis
254
26k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
910
Utilizing Notion as your number one productivity tool
mfonobong
4
610
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
250
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.2k
Google's AI Overviews - The New Search
badams
0
1.6k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
470
Balancing Empowerment & Direction
lara
6
1.3k
Mind Mapping
helmedeiros
1
390
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ʹΠϯετʔϧ͞ΕΔඞཁ ͕͋Δ • அใͷૹ৴ʹಉҙͨ͠ϢʔβͷΈͷࣈ
ॴײ • ؔ࿈ٕज़ηΩϡϦςΟͱརศੑͷτϨʔυΦϑ • ඞཁेͳػೳ • ಛʹಉҰυϝΠϯͰͷΞϓϦಋઢʹྑ͍ • ϦϦʔεͨͯ͠ͳͷͰυΩυΩ͠ͳ͕Βݟक͍ͬͯ·͢
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠