iOS 9 通用链接(Universal Links)

作者: subvertWuxu | 来源:发表于2016-01-08 14:42 被阅读36056次

    最近老大要求在App里加这个功能,于是乎就研究了一下。

    网上可以参考的文章很多,比如:

    1.官方文档

    2.Cocoachina:iOS 9学习系列:打通 iOS 9 的通用链接(Universal Links)

    3.一篇不错的博客

    建议看官方文档,上面会有很多注意事项。其他都差不多,这里只总结下需要注意的点:

    1.apple-app-site-association文件不能带后缀,务必把".json"的后缀去掉!有些人的电脑是隐藏文件后缀的,这要格外注意;

    2.apple-app-site-association一定要传到域名根目录下;

    3.WebServer需要支持https,且https使用有效的证书(是私密链接)。笔者在这里卡了很久,原因就是后台给配的https使用无效的证书,导致应用安装的时候不能正确的下载apple-app-site-association文件;

    4.如果想测试这个功能,可以让后台搭一个测试服务器,并配置虚拟主机生成域名,然后iOS这边通过host访问域名就可以了。注意"applink:"后面写的一定是域名,不能是IP;

    5.抓包的结果显示,网络顺畅的情况下,应用会在在刚安装(不是打开)的时候会去applink中的地址下载apple-app-site-association文件,所以如果需要测试,请保证网络通畅;

    6.当所有都准备好,需要测试该功能的时候,只需要在记事本或短信中输入App能识别的链接,然后直接点击或是长按就可以了,直接点的效果是跳转到你的App,然后右上角是“去网页”的箭头,长按的效果是弹出的菜单中第二项是“在'XXX'中打开”,这也代表着成功。直接在Safari中输入链接是无效的,必须从一处跳入才可以(比如上一级网页)。

    7.苹果有个网址(这里)可以检测你的apple-app-site-association是否是有效的,准备好了可以测试一下。

    8.测试的时候,建议使用dev证书打包,之后安装到手机上测试功能。未安装应用的情况下直接在手机上跑好像也是可以的,因为抓到过请求。

    9.如果你有问题,但上面没有列出,Stackoverflow上面有个问题,可以看下其他人的建议。

    可能写的有出入或是不全,欢迎大家补充。


    更新:

    1.如果需要支持此功能,需要在开发者中心做配置。具体是这样:开发者中心->Identitiers->App IDs->需要支持的应用App ID,在Application Services列表里有Associated Domains一条,把它变为Enabled就可以了。参考下图

    2.当你在项目targets->Capabilities->Associated Domains中配置app link之后,系统会自动帮你写入.entitlements文件,所以不需要自己去手动加。需要注意的是,有人遇到过.entitlements文件没有被加入工程的,这也会产生问题,需要手动把.entitlements加入工程。

    3.apple-app-site-association文件里有个paths字段,这个是用来控制可识别链接的,星号的写法代表了可识别域名下所有链接。这篇博客里有很多其他公司的例子,可以参考一下。



    相关文章

      网友评论

      • x_code:iOS8怎么办,请问下有遇到过吗
        _zdd:iOS 9 以下的,只能使用URL Schemes方式来唤醒App了,iOS 9 以上使用Universal Link
      • 跟着内心走:楼主,我让服务端上传了apple-app-site-association文件,用浏览器也可以正常打开,我们的域名也是https,但在苹果网站检测时告诉我“Unable to parse your webpage url at this time.”,这种情况知道是什么原因吗?
      • 七堇年华cc:你好,遇到一个问题,在苹果的检测验证那儿,报错:Error cannot fetch app site association,是获取不了这个文件吗?一直找不到原因,url是:https://xxxxdomain.com/.well-known/apple-app-site-association
      • 2e2292535869:请教一下:我同一个文件可以同时试用于两个客户端吗?还是说两个客户端需要两个文件?,两个客户端用一个文件的时候需要怎么区分呢?
      • 像羽毛那样轻:前端跳转App 需要些什么呢?
      • Swallow096:为什么要加一个域名 这个域名是做什么用的
      • Albin_iOS:请问我把https://wxxcx.crionline.cn/apple-app-site-association放到苹果网址测试没有通过,是什么原因呢?
        Eric_LG:这个属于正常,可以使用。用抓包工具看,真机上跑程序的时候有没有下载那个文件
        Albin_iOS:Error no apps with domain entitlements
        The entitlement data used to verify deep link dual authentication is from the current released version of your app. This data may take 48 hours to update.
      • Mossion:楼主,那要怎么把网页的信息通过通用链接传过来呢,比如正在浏览的商品信息等?
        跟着内心走:我能打断点能跳转到 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler方法,但userActivity指针里面没有任何东西,你有遇到过吗?
        Mossion:@subvertWuxu 已经解决,还是谢谢楼主的答复
        subvertWuxu:第三篇文章后面有写到,需要实现: - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler方法,在里面捕获网页链接,然后做一个本地映射,或者取出你想要的参数,再做本地跳转就可以了
      • 26e32ef0f610:通用链接,第三方平台 openinstall 有实现,挺好用的。他们还提供app个性化安装,非常有价值,可以去看看。
      • 5db344c06fe0:作者您好,如果唤起APP之后点击的右上角的链接系统会默认之后用Safari打开,目前已经有应用做到了屏蔽这个bug,不知道您后来有没有优化这个问题,前来请教
        subvertWuxu:没有的,如果你知道了麻烦告诉我一下,谢谢
      • 卟师:我能转载分享吗?我会标注上作者和出处的
      • Lonely__M:言简意赅 不错
      • 老骚鹅:楼主你好,我现在碰到一个问题,就是我从记事本打开链接可以直接跳转到app,但是如果把这个链接通过微信或者QQ分享给好友,点击分享的链接不会跳转到app,而是会跳转到这个链接对应的一个H5页, 但是点击右上角使用safari打开,就可以跳转到app,你知道这是什么原因吗?跪求解答,谢谢了!
        IOSMan:我也出现同样的问题,但是在苹果那验证域名出现:Error no apps associated with url,急急急
      • SkySongK:我只想问,,,apple-app-site-association这个文件用什么编辑的。。。。。。mac的文本编辑器??
        subvertWuxu:最好不要用文本编辑器吧,有可能带颜色什么的附加信息。推荐Sublime
      • 45c78c4b63a3:亲, Description, Image,Touch Icon这些都是必须的吗?
      • huanghy:你好,请教一下服务器都需要配置什么啊?
      • 你好ppa:请教一下:3.WebServer需要支持https,且https使用有效的证书(是私密链接)。笔者在这里卡了很久,原因就是后台给配的https使用无效的证书,导致应用安装的时候不能正确的下载apple-app-site-association文件; 有效的证书是指第三方颁发的证书吗???我现在用的https的证书不是第三方颁发的,这样可以吗??
      • 82c7a7c43e32:实现通用链接需要服务端的支持,可以考虑使用云服务 openinstall
      • newhzh:请教一下,我配置完成后,微信里打开https://sub.domain.com 直接打开了这个域名对应的网站,并没有调起app,然后在safari里打开域名,唤起了app,但是马上又打开了对应的网站内容。
        请问这是哪里没有设置好?
        谢谢
        00fce043cf44:我设置完 通过https://search.developer.apple.com/appsearch-validation-tool/这个苹果的验证显示最后一项不通过Error no apps with domain entitlements,请问是什么原因呢,我的域名是https://wangsen.website 服务器用的gitpage的
        老骚鹅:楼主你好,我现在碰到一个问题,就是我从记事本打开链接可以直接跳转到app,但是如果把这个链接通过微信或者QQ分享给好友,点击分享的链接不会跳转到app,而是会跳转到这个链接对应的一个H5页, 但是点击右上角使用safari打开,就可以跳转到app,你知道这是什么原因吗?跪求解答,谢谢了!
        清晨日暮:@newhzh 你好,我的QQ是532557007 关于Universal Links能交流下么?
      • 97297059cc93:apple-app-site-association文件放到abc.xxxx.tv下面,打开的app的时候直接打开了abc.xxxx.tv这个网址 这是为什么?
      • linatan:hi,请问下,我配置的applinks是 abc.xxx.com和m.abc.xxx.com,需要在这两个域名下都放置apple-app-site-association文件么?
      • 你家隔壁:访问链接的时候页面是需要使用超链接标签吗?比如<a href="applinks:m.abc.com"/>?是这样吗?
        subvertWuxu:@你家隔壁 不太明白你的问题
      • f70d893b6c58:你好 我在做的过程中遇见一个问题 application/pkcs7-mime 这个配置是在客服端做还是在服务端做 具体要怎么配置呢 ?
        subvertWuxu:@丶懂先生 我看了一下,这个配置应该是在服务端做。由于请求是系统发出的,所以应该会在iOS8和iOS9上以不同的Content-Type来请求,只要你们后端支持了应该就OK
        f70d893b6c58:@subvertWuxu 官方文档中提到的 当APP第一次安装时 会请求一个apple-app-site-association文件 这个文件是放在域名服务器的根目录下面 请求的时候 服务器配置要求站点必须是youdomain.com/apple-app-site-association,请求头是‘application/pkcs7-mime’,返回HTTP码是200。 我不明白的是 这个请求在客户端是如何发起的 这个头部的配置是如何配置的
        subvertWuxu:@丶懂先生 这个是什么配置?我没有配置过
      • 鸦神道人:你好,我现在遇到一个问题,就是地址栏里面是shanghai.abc.com/wap/....,下面的操作是beijing.abc.com/wap/...点击操作会直接唤起app。如果是shanghai/abc.com/ppp/....点击操作唤起不了app,这个情况是什么原因呢?谢谢
        鸦神道人:@鸦神道人 就是说,地址开头不能一样,否则需要长按选择才行,点击操作不行
      • 9dbf1178431c:您好,请问下,如果服务端修改了apple-app-site-association文件,app会及时下载并能更新吗
        9dbf1178431c:@zichen132 http://stackoverflow.com/questions/35187576/does-the-apple-app-site-association-json-file-ever-get-updated-in-app,我在这儿找到答案了,不过现在新的问题是,如果服务端没有apple-app-site-association,但是用户已经下载了app(即已经check过json文件后),之后服务端再上传文件,用户app在不更新的情况下还能再下载吗
      • _健健:请教一下整个webServer都要支持https吗?必须是SSL3.0吗?
        subvertWuxu:@_健健 应该只是apple-app-site-association 文件的访问需要是https的
      • embraceChange:你好 我想请教一下,例如我把 apple-app-site-association 文件上传到 https://chuanbo.cn/apple-app-site-association 这个路径下,文件里的 paths 写的是个 * 号,现在访问 chuanbo.cn 可以调起app , 那么我现在想在打开 test.wenhua.com 这个域名下的链接时候,也能呼起 app ,我需要怎么做呢 ?
        清晨日暮:@embraceChange 添加domain的时候加上test.wenhua.com试试?
      • 梦的预见:你好, 请问下 我该配置的都配置好了 而且 用我的手机 在微信可以跳转到APP 但是换了 手机 就跳转不了, 手机系统都是 iOS9以上, 请问到底是哪里出了问题呢? 还有大神 能否留个 QQ 帮我指点一二呢 万分感谢! 被这个问题快折磨死了
        subvertWuxu:@梦的预见 这个感觉就是微信的锅了。。你卸了微信重安一下试试
        梦的预见:@subvertWuxu 微信里不能 跳转 我在备忘录 把链接 复制进来 长按 也有 提示 进入APP
        就是 微信 跳转不了
        subvertWuxu:@梦的预见 换了手机后是在什么情况下无法跳转?
      • bb48bfd07f90:请问如果本地没有安装app应该如何处理呢
        subvertWuxu:@偷吃猫的俞 这个可以让web端配合一下,在那个链接放一个你们app的下载推广页面,这样当没有安装的时候,跳转到的页面就不是404,也能起到宣传的作用了。
        bb48bfd07f90:@subvertWuxu 你好,我想问的是如果iphone上没有安装相对应的app,怎么样提前做出判断呢?我已经按步骤实现了通用链接,iphone上装有app的时候可以直接到app,但是如果把app删除,就会到你自己定义的那个链接(404页面)。
        subvertWuxu:@偷吃猫的俞 那么就支持不了这个功能
      • b2958353f08d:请教一下 为什么我什么都设置好了 但是不成功 而且在安装 模拟器里直接测试地 并没有抓到访问设置的json文件的记录?
        subvertWuxu:@Simpleflow 如果没有抓到证明你某些地方还是没有设置好。你可以使用苹果的那个检测工具先看看是不是服务器的问题。如果不是,再按照上面的点查看一遍吧
      • Meganzhou:我将apple-app-site-association放到了m.abc.com的根目录下,而且我配置的applinks:m.abc.com 和 n.m.abc.com。我发现当打开m.abc.com的时候能正常打开并跳转到APP,可是它的subdomain( n.m.abc.com)并不能打开APP,这是什么原因呢?
        subvertWuxu:@Meganzhou 建议分开配置试试
        Meganzhou:@subvertwuxu

        如下,就配了一个通配符。

        {
        "applinks": {
        "apps": [],
        "details": [
        {
        "appID": "TeamID.bundleID",
        "paths": [ "*" ]
        }
        ]
        }
        }
        subvertWuxu:@Meganzhou 你的apple-app-site-association文件是什么样子的?
      • 林步蜓:谢谢分享!
      • bb5bb225b538:加油
        b849dbd78593: 你好 我有点儿问题 就是这个json 文件,是api端 存放在根目录下吗? 假如我有一个链接叫 https://www.baidu.com/ apple-app-site-association 这样我把app links:www.baidu.com 存入.entitlements 文件里。 如果我在浏览器输入https://www.baidu.com 他就会自动跳入app ? (其实app 是请求得链接是https://www.baidu.com/ apple-app-site-association ) 是这样吗?
        b849dbd78593:@subvertwuxu 你好 我有点儿问题 就是这个json 文件,是api端 存放在根目录下吗? 假如我有一个链接叫 https://www.baidu.com/ apple-app-site-association 这样我把app links:www.baidu.com 存入.entitlements 文件里。 如果我在浏览器输入https://www.baidu.com 他就会自动跳入app ? (其实app 是请求得链接是https://www.baidu.com/ apple-app-site-association ) 是这样吗?
        subvertWuxu:@Nurnberg :pray: 写的不好,还望多多提意见 :smile:

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

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