Slide 1

Slide 1 text

Universal Link 2016/04/20 @TachibanaKaoru

Slide 2

Slide 2 text

ࣗݾ঺հ ौ୩ͷVOYAGE GROUPͰiOSΤϯδχ ΞΛ͍ͯ͠·͢ɻ Twitter/Vainglory : @TachibanaKaoru Blog : http://www.toyship.org/ Bouldering : 4ڃ ே࣌ؒ.jpͱ͍͏ΞϓϦΛͩͯ͠·͢ɻ

Slide 3

Slide 3 text

Universal Linkͱ͸ from iOS9 » ࣗ෼ͷΞϓϦ΍ଞͷΞϓϦΛىಈ͢ΔεΩʔϜɻ » iOS಺෦ͷʢઃఆͨ͠ʣURL Link͔ΒΞϓϦΛىಈ͢Δ͜ͱ͕Ͱ͖ Δɻ » ࠓ·ͰͷΧελϜURLεΩʔϜΛ͓͖͔͑Δػೳɻ » URL Schemeͷ৔߹ʹ͸ͦΕͧΕͷΞϓϦ͕޷͖ͳ΋ͷΛઃఆͰ͖Δ ͷͰɺΞϓϦؒͷॏෳͷةݥੑ͕͕͋ͬͨɺUniversal Linkͷ৔߹ʹ ͸ɺDomain໊ʹґଘ͢ΔͨΊɺҰҙੑ͕୲อͰ͖Δɻ

Slide 4

Slide 4 text

Universal Link from Memo

Slide 5

Slide 5 text

Universal Link from Mail

Slide 6

Slide 6 text

Universal Link ΞϓϦ͕Πϯετʔϧ͞Ε͍ͯΔ৔߹ɺ ΞϓϦͰ։͘ɻ

Slide 7

Slide 7 text

Universal Link ΞϓϦ͕Πϯετʔϧ͞Ε͍ͯͳ͍৔ ߹ɺMobile SafariͰ։͘ɻ

Slide 8

Slide 8 text

ଞͷΞϓϦ͔Βͷ Universal Link » openURLͰىಈͨ͠৔߹ʹ͸ɺUniversal Link͕༗ޮʹͳΓ·͢ɻ » ͨͩ͠ɺurlΛ։͘ࡍʹSFSafariViewControllerɺWKWebViewɺ UIWebViewΛ࢖͏ͱUniversal Link͸ແޮʹͳΓ·͢ɻ » ҙࣝͷߴ͍ΞϓϦ͸ͩΊɻ

Slide 9

Slide 9 text

ࣗ෼ͷΞϓϦ͔Βͷ Universal Link ࣗ෼ͷΞϓϦ͔Β͸openURLΛͯ͠΋Universal Link͕༗ޮʹͳΓ· ͤΜɻʢMobile SafariͰ։͘ʣ

Slide 10

Slide 10 text

Mobile Safari͔Β » Mobile SafariͷΞυϨεόʔʹ௚઀URLΛೖྗͨ͠৔߹΍ɺMobile Safari಺ͷϦϯΫ͔ΒҠಈͨ͠৔߹ʹ͸Universal Link͸͖͖·ͤ Μɻ » GoogleͳͲͷݕࡧ݁Ռ͔Β͸Universal Link͕༗ޮʹͳΓ·͢ɻ

Slide 11

Slide 11 text

Ϣʔβʔͷબ୒Λอଘ » ΞϓϦͰ։͔͘ɺMobile SafariͰ։͔͘બ୒Ͱ͖Δػೳ͕͋Δɻ

Slide 12

Slide 12 text

Ϣʔβʔͷબ୒Λอଘ Mobile SafariͰUniversal LinkରԠͷ ϦϯΫΛݕࡧ݁Ռʹදࣔͯ͠ΈΔɻ

Slide 13

Slide 13 text

Ϣʔβʔͷબ୒Λอଘ Ұ୴͸Universal Linkͱͯ͠ΞϓϦͰ ։͔ΕΔ͕ɺӈ্ʹSafari΁ͷϦϯΫΛ දࣔ͢Δɻ

Slide 14

Slide 14 text

Ϣʔβʔͷબ୒Λอଘ Safari΁ͷϦϯΫΛબ୒͢ΔͱSafariͰ ։͖ɺҎޙ͸SafariͰ։͘Α͏ʹͳΔɻ

Slide 15

Slide 15 text

Smart App Bannerͱͷҧ͍ » Universal Link͸ɺSmart App Bannerͱ͸໨త͕ҟͳΔͨΊɺ྆ ํ࣮૷͢Δඞཁ͕͋Γ·͢ɻ » Smart App BannerͰ͸ɺΞϓϦ͕Πϯετʔϧ͞Ε͍ͯͨΒΞϓϦ ͕ىಈ͞ΕɺΞϓϦ͕Πϯετʔϧ͞Ε͍ͯͳ͔ͬͨΒApp Store͕ ىಈ͢Δɻ

Slide 16

Slide 16 text

Smart App BannerͱUniversal LinkͷӅΕ ͨؔ܎ » Smart App Bannerͷcontentͷapp-argumentࢦఆ͕Universal LinkʹରԠ͍ͯ͠Δ͔Ͳ͏͔ͰUI͕มΘΔɻʢԼهͷϦϯΫΛ Mobile SafariͰνΣοΫͯ͠Έ͍ͯͩ͘͞ʣ » https://asajikan.jp/ (Universal LinkରԠ) » https://asajikan.jp/topics/ (Universal LinkඇରԠ)

