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.5k
ディープリンクの 設計と実装 - 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
69
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.4k
Other Decks in Programming
See All in Programming
ADRを一年運用してみた/adr_after_a_year
hanhan1978
7
2.3k
Elm Form Validation
bkuhlmann
0
510
Site Reliability Engineering for GMO
pyama86
7
1k
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
110
SwiftUIで使いやすいToastの作り方 / How to build a Toast system which is easy to use in SwiftUI
lovee
3
130
二郎系ラーメンのコールで学ぶ AST 解析
memory1994
PRO
7
1.7k
Snowflakeで眠ったデータを起こそう!
estie
0
110
DMMプラットフォームがTiDB Cloudを採用した背景
pospome
8
3.9k
Ruby GitHub Packages
bkuhlmann
0
630
HUIT新歓2024「競技プログラミング、やってみませんか?」
slephy2784
1
260
if constexpr文はテンプレート世界のラムダ式である
faithandbrave
3
630
[技育CAMPアカデミア]アイディアを形に!【超入門】スマホアプリ開発〜リリースまでの流れをご紹介
teamlab
PRO
0
350
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
1
1.3k
Testing 201, or: Great Expectations
jmmastey
27
6.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Building Effective Engineering Teams - LeadDev
addyosmani
28
1.8k
Facilitating Awesome Meetings
lara
41
5.6k
Why Our Code Smells
bkeepers
PRO
331
56k
It's Worth the Effort
3n
180
27k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
Unsuck your backbone
ammeep
663
57k
The Pragmatic Product Professional
lauravandoore
24
5.8k
A Philosophy of Restraint
colly
196
16k
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 σʔλαΠΤϯςΟετ ҰٳਓࡐΛืू͍ͯ͠·͢