Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
120
Designer's and Engineer's Thinking Styles
ninjinkun
0
250
Launchable Webinar テストを効率化して生産性を上げる方法
ninjinkun
2
570
スマートフォンアプリ開発における共創的な開発チーム
ninjinkun
61
19k
ReSwiftでアプリの状態管理 / Reactive Swift Meetup
ninjinkun
9
17k
フリルのアプリ開発今昔物語
ninjinkun
3
2.2k
プロトタイピング合宿によるデザインリニューアル
ninjinkun
1
3.1k
デザイナーが仕事をしやすいアプリエンジニアを考える
ninjinkun
4
700
Elevationで影が思ったように出ないとき
ninjinkun
4
12k
Other Decks in Programming
See All in Programming
AIエージェントを活かすPM術 AI駆動開発の現場から
gyuta
0
430
AI時代を生き抜く 新卒エンジニアの生きる道
coconala_engineer
1
280
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
9
5.7k
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
7
2.2k
Cell-Based Architecture
larchanjo
0
130
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
2
220
TestingOsaka6_Ozono
o3
0
160
堅牢なフロントエンドテスト基盤を構築するために行った取り組み
shogo4131
8
2.4k
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
210
愛される翻訳の秘訣
kishikawakatsumi
3
330
Github Copilotのチャット履歴ビューワーを作りました~WPF、dotnet10もあるよ~ #clrh111
katsuyuzu
0
110
tparseでgo testの出力を見やすくする
utgwkk
2
240
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Faster Mobile Websites
deanohume
310
31k
4 Signs Your Business is Dying
shpigford
186
22k
Statistics for Hackers
jakevdp
799
230k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
710
Building Applications with DynamoDB
mza
96
6.8k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Documentation Writing (for coders)
carmenintech
76
5.2k
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 σʔλαΠΤϯςΟετ ҰٳਓࡐΛืू͍ͯ͠·͢