Slide 1

Slide 1 text

Universal LinksରԠΛͨ͠࿩ iOS 10࣌୅ͷDeep Linkٕज़ 2017/5/24 potatotips #40 @ Rettyגࣜձࣾ iOS/Android։ൃTipsڞ༗ձ ߦ໦ ઍय़

Slide 2

Slide 2 text

ࣗݾ঺հ ߦ໦ ઍय़ʢͳΊ͖ ͪ͸Δʣ
 ੲ macOS޲͚ΞϓϦɾϛυϧ΢ΣΞ։ൃऀ → ࠓ iOSΞϓϦ։ൃऀ גࣜձࣾαΠόʔΤʔδΣϯτ
 AmebaΞϓϦ୲౰
 Ξϝϒϩͷ౤ߘɾӾཡΞϓϦͰ͢ʂ גࣜձࣾ nana music
 ԻָίϥϘϨʔγϣϯΞϓϦ nana
 Ի੠Τϯδϯ੡࡞ऀ Ի੠ॲཧٕज़͕޷͖Ͱ͢

Slide 3

Slide 3 text

Ϟνϕʔγϣϯ • Universal Links͸iOS 9Ҏ߱ͷػೳ • iOS 10͕ීٴͨ͠ࠓɺαʔϏεʹಋೖ͠΍͘͢ͳͬͨ • ࣮ࡍʹରԠͯ͠ಘΒΕͨ஌ݟʢൃද౰࣌ͷ৘ใ͔ΒͷΞοϓσʔ τͳͲʣΛ·ͱΊΔ

Slide 4

Slide 4 text

͓͞Β͍
 ~ Ϣʔβࢹ఺ͰݟͨUniversal Links ~ HTTP·ͨ͸HTTPSͷϦϯΫΛλοϓͨ࣌͠ʹ
 υϝΠϯʹରԠ͢ΔΞϓϦ͕ىಈ͢Δ

Slide 5

Slide 5 text

Universal Linksܦ༝ͰΞϓϦ͕։͍ͨ࣌ͷεςʔλεόʔ SafariͰදࣔ
 ʢࠓޙ΋SafariͰ։͘Α͏ʹͳΔʣ ભҠݩΞϓϦʹ໭Δ

Slide 6

Slide 6 text

SafariͰදࣔ࣌ʹԼʹҾͬுΔͱ
 ΞϓϦͰ։ͨ͘Ίͷόʔ͕ग़ݱ ʮ։͘ʯΛબͿͱ࠶ͼΞϓϦͰ։͘Α͏ʹͳΔ ͜ͷखॱʹΑΓɺΞϓϦͰ։͔͘SafariͰ։͔͘͸Ϣʔβ͕બ୒Մೳ ʢਖ਼௚Θ͔Γʹ͍͘ʣ

Slide 7

Slide 7 text

ΞϓϦ͕ىಈ͢Δ৚݅ • Ϣʔβ͕SafariͰ։͘͜ͱΛબ୒͍ͯ͠ͳ͍ • iOS 9Ҏ߱ • ΞϓϦ͕Πϯετʔϧ͞Ε͍ͯΔ
 ະΠϯετʔϧͷ৔߹ɺૢ࡞தͷΞϓϦͰͦͷ··ભҠ
 ετΞཱ͕͕ͪ͋ͬͨΓ͸͠ͳ͍ • ಉҰυϝΠϯ಺ͷભҠͰ͸ͳ͍
 ݫີʹ͸εΩʔϚ͕ҟͳΔ৔߹͸ىಈͨ͠
 e.g.) http://hoge.com/ ͔Β https://hoge.com/ ΁ͷભҠ

Slide 8

Slide 8 text

