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
10k
ディープリンクの 設計と実装 - iOSDC2017
一休レストランiOSアプリでディープリンクを実装する際に得られた知見を共有します
ninjinkun
September 16, 2017
Tweet
Share
More Decks by ninjinkun
See All by ninjinkun
買収から2ヶ月でシステム統合した話
ninjinkun
0
59
Designer's and Engineer's Thinking Styles
ninjinkun
0
160
Launchable Webinar テストを効率化して生産性を上げる方法
ninjinkun
2
520
スマートフォンアプリ開発における共創的な開発チーム
ninjinkun
61
19k
ReSwiftでアプリの状態管理 / Reactive Swift Meetup
ninjinkun
9
16k
フリルのアプリ開発今昔物語
ninjinkun
3
2.2k
プロトタイピング合宿によるデザインリニューアル
ninjinkun
1
3k
デザイナーが仕事をしやすいアプリエンジニアを考える
ninjinkun
4
640
Elevationで影が思ったように出ないとき
ninjinkun
4
12k
Other Decks in Programming
See All in Programming
Unity Android XR入門
sakutama_11
0
170
Honoとフロントエンドの 型安全性について
yodaka
7
1.4k
Domain-Driven Transformation
hschwentner
2
1.9k
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
14
4.5k
Visual StudioのGitHub Copilotでいろいろやってみる
tomokusaba
1
200
もう少しテストを書きたいんじゃ〜 #phpstudy
o0h
PRO
2
100
pylint custom ruleで始めるレビュー自動化
shogoujiie
0
140
PHPのバージョンアップ時にも役立ったAST
matsuo_atsushi
0
210
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
1
490
Serverless Rust: Your Low-Risk Entry Point to Rust in Production (and the benefits are huge)
lmammino
1
140
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.5k
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
650
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Embracing the Ebb and Flow
colly
84
4.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
Speed Design
sergeychernyshev
27
800
Into the Great Unknown - MozCon
thekraken
35
1.6k
It's Worth the Effort
3n
184
28k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Fireside Chat
paigeccino
34
3.2k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
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 σʔλαΠΤϯςΟετ ҰٳਓࡐΛืू͍ͯ͠·͢