ディープリンクの
設計と実装 - iOSDC2017

6139fd48daa26e786794598c4a6b546a?s=47 ninjinkun
September 16, 2017

ディープリンクの
設計と実装 - iOSDC2017

一休レストランiOSアプリでディープリンクを実装する際に得られた知見を共有します

6139fd48daa26e786794598c4a6b546a?s=128

ninjinkun

September 16, 2017
Tweet

Transcript

  1. σΟʔϓϦϯΫͷ
 ઃܭͱ࣮૷ @ninjinkun iOSDC 2017

  2. ҰٳϨετϥϯ w ྑ͍͓ళΛ͓ಘʹΦϯϥΠϯͰ ༧໿ w ͥͻσʔτɺՈ଒Ͱͷ৯ࣄɺ
 ઀଴ͳͲʹ͝ར༻͍ͩ͘͞ w ͓खࠒͳ͓ళ΋๛෋Ͱ͢

  3. ҰٳϨετϥϯ w ͜ͷΞϓϦΛσΟʔϓϦϯΫ ରԠͨ͠஌ݟΛڞ༗͠·͢

  4. ΞδΣϯμ w σΟʔϓϦϯΫͱ͸ʁ w ͳͥσΟʔϓϦϯΫ͕ٻΊΒΕΔͷ͔ʁ w ઃܭͱ࣮૷ w 63-εΩʔϜ w

    6OJWFSTBM-JOLT w ·ͱΊ
  5. σΟʔϓϦϯΫͱ͸ʁ

  6. ·ͣ͸۩ମྫ͔Β

  7. ࣗࣾαΠτ͔ΒΞϓϦΛ։͘ σΟʔϓϦϯΫͱ͸ʁ

  8. (PPHMF͔ΒΞϓϦΛ։͘ σΟʔϓϦϯΫͱ͸ʁ

  9. ϝʔϧ͔ΒΞϓϦΛ։͘ σΟʔϓϦϯΫͱ͸ʁ

  10. σΟʔϓϦϯΫ w ֎෦͔ΒΞϓϦͷಛఆͷը໘ʹભҠ͢Δख๏ͷ૯শ w "OESPJE΋แׅ͢ΔͨΊʹੜ·Ε໊ͨশͱࢥΘΕ w J04Ͱͷ࣮૷ํ๏ͱͯ͠͸63-εΩʔϜͱ 6OJWFSTBM-JOLT͕͋Δ σΟʔϓϦϯΫͱ͸ʁ

  11. 63-εΩʔϜ w ͖ͬ͞ͷόφʔ͔Β։͘ํ w ಠࣗͷ63-εΩʔϜΛఆٛ͢Δ w ྫ w υϝΠϯΛೖΕ͍ͯΔཧ༝͸ޙड़ w

    J1IPOF04 ೥ ͔Βར ༻Մೳ σΟʔϓϦϯΫͱ͸ʁ rsikyu://restaurant.ikyu.com/100198/
  12. 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 ) }
  13. 6OJWFSTBM-JOLT w ͖ͬ͞ͷ(PPHMF͔Β։͘ํ w )551 4 ͷ63-͔ΒΞϓϦΛ ։͘ w ྫ

    w J04 ೥ ͔Βར༻Մೳ σΟʔϓϦϯΫͱ͸ʁ https://restaurant.ikyu.com/100198/
  14. 6OJWFSTBM-JOLT w ଞࣾΞϓϦ͔Β։͘ࡍ΋)551ϦϯΫΛ։͚ͩ͘ w 4BGBSJͰ։͘ॲཧ࣮͑͞૷͞Ε͍ͯΕ͹ࣗಈతʹ࿈ ܞ͞ΕΔ σΟʔϓϦϯΫͱ͸ʁ func openInSafari(url: String)

    { UIApplication.shared.open(URL(string: url)!, options: [ : ], completionHandler: nil) }
  15. Ͳ͕ͬͪσΟʔϓϦϯΫʁ w ೥ݱࡏͰ͸6OJWFSTBM-JOLTͷํ͕σΟʔϓϦ ϯΫͱͯ͠ೝ஌͞Ε͍ͩͯ͠ΔΑ͏ʹࢥ͏ʢഽײʣ w ͜͏ݴΘΕͨΒ6OJWFSTBM-JOLTΛ΍Δ͜ͱʹͳΓ ͦ͏ σΟʔϓϦϯΫͱ͸ʁ զ͕ࣾ͸σΟʔϓϦϯΫ ʹରԠͤΜͷ͔Ͷ

  16. ͳͥσΟʔϓϦϯΫ͕
 ٻΊΒΕΔͷ͔ʁ

  17. 8FC͕ڧ͍ձࣾͷ੠ ͳͥσΟʔϓϦϯΫ͕ٻΊΒΕΔͷ͔ʁ Ϣʔβʔ͕(PPHMF͔Βೖͬͯ ͖ͯ΋͙͢௚ؼͯ͠͠·͏ʜ ΞϓϦʹ༠ಋ͢Ε͹
 ճ༡ͯ͠΋Β͑Δ͠
 ϓογϡ௨஌΋ૹΕΔʂ ΞϓϦ͸Ϧϐʔτ཰΋ߴ͍ Β͍͠͡Όͳ͍͔

  18. ΞϓϦ͕ڧ͍ձࣾͷ੠ ͳͥσΟʔϓϦϯΫ͕ٻΊΒΕΔͷ͔ʁ ΞϓϦͷ৽نΠϯετʔϧ͕
 ޿ࠂཔΈͰʜ 4&0Ͱू٬Ͱ͖Ε͹ࣗࣾͰίϯτϩʔϧͰ ͖Δྲྀೖνϟωϧ͕૿͑Δʂ (PPHMFʹίϯτϩʔϧ͞ΕΔ
 νϟωϧͰ΋͋ΔΜ͕ͩʜ

  19. എܠͷ·ͱΊ w ΞϓϦͷू٬νϟωϧͱͯ͠8FCΛ࢖͏ྲྀΕ͕
 ҰൠԽ͖ͯͨ͠ w 8FCϑΝʔετͷձࣾ͸8FC͔ΒΞϓϦʹ༠ಋ͠ ͍ͨ w ΞϓϦϑΝʔετͷձࣾ͸4&0Ͱू٬͍ͨ͠ w

    ΞϓϦͷͨΊʹ8FCΛ͕Μ͹Δ࣌୅ ͳͥσΟʔϓϦϯΫ͕ٻΊΒΕΔͷ͔ʁ
  20. σΟʔϓϦϯΫͷ
 ઃܭͱ࣮૷

  21. σΟʔϓϦϯΫ࣮૷ͷॱ൪ w ݸਓతͳ͓͢͢Ίॱ w ·ͣ63-εΩʔϜ w ࣍ʹ6OJWFSTBM-JOLT

  22. σΟʔϓϦϯΫ࣮૷ͷॱ൪ w ྆ํͱ΋63-ˠΞϓϦը໘΁ͷϚοϐϯάΛ
 ઃܭɾ࣮૷͢Δඞཁ͕͋Δ w 63-εΩʔϜ͸σόΠεͰ׬݁͢ΔͷͰݕূָ͕ w 63-εΩʔϜˠ6OJWFSTBM-JOLT΁ͷม׵͸؆୯

  23. URLεΩʔϜͷઃܭͱ࣮૷

  24. ΞϓϦͷ63-ઃܭ w ͦ΋ͦ΋ΞϓϦʹ63-ͷ֓೦͸ͳ͍ w ͔͠͠σΟʔϓϦϯΫ࣮ݱͷͨΊʹ͸ը໘ʹ63-Λ ׂΓৼΔඞཁ͕ग़ͯ͘Δ w ˠ63-ઃܭ͕ඞཁ 63-εΩʔϜઃܭͱ࣮૷

  25. ΞϓϦͷ63-ઃܭ w ࢲݟͰ͸8FCͷ63-ʹἧ͑Δͷ͕ྑ͍ͱࢥ͏ w 8FC63-ˠΞϓϦ63-ͷϚοϐϯάΛߟ͑Δख ͕ؒল͚Δ w ׬શʹಉ͡ʹ͸ἧ͑ΒΕͳ͍έʔε΋ଟʑ͋Δ͕ɺ جຊ͸͜ͷํ਑Ͱ w

    8FC͕3&45GVMͳ63-ʹͳ͍ͬͯΕ͹˕ 63-εΩʔϜઃܭͱ࣮૷
  26. ҰٳϨετϥϯͷ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:
  27. ҰٳϨετϥϯͷ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:
  28. ࣮૷ 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 } }
  29. 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ఆٛ ݺͼग़͠
  30. 63-͸ΞϓϦ಺Ͱ΋ศར w ϓογϡ௨஌͔Β։͘ը໘Λࢦఆ͢Δ 63-εΩʔϜઃܭͱ࣮૷ { aps: … url: rsikyu://…/1234 }

    APNS Payload
  31. 63-͸ΞϓϦ಺Ͱ΋ศར w ΞϓϦ಺8FC7JFX͔Β։͘ը໘Λࢦఆ͢Δ 63-εΩʔϜઃܭͱ࣮૷ <a href=“rsikyu://…/ 1234”>…</a> WebView಺ͷ
 ϦϯΫ

  32. URLεΩʔϜ࣮૷࣌ͷ
 ͓೰ΈϙΠϯτ

  33. ը໘ΛͲͷλϒ͔Β։͔͘ 63-εΩʔϜ͓೰ΈϙΠϯτ ͜ͷαΠτ͔Β ͜ͷը໘Λ ͲͷλϒͰ։͘ʁ

  34. ը໘ΛͲͷλϒ͔Β։͔͘ w ϞʔμϧͰ։͘ͱָ͚ͩͲʜ w ίϯςΩετ͕࿈ଓ͡Όͳ͘ͳΔײ w ී௨ʹΞϓϦ಺Ͱ౸ୡ͢Δͷͱಉ͡λϒΛ࢖͏ w ෳ਺ͷܦ࿏Ͱ౸ୡͰ͖Δ৔߹͸ʁˠ͍͍ײ͡ʹʜ 63-εΩʔϜ͓೰ΈϙΠϯτ

  35. υϦϧμ΢ϯͷ࠶ݱ w ֊૚ؔ܎͕͋Δߏ଄Λ࠶ݱ͢Δඞཁ͕͋Δ 63-εΩʔϜ͓೰ΈϙΠϯτ

  36. SafariͰ͸ϓϥϯͷҰཡ ʹ໭Δಋઢ͕͋Δ͕… ΞϓϦͰಉ͡ը໘Λ։͘ͱ
 τοϓʹ͔͠໭Εͳͯ͘ϓ ϥϯ͕ม͑ΒΕͳ͍ʂ

  37. υϦϧμ΢ϯͷ࠶ݱ w ҰͭલͷҰཡը໘·Ͱ6*/BWJHBUJPO$POUSPMMFSʹ QVTI͓ͯ͘͠ 63-εΩʔϜ͓೰ΈϙΠϯτ ϓϥϯ͕બ΂Δ

  38. શը໘ରԠ͢Δඞཁ͋Δʁ w શը໘ʹ63-εΩʔϜׂΓৼΔͷ͸͠ΜͲ͍ w ҰٳϨετϥϯͰ͸·ͩը໘ͷΈͷରԠ w 8FCϖʔδͷ17Ͱ൑அ w (PPHMF͔Βͷྲྀೖ͕ଟ͍ϖʔδʢʹରԠͨ͠ ը໘ʣ

    w Ϣʔβʔ͕Α͘࢖͏ϖʔδʢʹରԠͨ͠ը໘ʣ 63-εΩʔϜ͓೰ΈϙΠϯτ
  39. URLεΩʔϜઃܭʹ͍ͭͯͷ ݸਓతͳ͝ఏҊ

  40. ݸਓతʹ΋΍΋΍ͯ͠Δ͜ͱ w Α͋͘Δ63-εΩʔϜ 63-εΩʔϜ͝ఏҊ myapp://search myapp://item?id=123456 ͜͜͸hostͰ͸ʁ

  41. ը໘IPTUʁ w 63-εΩʔϜͷ࢖͍ํ͸ಠࣗʹܾΊΒΕΔͷͰ͜͜ ΛIPTUͱఆٛ͠ͳͯ͘΋͍͍ͷ͕ͩʜ
 
 w ͔͠͠ΞϓϦΛ8FCαΠτͷࣸ૾ͱߟ͑ΔͳΒɺ IUUQεΩʔϜʹ͕͓ͨͬͯ͘͠ํ͕ແ೉Ͱ͸ͳ͍͔ 63-εΩʔϜ͝ఏҊ <scheme>:<scheme-specific-part>

    ҰൠతͳεΩʔϜͷߏจ: <scheme>://<user>:<password>@<host>:<port>/<url-path> ҰൠతͳΠϯλʔωοτεΩʔϜͷߏจ:
  42. ͱΓ͋͑ͣIPTUΛೖΕͯΈΔ w IPTUҎ͕߱QBUIʹͳΔ w ը໘QBUIͷ͕ೲಘ͠΍͘͢ͳ͍ʁ w ࣗ෼͕ݸਓతʹओுͯ͠Δ͚ͩͰɺҰൠత͔͸Θ͔ Βͳ͍ 63-εΩʔϜ͝ఏҊ rsikyu://restaurant.ikyu.com/search

    ԿͰ΋͍͍͚ͲͱΓ͋͑ͣ αʔϏεͷυϝΠϯೖΕͨ
  43. IPTUলུܥ΋͋Δ͕ʜ w ࢖͓͏ͱͯ͠໎࿭Λ͔͚ͨ͜ͱ͕ʜ w ύʔαʔ͕αϙʔτ͍ͯ͠ͳ͍৔߹͕͋ΔͷͰࢭΊ ͨํ͕ແ೉ w ݟ׳Εͳ͍ܗࣜͳͷͰΈΜͳࠞཚ 63-εΩʔϜ͝ఏҊ rsikyu:/search

    rsikyu:///search
  44. 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>
  45. ΋͏IPTUը໘Ͱӡ༻ͯ͠ΔΘʜ w ࠔΒͳ͍͚Ͳɺ΋΍΋΍͠ͳ͍͔͢Ͷ w ͓ͦΒ͘04ຖʹผʑʹઃܭͯ͠63-͕౷ҰͰ͖ͳ ͘ͳͬͨαʔϏε͸ଟ͍͸ͣ 63-εΩʔϜ͝ఏҊ

  46. ͪͳΈʹʜ(PPHMF.BQͷεΩʔϜ w TDIFNFҎ߱શ෦ΫΤϦʂ 63-εΩʔϜ͝ఏҊ comgooglemaps://?parameters

  47. Universal Linksͷ
 ઃܭͱ࣮૷

  48. 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/", "/" ] } ] } } ͙͙Ε͹ग़ͯ͘ΔͷͰख୹ʹ…
  49. 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",
  50. FOUJUMFNFOUT 6OJWFSTBM-JOLTઃܭͱ࣮૷

  51. "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 }
  52. 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 } }
  53. Universal Linksͷ
 Ϣʔβʔମݧ

  54. 6OJWFSTBM-JOLT͸ؾ࣋ͪѱ͍ʁ w ͋͘·Ͱݸਓతͳײ֮Ͱ͕͢ʜ w 4BGBSJˠΞϓϦ͸ҧ࿨ײΛײ͡ ΍͍͢ w 8FCϖʔδͷભҠΛظ଴ͯ͠ Δ͔Β 6OJWFSTBM-JOLTϢʔβʔମݧ

  55. 6OJWFSTBM-JOLT͸ؾ࣋ͪѱ͍ʁ w ϝʔϧ΍ଞࣾΞϓϦˠΞϓϦ͸ ͋·Γҧ࿨ײΛײ͡ͳ͍ 6OJWFSTBM-JOLTϢʔβʔମݧ

  56. 6OJWFSTBM-JOLT͸ؾ࣋ͪѱ͍ʁ w ؾ࣋ͪѱ͍ͱײ͡Δਓ͸ଟ͍ͱࢥΘΕΔ w ࣗ෼΋࠷ॳ͸ҧ࿨ײ͕͋ͬͨ w ͔͠͠׳Εͷ໰୊΋େ͖͍ w ଟ͘ͷΞϓϦ͕࣮૷ͯ͠Ұൠతʹͳ͖ͬͯͨࠓɺ ΈΜͳ݁ߏ׳Ε͍ͯΔΜ͡Όͳ͍ʁ

    6OJWFSTBM-JOLTϢʔβʔମݧ
  57. ΦϯΦϑ w 6OJWFSTBM-JOLT͸Ϣʔβʔ͕ ΦϯΦϑͰ͖Δͷ͕ͩʜ w ӈ্ʹग़ΔυϝΠϯΛλοϓ ͢ΔͱΦϑʹͳΔ w ҟৗʹΘ͔Γʹ͍͘ w

    ͦͯ͠J04͔Β͜ͷಋઢ͸ ͳ͘ͳΔ 6OJWFSTBM-JOLTϢʔβʔମݧ
  58. ΦϯΦϑ w ϒϥ΢βͰϦϯΫΛ௕ԡ͠ w ʮ։͘ʯΛબͿͱΦϑʹ w ͬͪ͜΋Θ͔ΒΜ w J04Ͱ͸͚ͬͪͩ͜࢒Δ 6OJWFSTBM-JOLTϢʔβʔମݧ

  59. ະΠϯετʔϧ࣌ͷ"QQ4UPSF༠ಋ w ϒϥ΢β͔ΒΞϓϦ͕ೖ͍ͬͯΔ͔Λݕ஌͢Δ͜ͱ ͸جຊతʹ͸Ͱ͖ͳ͍ w ੲ͸+BWB4DSJQUͰϋοΫ͍͕ͯͨ͠ʜ w J04͔ΒʮΞϓϦΛ։͘ʯμΠΞϩά͕ग़ΔΑ ͏ʹͳͬͯ࢖͑ͳ͘ͳͬͨ 6OJWFSTBM-JOLTϢʔβʔମݧ

  60. ະΠϯετʔϧ࣌ͷ"QQ4UPSF༠ಋ w 6OJWFSTBM-JOLTΛ͏·͘࢖͏ ͱΠϯετʔϧৼΓ෼͚͕Ͱ ͖Δ w "EKVTUʢΠϯετʔϧτ ϥοΩϯάαʔϏεʣͰ࣮ ૷͞Ε͍ͯͨ 6OJWFSTBM-JOLTϢʔβʔମݧ

  61. Universal Links΁ ϦμΠϨΫτ όφʔλοϓ Webଆͷඈͼઌ͕AppStore΁ͷϦμΠϨΫλ ະΠϯετʔϧ Πϯετʔϧ
 ࡁΈ Universal Links͔Β


    ΞϓϦىಈ
  62. Universal Links࣮૷࣌ͷ
 ͓೰ΈϙΠϯτ

  63. 8FCଆͷ17ܭଌ͕ڰ͏ w J04͕ϦϯΫΛॻ͖׵͑ΔͷͰ8FCଆͰݕ஌ෆՄ w ΞϓϦଆͰ17ʹܭ্͢Δ࢓૊Έ͕ඞཁ w ҰٳͰ͸ݩ63-ΛΞϓϦଆͰ(PPHMF"OBMZUJDT ʹ্͛ͯ߹ࢉ 6OJWFSTBM-JOLT͓೰ΈϙΠϯτ

  64. 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?
  65. ".1ͱͷ݉Ͷ߹͍ w (PPHMFͷݕࡧ݁Ռ͔Β͸·ͣ".1 ͕։͘ w ".1Ωϟογϡ͸(PPHMFʹϗε ςΟϯά͞Ε͍ͯΔ w 6OJWFSTBM-JOLT͕ൃಈ͠ͳ͍ w

    (PPHMFˠ".1ˠΞϓϦͱ͍͏ભ ҠʹͳΔ w ͪͳΈʹ".1ͷJGSBNF಺ͷϦϯΫ͕6OJWFSTBM -JOLTͰ։͚Δͷ͸J04͔Β 6OJWFSTBM-JOLT͓೰ΈϙΠϯτ
  66. 8FCͱΞϓϦͷϏδϡΞϧ౷Ұ w ".1ͷӨڹ΋͋Γɺ8FCΛݟ͔ͯΒΞϓϦʹೖͬ ͯ͘ΔϢʔβʔ͕ଟ͘ͳΔ w 8FCͱΞϓϦͰϏδϡΞϧͷ͕ࠩେ͖͍ͱϢʔβʔ ͕ڻ͘ 6OJWFSTBM-JOLT͓೰ΈϙΠϯτ

  67. 8FCͱΞϓϦͷϏδϡΞϧ౷Ұ w Ұٳ͸ΩʔϙΠϯτͷ౷ҰͰରԠ༧ఆ 6OJWFSTBM-JOLT͓೰ΈϙΠϯτ

  68. αϒυϝΠϯ໰୊ w αϒυϝΠϯΛ·͍ͨͰ΋ൃಈͯ͠͠·͏ w ϩάΠϯը໘NZJLZVDPN͔Β SFTUBVSBOUJLZVDPN΁ϦμΠϨΫτͰΞϓϦىಈ w υϝΠϯΛ౷Ұ͢Δ͔͠ख͕ͳͦ͞͏ w ϓϩΩγͰϩάΠϯը໘ͷυϝΠϯΛॻ͖׵͑ͯର

    Ԡ༧ఆ 6OJWFSTBM-JOLT͓೰ΈϙΠϯτ
  69. ·ͱΊ

  70. ·ͱΊ w σΟʔϓϦϯΫͷৄࡉͱٻΊΒΕ͍ͯΔഎܠΛղઆͨ͠ w 63-εΩʔϜˠ6OJWFSTBM-JOLTͷॱͰ࣮૷͢Δͷ͕͓ ͢͢Ί w 63-εΩʔϜʹIPTUΛೖΕΔ͝ఏҊ • ࠙਌ձͰօ͞Μ͕ߟ͑ͨ࠷ڧͷσΟʔϓϦϯΫΛڭ͑ͯ

    ͍ͩ͘͞ rsikyu://restaurant.ikyu.com/search
  71. w J04ΤϯδχΞ w ϑϩϯτΤϯυΤϯδχΞ w αʔόʔαΠυΤϯδχΞ w σʔλαΠΤϯςΟετ Ұٳ͸ਓࡐΛืू͍ͯ͠·͢