• Entitlement ͷ Associated Domainsʹapplinks:Λ͚ͭͯυϝΠϯΛهࡌ
 e.g. applinks:example.com • Universal Linksܦ༝ͰΞϓϦ͕։͔Εͨ࣌ʹݺ͹ΕΔϝιουΛ࣮૷
 
 • ѻ͑ͳ͍URL͸open(_:options:completionHandler:)Ͱ։͖௚͢
 ΞϓϦཱ͕͕ͪ͋ͬͨޙɺ͞ΒʹผΞϓϦ͕ىಈ͢ΔͷͰUX্͍·͍ͪɻ
 ͳΔ΂͘ൃੜ͠ͳ͍Α͏ʹ͍ͨ͠ɻ ͓͞Β͍
 ~ ΞϓϦଆͷରԠ ~ func application(application: UIApplication,
 continueUserActivity userActivity: NSUserActivity,
 restorationHandler: ([AnyObject]?) -> Void) -> Bool {}

Slide 9

Slide 9 text

• AASA (apple-app-site-association) ϑΝΠϧΛ഑ஔ • ϧʔτ·ͨ͸ .well-known αϒσΟϨΫτϦ഑Լʹஔ͘ • HTTPSͰ௚઀ΞΫηεͰ͖ΔΑ͏ʹ͢Δ
 HTTPͰ͸μϝ, ϦμΠϨΫτ΋NG • ΞϓϦͷΠϯετʔϧɺ·ͨ͸Ξοϓσʔτ࣌ʹOSʹऔಘ͞ΕΔ
 αʔόΤϥʔʢ500ܥʣͷ৔߹ɺ3࣌ؒޙʹ࠶औಘ ͓͞Β͍
 ~ αʔόଆͷରԠ ~ https://developer.apple.com/reference/security/shared_web_credentials API Reference: Shared Web Credentials ΑΓ

Slide 10

Slide 10 text

AASA (apple-app-site-association) ϑΝΠϧ { "applinks": { "apps": [], "details": [ { "appID": "XXXXXXXXXX.jp.co.hoge.AppName", "paths": [ "NOT /_*", "*" ] }, { "appID": "YYYYYYYYYY.jp.co.choge.AppName-ota", "paths": [ "NOT /_*", "*" ] } ] } } AppIDͷPrefixΛࢦఆ
 ੲͳ͕ΒͷΞϓϦͰ͸
 νʔϜIDͱҟͳΔͷͰ஫ҙ ←

Slide 11

Slide 11 text

AASAϑΝΠϧͷهड़ํ๏ • details΋path΋ઌ಄͔ΒධՁ͞ΕΔ • Ϛονͨ͠Βͦ͜ͰධՁΛऴྃ • ෳ਺ͷΞϓϦ͕هड़ & Πϯετʔϧ͞Ε͍ͯͨΒɺઌʹॻ͔Εͯ ͍Δํ্ཱ͕͕ͪΔ • PathͷϚονϯάϧʔϧ • ΫΤϦ΍ϑϥάϝϯτ͸ର৅ʹͳΒͳ͍ • ? … ೚ҙͷ1จࣈ (/΋OK) • * … ೚ҙͷจࣈྻʢ0จࣈͰ΋/͕͍ࠞͬͯͯ͟΋ྑ͍ʣ • NOT ͸iOS 9.2Ҏ߱ • ࠷ޙͷεϥογϡͷ༗ແ͸Ϛονϯάʹد༩͠ͳ͔ͬͨ ղऍ͸OSόʔδϣϯʹґଘ͢ΔͷͰ஫ҙͯ͠ςετ͢Δ

Slide 12

Slide 12 text

func open(_ url: URL, options: [String : Any] = [:], completionHandler completion: ((Bool) -> Void)? = nil) ΞϓϦ಺͔ΒURLΛUniversal Linksͱͯ͠։͘ʹ͸
 UIApplication ͷ open() ϝιουΛ࢖͏ • ֎෦ΞϓϦͰ։͚͔ͨͲ͏͔ͷ݁Ռ͕औಘͰ͖Δ • ࣗ෼ࣗ਎ͷରԠυϝΠϯͷURLΛ౉͢ͱSafari͕ىಈ͢Δ iOS 10Ҏ߱ iOS 9Ҏલͷ open(_ : URL) -> Bool ͱൺֱ͢Δͱ • ։͚ΔURLͷλΠϓΛUniversal LinksͷΈʹݶఆՄ • ඇಉظʹͳͬͨ