Slide 17

Slide 17 text

Smart App Banner Universal LinkରԠͷ৔߹ɺΞϓϦͰ Universal Linkͱͯ͠։͘ɻʢBanner খ͞Ίʣ

Slide 18

Slide 18 text

Smart App Banner Universal LinkରԠͷ৔߹ɺΞϓϦͷ τοϓΛ։͘ɻʢBannerେ͖Ίʣ

Slide 19

Slide 19 text

࣮૷ํ๏ » Server » Client

Slide 20

Slide 20 text

࣮૷ํ๏ (Server) » server root(/)ʹ apple-app-site-association ͱ͍͏໊শͰjson ϑΥʔϚοτͷઃఆϑΝΠϧΛஔ͘ɻ » ʢ͜ͷϑΝΠϧʹॺ໊Λ͔͚Δඞཁ͕͋Δͱ͍͏৘ใ͕͚͋ͬͨ Ͳɺ͔͚Δඞཁ͸͋Γ·ͤΜɻʣ » iOS9.3.1Ҏ্Ͱ͸ɺapple-app-site-associationͷϑΝΠϧαΠζ ͸128KBʹ੍ݶ͞Εͯ·͢ɻ(9.3Ͱൃੜ͍ͯͨ͠ΫϥογϡͷݪҼ ͩͬͨΒ͍͠)

Slide 21

Slide 21 text

apple-app-site-association format » Bundle IdentifierͱUniversal LinkʹରԠ͍ͤͨ͞pathΛهड़ɻ { "applinks": { "apps": [], "details": [ { "appID": "9JA89QQLNQ.com.apple.wwdc", "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"] }, { "appID": "ABCD1234.com.apple.wwdc", "paths": [ "*" ] } ] } }

Slide 22

Slide 22 text

࣮૷ํ๏ (Server) » ઃఆϑΝΠϧͷஔ͖৔ॴ͸ɺ9.3͔Β /.well-known/ ΋αϙʔτ͢Δ Α͏ʹͳΓ·ͨ͠ɻ » Technical Q&A QA1919 » Incoming requests for /.well-known/apple-app-site- association file https://developer.apple.com/library/ios/qa/qa1919/ index.html#//appleref/doc/uid/DTS40016874

Slide 23

Slide 23 text

apple-app-site-association format asajikan.jpͷݱࡏͷઃఆ { "applinks": { "apps": [], "details": [ { "appID": "94VJUJ8B7P.jp.asajikan.www", "paths": [ "/", "/article/*", "/recipe/*" ] } ] } }

Slide 24

Slide 24 text

apple-app-site-association format » ࣮͸ɺࠓͷϑΥʔϚοτҎલʹ࢖ΘΕ͍ͯͨݹ͍ϑΥʔϚοτ΋͋Γ ·͢ɻʢͦͷ͏ͪແޮʹͳΔͱࢥ͏ͷͰ࢖Θͳ͍΄͏͕Α͍ʣ { "applinks": { "apps": [], "details": { "94VJUJ8B7P.jp.asajikan.www": { "paths": [ "/", "/article/*", "/recipe/*" ] } } } }

Slide 25

Slide 25 text

apple-app-site-association format » ?͕Ұจࣈɺ*͕ෳ਺จࣈ » NOTΛ࢖ͬͯର৅֎pathͷઃఆ΋Ͱ͖Δ͕ɺݹ͍iOSͰ͸ඇରԠ ʢ9.2.1Ͱ͸OKɺ9.1Ͱ͸NGʣ » "paths": [ "/wwdc/news/", "NOT /videos/wwdc/2010/", "/ videos/wwdc/201?/"] » ͜͏͢Δͱɺwwdc/201*/ҎԼͷϑΝΠϧ͸wwdc/2010Λͷ͍ͧ ͯUniversal LinkରԠͱͳΔɻ

Slide 26

Slide 26 text

App Search API Validation Tool » formatͷvalidation checkΛ͢Δ͜ͱ͕Ͱ͖·͢ɻ » https://search.developer.apple.com/appsearch-validation- tool

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

࣮૷ํ๏ (Client) » ProjectͷCapabilityʹAssociated DomainsΛઃఆ » ྫʣDomains: applinks:asajikan.jp

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

࣮૷ํ๏ (Client) » ىಈ͞Εͨ࣌ͷϋϯυϦϯάॲཧ » UIApplicationDelegate » application:continueUserActivity:restorationHandler: » ʢCore Search΍HandoffʹΑΔىಈϋϯυϦϯά͢Δʣ

Slide 31

Slide 31 text

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool{ if userActivity.activityType == "com.apple.corespotlightitem" { // Core SearchͷॲཧΛهड़ } else if userActivity.activityType == NSUserActivityTypeBrowsingWeb { let url : NSURL? = userActivity.webpageURL // Universal LinkͷॲཧΛهड़ } return true }

Slide 32

Slide 32 text

·ͱΊ » Web Site࿈ܞΞϓϦ͸Universal Linkಋೖ͢΂͖ » Smart App Banner΋࿈ܞͤ͞Δͱϕλʔ » Universal LinkରԠpath͸ࡉ͔͘ઃఆͰ͖Δ͕ɺiOSͷόʔδϣϯ ʹΑͬͯಈ࡞͕ҟͳΔ͜ͱʹ஫ҙ