美文网首页iOS开发iOS收藏iOS Developer
iOS Universal Links(通用链接)的使用

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

作者: liangZhen | 来源:发表于2017-01-05 15:29 被阅读761次

    一、 通用链接介绍

    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 

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

    相关文章

      网友评论

      本文标题:iOS Universal Links(通用链接)的使用

      本文链接:https://www.haomeiwen.com/subject/pfxavttx.html