Slide 13

Slide 13 text

open()ϝιουΛݺͿͱ
 ֎෦ΞϓϦͰ։͘લʹ
 ֬ೝμΠΞϩάΛग़ͯ͘͠ΕΔΑ͏ʹͳͬͨ

Slide 14

Slide 14 text

ʮΞϓϦͰ։͘ʯόʔ • SafariͷUI • දࣔ͸ΧελϚΠζෆՄ • දࣔ͞ΕΔ৚݅ • ରԠΞϓϦΛΠϯετʔϧࡁΈ • ରԠυϝΠϯΛSafariͰ։͘ઃఆʹ͍ͯ͠Δ • HTMLʹ͸Smart App BannerͳͲͷهड़͸ඞཁͳ͍

Slide 15

Slide 15 text

ਪଌɿiOS͕࣮ࡍʹԿΛ͍ͯ͠Δ͔ • iOS୺຤্ʹυϝΠϯ - ΞϓϦͷϚοϐϯά৘ใ͕ଘࡏ • ΞϓϦͷΠϯετʔϧ/Ξοϓσʔτ࣌ʹϚοϐϯά৘ใΛߋ৽ • URLΛ։͘ࡍɺURLͷυϝΠϯʹରԠΞϓϦ͕ଘࡏͨ͠ΒΞϓϦͰ ։͘ ΄΅୺຤্ͷॲཧͰ੒Γཱ͍ͬͯΔػೳ

Slide 16

Slide 16 text

iOS 9ͱiOS 10Ͱͷڍಈͷҧ͍ iOS 9 ࠷ॳͷϦΫΤετ͕Universal Linksͷͱ͖ͷΈΞϓϦ͕ىಈ͢Δ
 
 iOS 10 ϦμΠϨΫτઌ͕Universal Linksͷ৔߹΋ΞϓϦ͕ىಈ͢Δ
 
 ࠷ॳͷϦΫΤετͱϦμΠϨΫτઌ͕ͲͪΒ΋Universal Linksͩͬͨ৔߹ɺ application(application:continueUserActivity:restorationHandler:) ͕2ճݺͼग़͞ΕΔ ϦμΠϨΫτ࣌ͷڍಈ͕ҟͳ͍ͬͯͨ

Slide 17

Slide 17 text

ςετํ๏ʢӡ༻લʣ • STGͰٕज़ݕূ • ຊ൪ʹAASAϑΝΠϧΛ഑ஔͯ͠ςετ
 STGͷURL͸GoogleͳͲʹΠϯσοΫε͞Ε͍ͯͳ͍ͨΊ
 Ϣʔβମݧ͕Ͳ͏มΘΔ͔ͷݕূʹ͸ຊ൪Λ࢖͏ඞཁ͕͋Δ • AASAϑΝΠϧʹ͸υϝΠϯґଘͷ৘ใ͕ͳ͍ͨΊɺSTGͱຊ൪Ͱ ಉ͡ϑΝΠϧΛར༻Մೳ • ΞϓϦͷ Associated Domains Λ؀ڥʹΑͬͯॻ͖׵͑Δ

Slide 18

Slide 18 text

ςετํ๏ʢӡ༻ޙʣ ϢʔβମݧͷݕূͷͨΊʹຊ൪ͷAASAϑΝΠϧΛߋ৽ʁʂ
 … ͢ΔΘ͚ʹ͸͍͔ͳ͍ ϓϩΩγΛར༻͢ΔͳͲͯ͠ϧʔςΟϯάΛ޻෉ host
 ॻ͖׵͑ proxy ຊ൪ IP: xxxxxxx
 ࣾ಺͔ΒͷΈݟ͑Δ
 ຊ൪؀ڥ

