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
120
空間再現力の鍵、APMPを読み解く
ridwy
1
510
空間ビデオフォーマット、MV-HEVCが写し撮る世界
ridwy
4
2.9k
空間オーディオを活用しよう!
ridwy
1
770
AVPlayerのHLS再生時のエラーをハンドリングする
ridwy
0
980
AirPlayの裏舞台
ridwy
0
3.2k
AVPlayerできちんとコンテンツ保護
ridwy
0
2.2k
検証 SharePlay media playback
ridwy
1
2.1k
カスタムInstrumentsでアプリをピカピカに!
ridwy
5
13k
Other Decks in Technology
See All in Technology
小規模OSSモデルは サイバーセキュリティ業務に どこまで使えるか
bbrbbq
0
160
スプシの手作業からの解脱 ~更新はClaude Codeに、見せ方と使い方はGASアプリに任せる~
kentarofujii
0
170
フィンテック養成勉強会#68
finengine
0
180
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
940
価値について
gree_tech
PRO
0
140
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
380
Browser Spec: Testing Hotwire with Ruby
takahashim
1
150
【データ横丁主催】AI エージェント時代のTranslytical Data Platform
shisyu_gaku
0
190
会社紹介資料 / Sansan Company Profile
sansan33
PRO
31
430k
Conditional PED-ANOVA: Hyperparameter Importance in Hierarchical & Dynamic Search Spaces
pfn
PRO
0
150
国際カードブランドルール変更に伴うクレジットカード決済取引仕様変更について
k1style
0
120
Post AI時代のリファクタリング実践記 / Refactoring in the post AI era
kaminashi
1
320
Featured
See All Featured
Making Projects Easy
brettharned
120
6.8k
The SEO Collaboration Effect
kristinabergwall1
1
600
The Curious Case for Waylosing
cassininazir
1
570
Marketing to machines
jonoalderson
1
5.9k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Deep Space Network (abreviated)
tonyrice
0
380
Rails Girls Zürich Keynote
gr2m
96
14k
Building AI with AI
inesmontani
PRO
1
1.3k
What's in a price? How to price your products and services
michaelherold
247
13k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Building the Perfect Custom Keyboard
takai
2
910
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
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ʹΠϯετʔϧ͞ΕΔඞཁ ͕͋Δ • அใͷૹ৴ʹಉҙͨ͠ϢʔβͷΈͷࣈ
ॴײ • ؔ࿈ٕज़ηΩϡϦςΟͱརศੑͷτϨʔυΦϑ • ඞཁेͳػೳ • ಛʹಉҰυϝΠϯͰͷΞϓϦಋઢʹྑ͍ • ϦϦʔεͨͯ͠ͳͷͰυΩυΩ͠ͳ͕Βݟक͍ͬͯ·͢
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