Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

ninjinkun
September 16, 2017

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

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

ninjinkun

September 16, 2017
Tweet

More Decks by ninjinkun

Other Decks in Programming

Transcript

  1. σΟʔϓϦϯΫͷ

    ઃܭͱ࣮૷
    @ninjinkun
    iOSDC 2017

    View Slide

  2. ҰٳϨετϥϯ
    w ྑ͍͓ళΛ͓ಘʹΦϯϥΠϯͰ
    ༧໿
    w ͥͻσʔτɺՈ଒Ͱͷ৯ࣄɺ

    ઀଴ͳͲʹ͝ར༻͍ͩ͘͞
    w ͓खࠒͳ͓ళ΋๛෋Ͱ͢

    View Slide

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

    View Slide

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

    View Slide

  5. σΟʔϓϦϯΫͱ͸ʁ

    View Slide

  6. ·ͣ͸۩ମྫ͔Β

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  11. 63-εΩʔϜ
    w ͖ͬ͞ͷόφʔ͔Β։͘ํ
    w ಠࣗͷ63-εΩʔϜΛఆٛ͢Δ
    w ྫ
    w υϝΠϯΛೖΕ͍ͯΔཧ༝͸ޙड़
    w J1IPOF04 ೥
    ͔Βར
    ༻Մೳ
    σΟʔϓϦϯΫͱ͸ʁ
    rsikyu://restaurant.ikyu.com/100198/

    View Slide

  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
    )
    }

    View Slide

  13. 6OJWFSTBM-JOLT
    w ͖ͬ͞ͷ(PPHMF͔Β։͘ํ
    w )551 4
    ͷ63-͔ΒΞϓϦΛ
    ։͘
    w ྫ
    w J04 ೥
    ͔Βར༻Մೳ
    σΟʔϓϦϯΫͱ͸ʁ
    https://restaurant.ikyu.com/100198/

    View Slide

  14. 6OJWFSTBM-JOLT
    w ଞࣾΞϓϦ͔Β։͘ࡍ΋)551ϦϯΫΛ։͚ͩ͘
    w 4BGBSJͰ։͘ॲཧ࣮͑͞૷͞Ε͍ͯΕ͹ࣗಈతʹ࿈
    ܞ͞ΕΔ
    σΟʔϓϦϯΫͱ͸ʁ
    func openInSafari(url: String) {
    UIApplication.shared.open(URL(string: url)!, options: [ : ], completionHandler: nil)
    }

    View Slide

  15. Ͳ͕ͬͪσΟʔϓϦϯΫʁ
    w ೥ݱࡏͰ͸6OJWFSTBM-JOLTͷํ͕σΟʔϓϦ
    ϯΫͱͯ͠ೝ஌͞Ε͍ͩͯ͠ΔΑ͏ʹࢥ͏ʢഽײʣ
    w ͜͏ݴΘΕͨΒ6OJWFSTBM-JOLTΛ΍Δ͜ͱʹͳΓ
    ͦ͏
    σΟʔϓϦϯΫͱ͸ʁ
    զ͕ࣾ͸σΟʔϓϦϯΫ
    ʹରԠͤΜͷ͔Ͷ

    View Slide

  16. ͳͥσΟʔϓϦϯΫ͕

    ٻΊΒΕΔͷ͔ʁ

    View Slide

  17. 8FC͕ڧ͍ձࣾͷ੠
    ͳͥσΟʔϓϦϯΫ͕ٻΊΒΕΔͷ͔ʁ
    Ϣʔβʔ͕(PPHMF͔Βೖͬͯ
    ͖ͯ΋͙͢௚ؼͯ͠͠·͏ʜ
    ΞϓϦʹ༠ಋ͢Ε͹

    ճ༡ͯ͠΋Β͑Δ͠

    ϓογϡ௨஌΋ૹΕΔʂ
    ΞϓϦ͸Ϧϐʔτ཰΋ߴ͍
    Β͍͠͡Όͳ͍͔

    View Slide

  18. ΞϓϦ͕ڧ͍ձࣾͷ੠
    ͳͥσΟʔϓϦϯΫ͕ٻΊΒΕΔͷ͔ʁ
    ΞϓϦͷ৽نΠϯετʔϧ͕

    ޿ࠂཔΈͰʜ
    4&0Ͱू٬Ͱ͖Ε͹ࣗࣾͰίϯτϩʔϧͰ
    ͖Δྲྀೖνϟωϧ͕૿͑Δʂ
    (PPHMFʹίϯτϩʔϧ͞ΕΔ

    νϟωϧͰ΋͋ΔΜ͕ͩʜ

    View Slide

  19. എܠͷ·ͱΊ
    w ΞϓϦͷू٬νϟωϧͱͯ͠8FCΛ࢖͏ྲྀΕ͕

    ҰൠԽ͖ͯͨ͠
    w 8FCϑΝʔετͷձࣾ͸8FC͔ΒΞϓϦʹ༠ಋ͠
    ͍ͨ
    w ΞϓϦϑΝʔετͷձࣾ͸4&0Ͱू٬͍ͨ͠
    w ΞϓϦͷͨΊʹ8FCΛ͕Μ͹Δ࣌୅
    ͳͥσΟʔϓϦϯΫ͕ٻΊΒΕΔͷ͔ʁ

    View Slide

  20. σΟʔϓϦϯΫͷ

    ઃܭͱ࣮૷

    View Slide

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

    View Slide

  22. σΟʔϓϦϯΫ࣮૷ͷॱ൪
    w ྆ํͱ΋63-ˠΞϓϦը໘΁ͷϚοϐϯάΛ

    ઃܭɾ࣮૷͢Δඞཁ͕͋Δ
    w 63-εΩʔϜ͸σόΠεͰ׬݁͢ΔͷͰݕূָ͕
    w 63-εΩʔϜˠ6OJWFSTBM-JOLT΁ͷม׵͸؆୯

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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:

    View Slide

  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:

    View Slide

  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
    }
    }

    View Slide

  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ఆٛ
    ݺͼग़͠

    View Slide

  30. 63-͸ΞϓϦ಺Ͱ΋ศར
    w ϓογϡ௨஌͔Β։͘ը໘Λࢦఆ͢Δ
    63-εΩʔϜઃܭͱ࣮૷
    {
    aps: …
    url: rsikyu://…/1234
    }
    APNS Payload

    View Slide

  31. 63-͸ΞϓϦ಺Ͱ΋ศར
    w ΞϓϦ಺8FC7JFX͔Β։͘ը໘Λࢦఆ͢Δ
    63-εΩʔϜઃܭͱ࣮૷
    1234”>…
    WebView಺ͷ

    ϦϯΫ

    View Slide

  32. URLεΩʔϜ࣮૷࣌ͷ

    ͓೰ΈϙΠϯτ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. SafariͰ͸ϓϥϯͷҰཡ
    ʹ໭Δಋઢ͕͋Δ͕…
    ΞϓϦͰಉ͡ը໘Λ։͘ͱ

    τοϓʹ͔͠໭Εͳͯ͘ϓ
    ϥϯ͕ม͑ΒΕͳ͍ʂ

    View Slide

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

    View Slide

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

    View Slide

  39. URLεΩʔϜઃܭʹ͍ͭͯͷ
    ݸਓతͳ͝ఏҊ

    View Slide

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

    View Slide

  41. ը໘IPTUʁ
    w 63-εΩʔϜͷ࢖͍ํ͸ಠࣗʹܾΊΒΕΔͷͰ͜͜
    ΛIPTUͱఆٛ͠ͳͯ͘΋͍͍ͷ͕ͩʜ


    w ͔͠͠ΞϓϦΛ8FCαΠτͷࣸ૾ͱߟ͑ΔͳΒɺ
    IUUQεΩʔϜʹ͕͓ͨͬͯ͘͠ํ͕ແ೉Ͱ͸ͳ͍͔
    63-εΩʔϜ͝ఏҊ
    :
    ҰൠతͳεΩʔϜͷߏจ:
    ://:@:/
    ҰൠతͳΠϯλʔωοτεΩʔϜͷߏจ:

    View Slide

  42. ͱΓ͋͑ͣIPTUΛೖΕͯΈΔ
    w IPTUҎ͕߱QBUIʹͳΔ
    w ը໘QBUIͷ͕ೲಘ͠΍͘͢ͳ͍ʁ
    w ࣗ෼͕ݸਓతʹओுͯ͠Δ͚ͩͰɺҰൠత͔͸Θ͔
    Βͳ͍
    63-εΩʔϜ͝ఏҊ
    rsikyu://restaurant.ikyu.com/search
    ԿͰ΋͍͍͚ͲͱΓ͋͑ͣ
    αʔϏεͷυϝΠϯೖΕͨ

    View Slide

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

    View Slide

  44. IPTUΛೖΕΔϝϦοτ
    w "OESPJEͱڞ௨Խ͢Δͷָ͕
    w "OESPJEͰ͸IPTUͱQBUIΛ۠ผͯ͠ઃఆ͢Δ
    w "OESPJEΤϯδχΞ͕ී௨ʹ63-ઃܭ͢Δͱɺύε
    Ͱը໘෼ذ͢ΔΑ͏ʹ࡞Δʢͱࢥ͏ʣ
    63-εΩʔϜ͝ఏҊ
    Android Manifest.xml


    android:scheme=“rsikyu"
    android:host="restaurant.ikyu.com"
    android:pathPrefix=“/search" />

    View Slide

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

    View Slide

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

    View Slide

  47. Universal Linksͷ

    ઃܭͱ࣮૷

    View Slide

  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/",
    "/"
    ]
    }
    ]
    }
    }
    ͙͙Ε͹ग़ͯ͘ΔͷͰख୹ʹ…

    View Slide

  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",

    View Slide

  50. FOUJUMFNFOUT
    6OJWFSTBM-JOLTઃܭͱ࣮૷

    View Slide

  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
    }

    View Slide

  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
    }
    }

    View Slide

  53. Universal Linksͷ

    Ϣʔβʔମݧ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    ࡁΈ
    Universal Links͔Β

    ΞϓϦىಈ

    View Slide

  62. Universal Links࣮૷࣌ͷ

    ͓೰ΈϙΠϯτ

    View Slide

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

    View Slide

  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?

    View Slide

  65. ".1ͱͷ݉Ͷ߹͍
    w (PPHMFͷݕࡧ݁Ռ͔Β͸·ͣ".1
    ͕։͘
    w ".1Ωϟογϡ͸(PPHMFʹϗε
    ςΟϯά͞Ε͍ͯΔ
    w 6OJWFSTBM-JOLT͕ൃಈ͠ͳ͍
    w (PPHMFˠ".1ˠΞϓϦͱ͍͏ભ
    ҠʹͳΔ
    w ͪͳΈʹ".1ͷJGSBNF಺ͷϦϯΫ͕6OJWFSTBM
    -JOLTͰ։͚Δͷ͸J04͔Β
    6OJWFSTBM-JOLT͓೰ΈϙΠϯτ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  69. ·ͱΊ

    View Slide

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

    ࠙਌ձͰօ͞Μ͕ߟ͑ͨ࠷ڧͷσΟʔϓϦϯΫΛڭ͑ͯ
    ͍ͩ͘͞
    rsikyu://restaurant.ikyu.com/search

    View Slide

  71. w J04ΤϯδχΞ
    w ϑϩϯτΤϯυΤϯδχΞ
    w αʔόʔαΠυΤϯδχΞ
    w σʔλαΠΤϯςΟετ
    Ұٳ͸ਓࡐΛืू͍ͯ͠·͢

    View Slide