Slide 19

Slide 19 text

ӡ༻্ͷ՝୊ • ػೳΛ੾Γ໭ͨ͠ΓɺڍಈΛมߋ͢Δʹ͸
 ΞϓϦͷΞοϓσʔτ͕ඞཁ
 
 AASAϑΝΠϧΛߋ৽ͯ͠΋ɺΞϓϦͷΞοϓσʔτͷλΠϛϯάͰ͔͠औಘ͠ʹདྷ ͯ͘Εͳ͍ • ΞϓϦόʔδϣϯͱAASAϑΝΠϧͷ੔߹ੑͷอͪํ • ϦϑΝϥͳͲྲྀೖݩͷ৘ใ͕औಘͰ͖ͳ͍ͨΊɺSEOͷ؍఺ͰࠔΔ

Slide 20

Slide 20 text

Ϣʔβͷ൓Ԡ • ͍͖ͳΓΞϓϦ͕։͘Α͏ʹͳͬͯ͏͍͟ • ݩʹ໭͍ͨ͠ͱ͍͏໰͍߹Θ͕ͤདྷͨ
 ˠ ૢ࡞ํ๏ΛҊ಺ Ή΍ΈʹΞϓϦ͕։͘ͷ͸ετϨε
 
 αʔϏεͷՁ஋Λຊ౰ʹߴΊΒΕ
 Ϣʔβʹ΋ೲಘײͷ͋Δ৔ॴͰ࢖Θͳ͍ͱ͍͚ͳ͍

Slide 21

Slide 21 text

Appendix: Custom URL Scheme is dead? • URL͕։͚Δ͔Ͳ͏͔Λ֬ೝ͢Δ canOpenURL() ͸iOS 9Ҏ߱ info.plistʹεΩʔϚͷهࡌ͕ඞཁʹͳͬͨ • iOS 8Ҏલ͸୅ΘΓʹ canOpenURL() ͷݺͼग़͠ճ਺͕50ճʹ੍ݶ͞Ε͍ͯͨ • ࣮ࡍʹΞϓϦΛ։͘ open() ϝιουʹ͸੍ݶ͕ͳ͍ • open()ϝιου͕֎෦ΞϓϦͰ։͘લʹ֬ೝμΠΞϩάΛग़ͯ͘͠ ΕΔΑ͏ʹͳͬͨ े෼ར༻Մೳ

Slide 22

Slide 22 text

ΧελϜεΩʔϚ࠷େͷ໰୊఺ ΞϓϦ͕Πϯετʔϧ͞Ε͍ͯͳ͍ͱ
 SafariͰʮϖʔδΛͻΒ͚·ͤΜʯΤϥʔ͕දࣔ͞ΕΔ ެ։͞Ε͍ͯΔWeb໘ʹ࢖͏ͷ͸ݫ͍͠
 
 ΞϓϦؒભҠͰར༻͢Δ෼ʹ͸
 open()ϝιουͰΤϥʔϋϯυϦϯάͰ͖ΔͷͰྑͦ͞͏

Slide 23

Slide 23 text

ॴײ ศརͦ͏੍͕ͩݶ͕ଟ͘ɺ࢖͍ॴ͕೉͍͠

Slide 24

Slide 24 text

͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠

Slide 25

Slide 25 text

WWDC 2017ʹࢀՃ͠·͢ Ͱ͖ͨͯͷApple ParkʹߦͬͯΈ͍ͨ

Slide 26

Slide 26 text

ࠂ஌ɿCyberAgentͰલޙʹΠϕϯτΛ։࠵͠·͢ WWDC௚લ Pre-WWDC Gathering
 https://cyberagent.connpass.com/event/55235/
 5/30 19:30~
 ौ୩ϓϥΠϜϓϥβ4F Creative Lounge WWDCޙ CA.swift #3 WWDC 2017 Reporting
 6/19 ϙςν #41ʹ֎Εͯ͠·ͬͨΒੋඇ