iOS9后支持微信打开App(Support Universal Links)

Support Universal Links

这是介绍,写的很好,我也没必要再写一遍.

iOS Universal Links(通用链接)
简介
什么是Universal Links(通用链接)?这是iOS9推出的一项功能,如果你的应用支持Universal Links(通用链接),那么就能够方便的通过传统的HTTP链接来启动APP(如果iOS设备上已经安装了你的app,不需要额外做任何判断等), 或者打开网页(iOS设备上没有安装你的app).或许可以更简单点来说明,在iOS9之前,对于从各种从浏览器,Safari、UIWebView或者 WKWebView中唤醒APP的需求,我们通常只能使用scheme.首先是app中注册某个scheme,例如
在网页中,
打开APP打开拨号打开系统的短信app

但是这种方式有个不好的地方,就是需要提前判断系统中是否安装了能够响应此scheme的app,这个判断,网上很多,例如从浏览器或者Webview 中唤醒APP,如文章所描述的那样,很多网页中的判断是有问题的,经常会出现空白页,跳转不了等.更加悲催的是这种通过scheme方式来打开其它的app的方式,在微信中是被禁用了的.这意味着从微信的app中,是没法打开我们的app的.
Universal Links(通用链接):一条普通的http链接,例如https://yohunl.com/openApp,当你支持通用链接的时候,系统中安装了你的app,那么用户点击链接,就直接进入到你的app中了,无论你是在微信中还是在其它哪里!!! 当你没有安装的时候,你可以去到你指定的页面(你可以直接展示你原来的H5页面,也可以跳转到下载页等).也就是说,用户无需知道你是否安装了app,如果安装了,这条链接就可以进app(进入你app了,你就可以以本地原生页面去展示信息给用户了),没有安装,就直接进原来的h5页面,对用户来说,是一个无缝的过程,非常顺畅!
官方的说明文档

Universal Links(通用链接)的优点
唯一性: 不像自定义的scheme,因为它使用标准的http/https链接到你的web站点,所以它不会被其它的app所声明.另外,Custom URL scheme 因为是自定义的协议,所以在没有安装 app 的情况下是无法直接打开的,而 universal links 本身是一个 HTTP/HTTPS 链接,所以有更好的兼容性 安全:当用户的手机上安装了你的app,那么iOS将去你的网站上去下载你上传上去的说明文件(这个说明文件声明了你的app可以打开哪些类型的http链接).因为只有你自己才能上传文件到你网站的根目录,所以你的网站和你的app之间的关联是安全的. 可变:当用户手机上没有安装你的app的时候,Universal Links也能够工作.如果你愿意,在没有安装你的app的时候,用户点击链接,会在safari中展示你网站的内容. 简单:一个URL链接,可以同时作用于网站和app 私有 其它app可以在不需要知道你的app是否安装了的情况下和你的app相互通信.怎么支持Universal Links(通用链接)
先决条件:
你必须有一个域名,且这个域名的网站需要支持https,然后拥有网站的上传到根目录的权限(这个权限是为了上传一个apple指定的文件)
支持Universal Links(通用链接)
创建一个json格式的命名为apple-app-site-association文件,注意这个文件必须没有后缀名,文件名必须为apple-app-site-association!!!{ "applinks": { "apps": [], "details": [ { "appID": "9JA89QQLNQ.com.apple.wwdc", "paths": [ "/wwdc/news/", "/videos/wwdc/2015/"] }, { "appID": "ABCD1234.com.apple.wwdc", "paths": [ "" ] } ] }}

