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
ディープリンクの 設計と実装 - iOSDC2017
Search
ninjinkun
September 16, 2017
Programming
18
9.4k
ディープリンクの 設計と実装 - iOSDC2017
一休レストランiOSアプリでディープリンクを実装する際に得られた知見を共有します
ninjinkun
September 16, 2017
Tweet
Share
More Decks by ninjinkun
See All by ninjinkun
Designer's and Engineer's Thinking Styles
ninjinkun
0
65
Launchable Webinar テストを効率化して生産性を上げる方法
ninjinkun
2
480
スマートフォンアプリ開発における共創的な開発チーム
ninjinkun
61
18k
ReSwiftでアプリの状態管理 / Reactive Swift Meetup
ninjinkun
9
16k
フリルのアプリ開発今昔物語
ninjinkun
3
2.1k
プロトタイピング合宿によるデザインリニューアル
ninjinkun
1
2.9k
デザイナーが仕事をしやすいアプリエンジニアを考える
ninjinkun
4
600
Elevationで影が思ったように出ないとき
ninjinkun
4
11k
Square Fragmentやめるってよ
ninjinkun
13
3.3k
Other Decks in Programming
See All in Programming
どうしてこうなった命名集 ~🔥編~ / OOC 2024 LT
pictiny
4
2.8k
Go1.22からの疑似乱数生成器について/go-122-pseudo-random-generator
convto
1
160
導入から5年が経って見えた Datadog APM 運用の課題
bgpat
2
540
Understanding Ast By Looking
inouehi
0
120
品質が高いコードって何?Rev2.1
ickx
1
490
オブジェクトしこう
okuramasafumi
2
130
Material 3で Material 2ぽい見た目にする
numeroanddev
2
250
TDDと今まで
kanayannet
0
140
htmx is fun!
codehex
2
190
Open Source Swiftc Workshop
kitasuke
1
180
自動テスト実行結果の目的を整理する / Organizing objectives of automated test results
twada
PRO
10
2.1k
Enhancing Applications with Accessibility API
kishikawakatsumi
3
890
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
35
2.4k
Embracing the Ebb and Flow
colly
78
4.1k
Ruby is Unlike a Banana
tanoku
95
10k
The Mythical Team-Month
searls
214
42k
Building a Scalable Design System with Sketch
lauravandoore
455
32k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
219
21k
Into the Great Unknown - MozCon
thekraken
10
830
Bash Introduction
62gerente
604
210k
Building Adaptive Systems
keathley
29
1.8k
How STYLIGHT went responsive
nonsquared
92
4.7k
GitHub's CSS Performance
jonrohan
1023
450k
Transcript
σΟʔϓϦϯΫͷ ઃܭͱ࣮ @ninjinkun iOSDC 2017
ҰٳϨετϥϯ w ྑ͍͓ళΛ͓ಘʹΦϯϥΠϯͰ ༧ w ͥͻσʔτɺՈͰͷ৯ࣄɺ ͳͲʹ͝ར༻͍ͩ͘͞ w ͓खࠒͳ͓ళ๛Ͱ͢
ҰٳϨετϥϯ w ͜ͷΞϓϦΛσΟʔϓϦϯΫ ରԠͨ͠ݟΛڞ༗͠·͢
ΞδΣϯμ w σΟʔϓϦϯΫͱʁ w ͳͥσΟʔϓϦϯΫ͕ٻΊΒΕΔͷ͔ʁ w ઃܭͱ࣮ w 63-εΩʔϜ w
6OJWFSTBM-JOLT w ·ͱΊ
σΟʔϓϦϯΫͱʁ
·ͣ۩ମྫ͔Β
ࣗࣾαΠτ͔ΒΞϓϦΛ։͘ σΟʔϓϦϯΫͱʁ
(PPHMF͔ΒΞϓϦΛ։͘ σΟʔϓϦϯΫͱʁ
ϝʔϧ͔ΒΞϓϦΛ։͘ σΟʔϓϦϯΫͱʁ
σΟʔϓϦϯΫ w ֎෦͔ΒΞϓϦͷಛఆͷը໘ʹભҠ͢Δख๏ͷ૯শ w "OESPJEแׅ͢ΔͨΊʹੜ·Ε໊ͨশͱࢥΘΕ w J04Ͱͷ࣮ํ๏ͱͯ͠63-εΩʔϜͱ 6OJWFSTBM-JOLT͕͋Δ σΟʔϓϦϯΫͱʁ
63-εΩʔϜ w ͖ͬ͞ͷόφʔ͔Β։͘ํ w ಠࣗͷ63-εΩʔϜΛఆٛ͢Δ w ྫ w υϝΠϯΛೖΕ͍ͯΔཧ༝ޙड़ w
J1IPOF04 ͔Βར ༻Մೳ σΟʔϓϦϯΫͱʁ rsikyu://restaurant.ikyu.com/100198/
63-εΩʔϜ w ଞࣾΞϓϦ͔Β։͘ʹಠࣗ63-εΩʔϜΛΈࠐ ΜͰΒ͏ඞཁ͕͋Δ w εΩʔϜΛ֤ΞϓϦʹϋʔυίʔσΟϯά͢Δඞཁ ͕͋Δ σΟʔϓϦϯΫͱʁ let IkyuScheme
= "rsikyu" let IkyuDomain = "restaurant.ikyu.com" func openIkyuRestaurant(restaurantId: Int) { UIApplication.shared.open( URL(string: "\(IkyuScheme)://\(IkyuDomain)/\(restaurantId)/")!, options: [ : ], completionHandler: nil ) }
6OJWFSTBM-JOLT w ͖ͬ͞ͷ(PPHMF͔Β։͘ํ w )551 4 ͷ63-͔ΒΞϓϦΛ ։͘ w ྫ
w J04 ͔Βར༻Մೳ σΟʔϓϦϯΫͱʁ https://restaurant.ikyu.com/100198/
6OJWFSTBM-JOLT w ଞࣾΞϓϦ͔Β։͘ࡍ)551ϦϯΫΛ։͚ͩ͘ w 4BGBSJͰ։͘ॲཧ࣮͑͞͞Ε͍ͯΕࣗಈతʹ࿈ ܞ͞ΕΔ σΟʔϓϦϯΫͱʁ func openInSafari(url: String)
{ UIApplication.shared.open(URL(string: url)!, options: [ : ], completionHandler: nil) }
Ͳ͕ͬͪσΟʔϓϦϯΫʁ w ݱࡏͰ6OJWFSTBM-JOLTͷํ͕σΟʔϓϦ ϯΫͱͯ͠ೝ͞Ε͍ͩͯ͠ΔΑ͏ʹࢥ͏ʢഽײʣ w ͜͏ݴΘΕͨΒ6OJWFSTBM-JOLTΛΔ͜ͱʹͳΓ ͦ͏ σΟʔϓϦϯΫͱʁ զ͕ࣾσΟʔϓϦϯΫ ʹରԠͤΜͷ͔Ͷ
ͳͥσΟʔϓϦϯΫ͕ ٻΊΒΕΔͷ͔ʁ
8FC͕ڧ͍ձࣾͷ ͳͥσΟʔϓϦϯΫ͕ٻΊΒΕΔͷ͔ʁ Ϣʔβʔ͕(PPHMF͔Βೖͬͯ ͖͙ͯ͢ؼͯ͠͠·͏ʜ ΞϓϦʹ༠ಋ͢Ε ճ༡ͯ͠Β͑Δ͠ ϓογϡ௨ૹΕΔʂ ΞϓϦϦϐʔτߴ͍ Β͍͠͡Όͳ͍͔
ΞϓϦ͕ڧ͍ձࣾͷ ͳͥσΟʔϓϦϯΫ͕ٻΊΒΕΔͷ͔ʁ ΞϓϦͷ৽نΠϯετʔϧ͕ ࠂཔΈͰʜ 4&0Ͱू٬Ͱ͖ΕࣗࣾͰίϯτϩʔϧͰ ͖Δྲྀೖνϟωϧ͕૿͑Δʂ (PPHMFʹίϯτϩʔϧ͞ΕΔ νϟωϧͰ͋ΔΜ͕ͩʜ
എܠͷ·ͱΊ w ΞϓϦͷू٬νϟωϧͱͯ͠8FCΛ͏ྲྀΕ͕ ҰൠԽ͖ͯͨ͠ w 8FCϑΝʔετͷձࣾ8FC͔ΒΞϓϦʹ༠ಋ͠ ͍ͨ w ΞϓϦϑΝʔετͷձࣾ4&0Ͱू٬͍ͨ͠ w
ΞϓϦͷͨΊʹ8FCΛ͕ΜΔ࣌ ͳͥσΟʔϓϦϯΫ͕ٻΊΒΕΔͷ͔ʁ
σΟʔϓϦϯΫͷ ઃܭͱ࣮
σΟʔϓϦϯΫ࣮ͷॱ൪ w ݸਓతͳ͓͢͢Ίॱ w ·ͣ63-εΩʔϜ w ࣍ʹ6OJWFSTBM-JOLT
σΟʔϓϦϯΫ࣮ͷॱ൪ w ྆ํͱ63-ˠΞϓϦը໘ͷϚοϐϯάΛ ઃܭɾ࣮͢Δඞཁ͕͋Δ w 63-εΩʔϜσόΠεͰ݁͢ΔͷͰݕূָ͕ w 63-εΩʔϜˠ6OJWFSTBM-JOLTͷม؆୯
URLεΩʔϜͷઃܭͱ࣮
ΞϓϦͷ63-ઃܭ w ͦͦΞϓϦʹ63-ͷ֓೦ͳ͍ w ͔͠͠σΟʔϓϦϯΫ࣮ݱͷͨΊʹը໘ʹ63-Λ ׂΓৼΔඞཁ͕ग़ͯ͘Δ w ˠ63-ઃܭ͕ඞཁ 63-εΩʔϜઃܭͱ࣮
ΞϓϦͷ63-ઃܭ w ࢲݟͰ8FCͷ63-ʹἧ͑Δͷ͕ྑ͍ͱࢥ͏ w 8FC63-ˠΞϓϦ63-ͷϚοϐϯάΛߟ͑Δख ͕ؒল͚Δ w શʹಉ͡ʹἧ͑ΒΕͳ͍έʔεଟʑ͋Δ͕ɺ جຊ͜ͷํͰ w
8FC͕3&45GVMͳ63-ʹͳ͍ͬͯΕ˕ 63-εΩʔϜઃܭͱ࣮
ҰٳϨετϥϯͷ63-εΩʔϜ w Ϩετϥϯϖʔδ w ϓϥϯϖʔδ 63-εΩʔϜઃܭͱ࣮ rsikyu://restaurant.ikyu.com/:restaurant_id/plan:plan_id rsikyu://restaurant.ikyu.com/:restaurant_id rsikyu://restaurant.ikyu.com/105756 ྫ:
rsikyu://restaurant.ikyu.com/105756/plan10458040/ https://restaurant.ikyu.com/105756 Web: rhttps://restaurant.ikyu.com/105756/plan10458040/ ྫ: Web:
ҰٳϨετϥϯͷ63-εΩʔϜ w ݕࡧϖʔδ w 8FCͷݕࡧͷ༷ʹ͕Μͬͯ߹Θ͍ͤͯΔ 63-εΩʔϜઃܭͱ࣮ rsikyu://restaurant.ikyu.com/search rsikyu://restaurant.ikyu.com/search? said=1000&rtpc=20000&rtpc=20007&rtpc=20008&rtpc=20999&rtpc=10999 ྫ:
https://restaurant.ikyu.com/rsMain/rsSrchPlan.asp? said=1000&rtpc=20000&rtpc=20007&rtpc=20008&rtpc=20999&rtpc=10999 Web:
࣮ w ۪ʹ"QQ%FMFHBUFΛ࣮͢ΔͱذͩΒ͚ʹ 63-εΩʔϜઃܭͱ࣮ func application(_ app: UIApplication, open url:
URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { guard let scheme = url.scheme else { return false } switch scheme { case "rsikyu": switch url.path { case "/reserve": return true case "/login": return true default: return false } default: return false } }
63-ϧʔλʔ͏ͱָ w 63-ͷύʔεͱը໘ͷݺͼग़͠ϧʔλʔʹͤΔ w ΫΤϦͷύʔεͱ͔ຯʹ໘ w ҰٳͰ%FFQ-JOL,JUΛ࠾༻ 63-εΩʔϜઃܭͱ࣮ func application(_
app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { return Router().handle(url, withCompletion: nil) } router["/:restaurant_id([0-9]{6})"] = { (deepLink: DPLDeepLink?) in ... } pathఆٛ ݺͼग़͠
63-ΞϓϦͰศར w ϓογϡ௨͔Β։͘ը໘Λࢦఆ͢Δ 63-εΩʔϜઃܭͱ࣮ { aps: … url: rsikyu://…/1234 }
APNS Payload
63-ΞϓϦͰศར w ΞϓϦ8FC7JFX͔Β։͘ը໘Λࢦఆ͢Δ 63-εΩʔϜઃܭͱ࣮ <a href=“rsikyu://…/ 1234”>…</a> WebViewͷ ϦϯΫ
URLεΩʔϜ࣮࣌ͷ ͓ΈϙΠϯτ
ը໘ΛͲͷλϒ͔Β։͔͘ 63-εΩʔϜ͓ΈϙΠϯτ ͜ͷαΠτ͔Β ͜ͷը໘Λ ͲͷλϒͰ։͘ʁ
ը໘ΛͲͷλϒ͔Β։͔͘ w ϞʔμϧͰ։͘ͱָ͚ͩͲʜ w ίϯςΩετ͕࿈ଓ͡Όͳ͘ͳΔײ w ී௨ʹΞϓϦͰ౸ୡ͢Δͷͱಉ͡λϒΛ͏ w ෳͷܦ࿏Ͱ౸ୡͰ͖Δ߹ʁˠ͍͍ײ͡ʹʜ 63-εΩʔϜ͓ΈϙΠϯτ
υϦϧμϯͷ࠶ݱ w ֊͕ؔ͋ΔߏΛ࠶ݱ͢Δඞཁ͕͋Δ 63-εΩʔϜ͓ΈϙΠϯτ
SafariͰϓϥϯͷҰཡ ʹΔಋઢ͕͋Δ͕… ΞϓϦͰಉ͡ը໘Λ։͘ͱ τοϓʹ͔͠Εͳͯ͘ϓ ϥϯ͕ม͑ΒΕͳ͍ʂ
υϦϧμϯͷ࠶ݱ w ҰͭલͷҰཡը໘·Ͱ6*/BWJHBUJPO$POUSPMMFSʹ QVTI͓ͯ͘͠ 63-εΩʔϜ͓ΈϙΠϯτ ϓϥϯ͕બΔ
શը໘ରԠ͢Δඞཁ͋Δʁ w શը໘ʹ63-εΩʔϜׂΓৼΔͷ͠ΜͲ͍ w ҰٳϨετϥϯͰ·ͩը໘ͷΈͷରԠ w 8FCϖʔδͷ17Ͱஅ w (PPHMF͔Βͷྲྀೖ͕ଟ͍ϖʔδʢʹରԠͨ͠ ը໘ʣ
w Ϣʔβʔ͕Α͘͏ϖʔδʢʹରԠͨ͠ը໘ʣ 63-εΩʔϜ͓ΈϙΠϯτ
URLεΩʔϜઃܭʹ͍ͭͯͷ ݸਓతͳ͝ఏҊ
ݸਓతʹͯ͠Δ͜ͱ w Α͋͘Δ63-εΩʔϜ 63-εΩʔϜ͝ఏҊ myapp://search myapp://item?id=123456 ͜͜hostͰʁ
ը໘IPTUʁ w 63-εΩʔϜͷ͍ํಠࣗʹܾΊΒΕΔͷͰ͜͜ ΛIPTUͱఆٛ͠ͳ͍͍ͯ͘ͷ͕ͩʜ w ͔͠͠ΞϓϦΛ8FCαΠτͷࣸ૾ͱߟ͑ΔͳΒɺ IUUQεΩʔϜʹ͕͓ͨͬͯ͘͠ํ͕ແͰͳ͍͔ 63-εΩʔϜ͝ఏҊ <scheme>:<scheme-specific-part>
ҰൠతͳεΩʔϜͷߏจ: <scheme>://<user>:<password>@<host>:<port>/<url-path> ҰൠతͳΠϯλʔωοτεΩʔϜͷߏจ:
ͱΓ͋͑ͣIPTUΛೖΕͯΈΔ w IPTUҎ͕߱QBUIʹͳΔ w ը໘QBUIͷ͕ೲಘ͘͢͠ͳ͍ʁ w ͕ࣗݸਓతʹओுͯ͠Δ͚ͩͰɺҰൠత͔Θ͔ Βͳ͍ 63-εΩʔϜ͝ఏҊ rsikyu://restaurant.ikyu.com/search
ԿͰ͍͍͚ͲͱΓ͋͑ͣ αʔϏεͷυϝΠϯೖΕͨ
IPTUলུܥ͋Δ͕ʜ w ͓͏ͱͯ͠໎Λ͔͚ͨ͜ͱ͕ʜ w ύʔαʔ͕αϙʔτ͍ͯ͠ͳ͍߹͕͋ΔͷͰࢭΊ ͨํ͕ແ w ݟ׳Εͳ͍ܗࣜͳͷͰΈΜͳࠞཚ 63-εΩʔϜ͝ఏҊ rsikyu:/search
rsikyu:///search
IPTUΛೖΕΔϝϦοτ w "OESPJEͱڞ௨Խ͢Δͷָ͕ w "OESPJEͰIPTUͱQBUIΛ۠ผͯ͠ઃఆ͢Δ w "OESPJEΤϯδχΞ͕ී௨ʹ63-ઃܭ͢Δͱɺύε Ͱը໘ذ͢ΔΑ͏ʹ࡞Δʢͱࢥ͏ʣ 63-εΩʔϜ͝ఏҊ Android
Manifest.xml <intent-filter> … <data android:scheme=“rsikyu" android:host="restaurant.ikyu.com" android:pathPrefix=“/search" /> </intent-filter>
͏IPTUը໘Ͱӡ༻ͯ͠ΔΘʜ w ࠔΒͳ͍͚Ͳɺ͠ͳ͍͔͢Ͷ w ͓ͦΒ͘04ຖʹผʑʹઃܭͯ͠63-͕౷ҰͰ͖ͳ ͘ͳͬͨαʔϏεଟ͍ͣ 63-εΩʔϜ͝ఏҊ
ͪͳΈʹʜ(PPHMF.BQͷεΩʔϜ w TDIFNFҎ߱શ෦ΫΤϦʂ 63-εΩʔϜ͝ఏҊ comgooglemaps://?parameters
Universal Linksͷ ઃܭͱ࣮
BQQMFBQQTJUFBTTPDJBUJPOϑΝΠϧ w αΠτͷτοϓԼʹஔ͘ 6OJWFSTBM-JOLTઃܭͱ࣮ https://restaurant.ikyu.com/apple-app-site-association { "applinks": { "app": [],
"details": [ { "appID": "53M4W6LWLM.com.ikyu.restaurant", "paths": [ "NOT /rsCosite.asp", "NOT /mdr.asp", "/rsSd/1?????/amp/", "/rsSd/1?????/amp/*", "/1?????/plan????????/", "/1?????/", "/rsSd/main/script/restU.asp", "/rsSd/main/script/planU.asp", "/rsSd/", "/" ] } ] } } ͙͙Εग़ͯ͘ΔͷͰखʹ…
BQQMFBQQTJUFBTTPDJBUJPOϑΝΠϧ w ଞࣾͷϑΝΠϧΛࢀߟʹ͢Δ w ΈΜͳΞΫηεՄೳͳͱ͜Ζʹஔ͍͍ͯΔͷͰ 6OJWFSTBM-JOLTઃܭͱ࣮ https://instagram.com/apple-app-site-association { "webcredentials": {
"apps": [ "777W53UFB2.com.burbn.instagram", "MH9GU9K5PX.com.burbn.instagram", "T84QZS65DQID.com.facebook.Instagram", "3NW3KR6Q88.com.facebook.Instagram", "3NW3KR6Q88.com.facebook.InstagramInHouse" ] }, "applinks": { "apps": [], "details": [ { "appID": "777W53UFB2.com.burbn.instagram", "paths": [ "NOT /about/*", "NOT /about", "NOT /developer/*", "NOT /developer",
FOUJUMFNFOUT 6OJWFSTBM-JOLTઃܭͱ࣮
"QQ%FMFHBUF w 63-εΩʔϜ͕࣮ࡁΈͩͱָ 6OJWFSTBM-JOLTઃܭͱ࣮ func application(_ application: UIApplication, continue userActivity:
NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { if userActivity.activityType == NSUserActivityTypeBrowsingWeb { if let webpageURL = userActivity.webpageURL { // URLεΩʔϜʹมͯ͠ىಈ let urlScheme = URLSchemeConverter.convertUniversalLinks(url: webpageURL) return Router().handle(url: urlScheme) } } return false }
63-εΩʔϜʹม͢Δॲཧ 6OJWFSTBM-JOLTઃܭͱ࣮ static func convertUniversalLinks(url: URL) -> URL { let
baseURL = "rsikyu://restaurant.ikyu.com/" let query = url.query ?? "" let restaurantId = url.queryStrings["rstId"] ?? "" let planNo = url.queryStrings["planNo"] ?? "" switch url.path { case “/rsSd/main/script/restU.asp”: // URLεΩʔϜͱpath͕Ұக͍ͯ͠ͳ͍ͷखಈม return URL(string: "\(baseURL)\(restaurantId)?\(query)") ?? url case "/rsSd/main/script/planU.asp": return URL(string: "\(baseURL)\(restaurantId)/plan\(planNo)") ?? url case "/rsSd/": return URL(string: "\(baseURL)") ?? url case "/rsMain/rsSrchPlan.asp", "/rsSd/main/script/srchLstU.asp", "/rsSd/main/script/srchRestLstU.asp": return URL(string: "\(baseURL)search?\(query)") ?? url case nil: return URL(string: "\(baseURL)")! default: return URL(string: "\(baseURL)\(url.path)") ?? url } }
Universal Linksͷ Ϣʔβʔମݧ
6OJWFSTBM-JOLTؾ࣋ͪѱ͍ʁ w ͋͘·Ͱݸਓతͳײ֮Ͱ͕͢ʜ w 4BGBSJˠΞϓϦҧײΛײ͡ ͍͢ w 8FCϖʔδͷભҠΛظͯ͠ Δ͔Β 6OJWFSTBM-JOLTϢʔβʔମݧ
6OJWFSTBM-JOLTؾ࣋ͪѱ͍ʁ w ϝʔϧଞࣾΞϓϦˠΞϓϦ ͋·ΓҧײΛײ͡ͳ͍ 6OJWFSTBM-JOLTϢʔβʔମݧ
6OJWFSTBM-JOLTؾ࣋ͪѱ͍ʁ w ؾ࣋ͪѱ͍ͱײ͡Δਓଟ͍ͱࢥΘΕΔ w ࣗ࠷ॳҧײ͕͋ͬͨ w ͔͠͠׳Εͷେ͖͍ w ଟ͘ͷΞϓϦ͕࣮ͯ͠Ұൠతʹͳ͖ͬͯͨࠓɺ ΈΜͳ݁ߏ׳Ε͍ͯΔΜ͡Όͳ͍ʁ
6OJWFSTBM-JOLTϢʔβʔମݧ
ΦϯΦϑ w 6OJWFSTBM-JOLTϢʔβʔ͕ ΦϯΦϑͰ͖Δͷ͕ͩʜ w ӈ্ʹग़ΔυϝΠϯΛλοϓ ͢ΔͱΦϑʹͳΔ w ҟৗʹΘ͔Γʹ͍͘ w
ͦͯ͠J04͔Β͜ͷಋઢ ͳ͘ͳΔ 6OJWFSTBM-JOLTϢʔβʔମݧ
ΦϯΦϑ w ϒϥβͰϦϯΫΛԡ͠ w ʮ։͘ʯΛબͿͱΦϑʹ w ͬͪ͜Θ͔ΒΜ w J04Ͱ͚ͬͪͩ͜Δ 6OJWFSTBM-JOLTϢʔβʔମݧ
ະΠϯετʔϧ࣌ͷ"QQ4UPSF༠ಋ w ϒϥβ͔ΒΞϓϦ͕ೖ͍ͬͯΔ͔Λݕ͢Δ͜ͱ جຊతʹͰ͖ͳ͍ w ੲ+BWB4DSJQUͰϋοΫ͍͕ͯͨ͠ʜ w J04͔ΒʮΞϓϦΛ։͘ʯμΠΞϩά͕ग़ΔΑ ͏ʹͳͬͯ͑ͳ͘ͳͬͨ 6OJWFSTBM-JOLTϢʔβʔମݧ
ະΠϯετʔϧ࣌ͷ"QQ4UPSF༠ಋ w 6OJWFSTBM-JOLTΛ͏·͘͏ ͱΠϯετʔϧৼΓ͚͕Ͱ ͖Δ w "EKVTUʢΠϯετʔϧτ ϥοΩϯάαʔϏεʣͰ࣮ ͞Ε͍ͯͨ 6OJWFSTBM-JOLTϢʔβʔମݧ
Universal Links ϦμΠϨΫτ όφʔλοϓ Webଆͷඈͼઌ͕AppStoreͷϦμΠϨΫλ ະΠϯετʔϧ Πϯετʔϧ ࡁΈ Universal Links͔Β
ΞϓϦىಈ
Universal Links࣮࣌ͷ ͓ΈϙΠϯτ
8FCଆͷ17ܭଌ͕ڰ͏ w J04͕ϦϯΫΛॻ͖͑ΔͷͰ8FCଆͰݕෆՄ w ΞϓϦଆͰ17ʹܭ্͢ΔΈ͕ඞཁ w ҰٳͰݩ63-ΛΞϓϦଆͰ(PPHMF"OBMZUJDT ʹ্͛ͯ߹ࢉ 6OJWFSTBM-JOLT͓ΈϙΠϯτ
SFGFSSFS͕ͳ͍ dJ04 w ΞϓϦଆͰݩ63-͔͠Θ͔Βͳ͔ͬͨ w ఏܞαΠτ͔Βͷίϯόʔδϣϯ͕ܭଌͰ͖ͳ͍ w J04Ͱղܾ 6OJWFSTBM-JOLT͓ΈϙΠϯτ /*
The URL of the webpage that referred (linked to) webpageURL.*/ @available(iOS 11.0, *) open var referrerURL: URL?
".1ͱͷ݉Ͷ߹͍ w (PPHMFͷݕࡧ݁Ռ͔Β·ͣ".1 ͕։͘ w ".1Ωϟογϡ(PPHMFʹϗε ςΟϯά͞Ε͍ͯΔ w 6OJWFSTBM-JOLT͕ൃಈ͠ͳ͍ w
(PPHMFˠ".1ˠΞϓϦͱ͍͏ભ ҠʹͳΔ w ͪͳΈʹ".1ͷJGSBNFͷϦϯΫ͕6OJWFSTBM -JOLTͰ։͚ΔͷJ04͔Β 6OJWFSTBM-JOLT͓ΈϙΠϯτ
8FCͱΞϓϦͷϏδϡΞϧ౷Ұ w ".1ͷӨڹ͋Γɺ8FCΛݟ͔ͯΒΞϓϦʹೖͬ ͯ͘ΔϢʔβʔ͕ଟ͘ͳΔ w 8FCͱΞϓϦͰϏδϡΞϧͷ͕ࠩେ͖͍ͱϢʔβʔ ͕ڻ͘ 6OJWFSTBM-JOLT͓ΈϙΠϯτ
8FCͱΞϓϦͷϏδϡΞϧ౷Ұ w ҰٳΩʔϙΠϯτͷ౷ҰͰରԠ༧ఆ 6OJWFSTBM-JOLT͓ΈϙΠϯτ
αϒυϝΠϯ w αϒυϝΠϯΛ·͍ͨͰൃಈͯ͠͠·͏ w ϩάΠϯը໘NZJLZVDPN͔Β SFTUBVSBOUJLZVDPNϦμΠϨΫτͰΞϓϦىಈ w υϝΠϯΛ౷Ұ͢Δ͔͠ख͕ͳͦ͞͏ w ϓϩΩγͰϩάΠϯը໘ͷυϝΠϯΛॻ͖͑ͯର
Ԡ༧ఆ 6OJWFSTBM-JOLT͓ΈϙΠϯτ
·ͱΊ
·ͱΊ w σΟʔϓϦϯΫͷৄࡉͱٻΊΒΕ͍ͯΔഎܠΛղઆͨ͠ w 63-εΩʔϜˠ6OJWFSTBM-JOLTͷॱͰ࣮͢Δͷ͕͓ ͢͢Ί w 63-εΩʔϜʹIPTUΛೖΕΔ͝ఏҊ • ࠙ձͰօ͞Μ͕ߟ͑ͨ࠷ڧͷσΟʔϓϦϯΫΛڭ͑ͯ
͍ͩ͘͞ rsikyu://restaurant.ikyu.com/search
w J04ΤϯδχΞ w ϑϩϯτΤϯυΤϯδχΞ w αʔόʔαΠυΤϯδχΞ w σʔλαΠΤϯςΟετ ҰٳਓࡐΛืू͍ͯ͠·͢