iOS Universal Links(通用链接)的使用

一、 通用链接介绍

Apple 推出通用链接:一种能够方便的通过传统 HTTP 链接来启动 APP, 使用相同的网址打开网站和 APP。

当你的应用支持通用链接,iOS9 之后 , 用户可以点击一个链接跳转到你的网站,并获得无缝重定向到您安装的应用程序,而无需通过 Safari 浏览器。如果你的应用不支持的话,点击链接将会用 Safari 来打开。

二、 通用链接的关键实现条件

有一个注册的域名

域名可通过 SSL 访问(应该是需要有效的证书)

支持上传一个 JSON 文件到域名

iOS 9  以上版本

Xcode 7 以上

需要真机测试,模拟器不支持通用链接

web server 需要支持 https,客户端需要通告 https 访问,并且不支持任何重定向

说了这么多是时候来点干货了;

三、 通用链接实现步骤

1.在项目中开启Associated Domains 域

  进入自己的项目的Targets->Capabilites->Associated Domains,设置成ON状态,这时候你会发现你的项目的文件夹下会多出一个.entitlements的文件

注意:我这里是使用了Xcode的自动管理证书,所以当我打开Associated Domains时Xcode会自动帮我处理证书配置问题以及appIDs打开Associated Domains。

如果你是使用手动管理证书,需在处理第1步之前先去自己的开发者账号找到对应的appIDs,勾选Associated Domains选项。具体操作步骤:

进入苹果Apple Developer -> Member Center -> Certificates, Identifiers & Profiles – >Identifiers - >App IDs–>Edit 然后开启打钩 Associated Domains 后保存。

如果证书设置正确以及App IDs的Associated Domains打开后,你再执行第1步操作之后Associated Domains下面的steps有2个对号,否则就会出现错号。

2.在Associated Domains下添加web端的域名

点击Associated Domains的+号填入applinks:后面是你的域名,例如我公司的是
applinks:×××××.mingpao.com

3 制作apple-app-site-association 文件

创建一个json格式的命名为apple-app-site-association文件,注意这个文件必须没有后缀名,文件名必须为apple-app-site-association!!!

{

"applinks":{

"apps":[],

"details":[

{

"appID": "G4E6298X77.com.mingpao.×××××",

"paths":[ "/*" ]

},

]

}

}

这里解释一下:

appID 是由你的Team ID+BundleID组成,如果你不知道你的Team ID是什么?进入苹果Apple Developer -> Member Center ->Membership->Team ID


paths 是一个字符串的数组,这里是你的应用支持的通用链接与不支持的链接,这里小编使用的是/*,代表着只要是Associated Domains域名下的所有的链接都支持。如果你不支持某一个链接,在这个链接前面加NOT空格,举个例子

"paths":[  "NOT /home/*",  "/*"  ]

如果这样写就是除了不支持/home下所有的链接,其他链接都支持。

这里有很多公司的apple-app-site-association文件设置 


4.上传apple-app-site-association 文件

把你刚才制作好的apple-app-site-association文件交给服务器端的小伙伴,放到服务器的根目录下,还有一种说法是,iOS9.3之前是根目录下即:https://××××.mingpao.com/apple-app-site-association,iOS9.3之后是.well-known目录下即:https://××××.mingpao.com/.well-known/apple-app-site-association,小编为了安全起见两个都放了。

到此为止,Universal Links的工作已经基本完成了,下面我们可以检测一下上传apple-app-site-association 文件是否成功。苹果有一个检测的接口 苹果测试入口 ,将你的域名放入测试口,点击TestURL即可。

但是但是但是,小编把公司的域名放到苹果进行测试得到的答案是没有通过,但是却能正常的使用Universal Links了,关于原因,网上有很多说法。有些小伙伴说是因为你的APP没有上线,等上线了就会测试通过,但是小编的APP上线后测试依然不能通过。还有一些小伙伴说我们并没有对苹果开放爬虫。也就是不允许苹果爬虫你们的网站,这个是测不通的。

我们创建apple-app-site-association文件的目的是为了让iOS系统能获取这个文件,知道你的哪些是链接是Universal Links,哪些不是Universal Links。所以在你第一次安装APP时,iOS系统会去对应的路径下拿取apple-app-site-association文件,所以我们可以通过抓包来判断通不通。另外直接用Xcode debug调试APP时,iOS也会去拿取apple-app-site-association文件。

如果不通问题可能有很多:

1.域名不是https请求

2.服务器端的SSL证书有问题(伪证书或者无效证书)

3.服务器端的证书配置有问题

小编曾经在这里卡了2天就是找不到原因,结果是服务器端的证书配置有问题。

为了避免移动端的小伙伴被坑,我把服务器端SSL证书配置向导的网址给大家。https://sg.godaddy.com/zh/help/ssl-16623 

5.在AppDelegate处理Universal Links

在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:@"××××.mingpao.com"]) {

//判断域名是自己的网站,进行我们需要的处理

}else{

[[UIApplication sharedApplication]openURL:webpageURL];

}

}

return YES;

}

当用Universal Links启动APP时就会调用上面的方法。

把我们设置好通用链接的URL放到备忘录中,长按URL会多出一条在“××××”中打开,当你点击时就会打开你的APP,并且在上面的方法中将URL传给你处理。


如果你选择在Safari中打开,上下滑动页面,你会发现仍然有一个按钮可以打开你的应用。


参考资料

苹果官方文档

http://pinwei.blog.51cto.com/5452359/1734167/

http://www.2cto.com/kf/201604/497162.html 

文笔不好,望大家见谅。写的不全或者有误的地方,望大家不吝赐教。

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

推荐阅读更多精彩内容