说明:appID: 这里的组成方式是 teamId.yourapp’s bundle identifier.如上面的 9JA89QQLNQ,ABCD1234都是teamId,这个值从哪来的呢?它是从的开发者账户的个人中心来的,登陆你的开发者中心![](https://www.evernote.com/shard/s488/nl/93731301/a10a6777-88b2-4655-ad51-a9687a408e54//res/f2adae7c-2893-4da6-8b0c-e3e23147b791.png?resizeSmall&width=832)

com.apple.wwdc是你的方式是 teamId.yourapp’s ,在你的xcode工程中![](https://www.evernote.com/shard/s488/nl/93731301/a10a6777-88b2-4655-ad51-a9687a408e54//res/62f6d4b4-9832-4e2e-b712-178aac500b02.png?resizeSmall&width=832)

paths:根据 paths 键设定一个你的app支持的路径列表,只有这些指定的路径的链接,才能被app所处理,举个例子:如果你的网站是www.yohunl.com
,你的path写的是”/support/”,那么当用户点击www.yohunl.com/support/myDoucument
,就可以进入你的app了,相反www.yohunl.com/other 就不会.
path是大小写敏感的!**号表示任意路径.
上传该文件apple-app-site-association到你的域名所对应的网站的根目录下(其实也不一定是根目录,例如ghost博客站点,就没有根目录一说,它就需要放在相应的主题目录下),这一步是为了苹果能从https://你的域名/apple-app-site-associationx
h获取到你上传的apple-app-site-association文件.上传完后,自己先访问一下,看看是否能够获取到,用我的做例子,https://yohunl.com/apple-app-site-association ,当你点击这个链接,应该是下载apple-app-site-association文件.验证该文件是否合法,苹果为了方便开发者,提供了一个网页来验证我们编写的这个apple-app-site-association是否合法有效,验证网址,进入网站进行验证![](https://www.evernote.com/shard/s488/nl/93731301/a10a6777-88b2-4655-ad51-a9687a408e54//res/08f2eb57-f647-45a5-bbfe-fdeabb51edd9.png?resizeSmall&width=832)

在xcode工程里进行一些配置首先就是打开工程配置中的Associated Domains打开![](https://www.evernote.com/shard/s488/nl/93731301/a10a6777-88b2-4655-ad51-a9687a408e54//res/729b1506-c2e0-4d4e-969d-e0fdb1097017.jpg?resizeSmall&width=832)

在其中的Domains中填入你想支持的域名(这里不是随便填的,是可以支持你需要的Universal Links的域名), 必须以 applinks: 为前缀例如我的填入的是
applinks:yohunl.comapplinks:www.yohunl.com

苹果将会在合适的时候,从这里填入的域名请求文件apple-app-site-association
注意:当你打开Associated Domains后,xcode会在你的工程中添加.entitlements文件![](https://www.evernote.com/shard/s488/nl/93731301/a10a6777-88b2-4655-ad51-a9687a408e54//res/76d3943a-5668-4afe-a329-2f37bf8b1fb0.jpg?resizeSmall&width=832)

并且如果你登陆你的开发者中心,可以看到![](https://www.evernote.com/shard/s488/nl/93731301/a10a6777-88b2-4655-ad51-a9687a408e54//res/3de577ad-e35a-4c6c-949d-15ee4a0abb31.jpg?resizeSmall&width=832)

,这些都是有助于你排除问题的.

到此,你的app就已经可以支持Universal Links(通用链接)了!!!那么怎么测试呢?
测试Universal Links(通用链接)是否生效
在iOS设备中的备忘录中添加记事本或短信中输入App能识别的链接,然后直接点击此链接,就会直接跳转到你的app了或是长按,在出现的弹出菜单中第二项是“在’XXX’中打开”,这也代表着成功。![](https://www.evernote.com/shard/s488/nl/93731301/a10a6777-88b2-4655-ad51-a9687a408e54//res/3f7ad877-bc6a-4b09-aa56-9e948bee2335.png?resizeSmall&width=832)

或是你将要测试的网址放到safari中一个网页中,然后点击链接,在出现的网页上方,下滑,可以看到有 在”XX”应用中打开 (很多教程上说,在safari中直接点击,就会跳转到app,但是经过我实际验证,是不可以的,可能是苹果又调整了一下策略吧)![](https://www.evernote.com/shard/s488/nl/93731301/a10a6777-88b2-4655-ad51-a9687a408e54//res/ce7eeb22-4505-4eb0-8b1e-e9dfa641268c.png?resizeSmall&width=832)

在微信的网页浏览器中,也是可以的,虽然微信屏蔽了所有的custom scheme方式的跳转到其它app,但是Universal Links(通用链接)因为是普通的http链接,由系统直接处理的,微信屏蔽不了,这也就实现了从微信跳转到我们的app!!
工程中添加处理方法
现在用户点击某个链接,直接可以进我们的app了,但是,这不是我们的最终目的,我们的目的是要能够获取到用户进来的链接,根据链接来处理,需要展示给用户的信息
在工程里的 AppDelegate 里实现 方法

  • (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler{ if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { NSURL *webpageURL = userActivity.webpageURL; NSString *host = webpageURL.host; if ([host isEqualToString:@"yohunl.com"]) { //进行我们需要的处理 } else { [[UIApplication sharedApplication]openURL:webpageURL]; } } return YES;}

当 userActivity 是 NSUserActivityTypeBrowsingWeb 类型, 则意味着它是由Universal Links进来的,就可以添加我们自己的处理逻辑了!
后记
如果遇到不能起作用,http://stackoverflow.com/questions/32751225/ios9-universal-links-does-not-work上有讨论各种可能出现的问题 ,你可以去参考下
参考
iOS 9学习系列:打通 iOS 9 的通用链接(Universal Links) 苹果官方Universal Links iOS9 Universal Links 国外人列举的当前支持Universal Links的app和其apple-app-site-association文件 51个应用的文件列表 查看是否支持 Universal Links的苹果网站 网址

2.实现步骤

因为自己的服务器暂时不支持SSL认证,所以我用七牛配置了一个https域名地址进行访问.

经过测试都是OK的

3.参考链接

https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/Handoff/AdoptingHandoff/AdoptingHandoff.html

http://stackoverflow.com/questions/32751225/ios9-universal-links-does-not-work

https://www.evernote.com/shard/s488/nl/93731301/a10a6777-88b2-4655-ad51-a9687a408e54/?csrfBusterToken=U%3D59639e5%3AP%3D%2F%3AE%3D1571c31add6%3AS%3D1689b65e32bcb5546d80d7b03a34877c

http://stackoverflow.com/questions/32843198/sign-apple-app-site-association

http://www.cocoachina.com/ios/20150902/13321.html

七牛支持Https:
https://segmentfault.com/q/1010000000526163

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容