iOS 9 通用连接(Universal Links)

什么是Universal Links?

在iOS9以前,对于从各类从浏览器、Safari中唤醒APP的需求,咱们一般只能使用scheme。可是这种方式须要提早判断系统中是否安装了可以响应此scheme的app,而且这种方式在微信中是被禁用了的。html

Universal Links是iOS9推出的一项功能,使你的应用能够经过传统的HTTP连接来启动APP(若是iOS设备上已经安装了你的app,无论在微信里仍是在哪里), 或者打开网页(iOS设备上没有安装你的app)。前端

下面简单说下怎么使用Universal Links,具体的能够看官方的说明文档ios

怎么使用Universal Links

1.先决条件:你必须有一个域名,且这个域名须要支持https。web

2.须要在开发者中心作配置:找到对应的App ID,在Application Services列表里有Associated Domains一条,把它变为Enabled就能够了。json

配置App ID支持Associated Domains:跨域



3.打开工程配置中的Associated Domains,在其中的Domains中填入你想支持的域名,必须以applinks:为前缀。
配置项目中的Associated Domains:
 
 
4.建立一个内容为json格式的文件,苹果将会在合适的时候,从咱们在项目中填入的域名请求这个文件。这个文件名必须为apple-app-site-association,没有后缀名,文件内容大概是这样子:
{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "9JA89QQLNQ.com.apple.wwdc",
                "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]
            },
            {
                "appID": "ABCD1234.com.apple.wwdc",
                "paths": [ "*" ]
            }
        ]
    }
}

说明:xcode

appID:组成方式是 teamId.yourapp’s bundle identifier。如上面的 9JA89QQLNQ就是teamId。登录开发者中心,在Account - Membership里面能够找到Team ID。
paths:设定你的app支持的路径列表,只有这些指定的路径的连接,才能被app所处理。星号的写法表明了可识别域名下全部连接。

这篇博客里有不少其余公司的例子,能够参考一下。也有可能有的公司的已经再也不适用,能够换换其余公司的。浏览器

5.上传该文件到你的域名所对应的根目录或者 .well-known目录下,这是为了苹果能获取到你上传的文件。上传完后,本身先访问一下,看看是否可以获取到,当你在浏览器中输入这个文件连接后,应该是直接下载apple-app-site-association文件。
 

验证

在iOS设备中的备忘录中输入App能识别的连接,而后直接点击此连接,就会直接跳转到你的app了。或是长按,在出现的弹出菜单中第二项是在’XXX’中打开,这也表明着成功:服务器

 
或是你将要测试的网址在safari中打开,在出现的网页上方下滑,能够看到有 在”XX”应用中打开
出现菜单:
 
 

在微信的网页浏览器中也是能够的,虽然微信屏蔽了全部的scheme方式跳转到其它app,可是Universal Links是由系统直接处理的,微信屏蔽不了,这也就实现了从微信跳转到咱们的app。微信

苹果为了方便开发者,提供了一个网页来验证咱们编写的这个apple-app-site-association是否合法有效,进入验证网址进行验证:


进入app后的处理

如今用户点击某个连接,直接能够进咱们的app了,可是咱们的目的是要可以获取到用户进来的连接,根据连接来展现给用户相应的内容。
咱们须要在工程里的 AppDelegate 里实现方法

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
    if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb])
    {
        NSURL *url = userActivity.webpageURL;
        if (url是咱们但愿处理的)
        {
            //进行咱们的处理
        }
        else
        {
            [[UIApplication sharedApplication] openURL:url];
        }
    }
    
    return YES;
}

注意

前端开发常常面临跨域问题,必需要求跨域,若是不跨域,就不行。
只有当前webview的url域名,与跳转目标url域名不一致时,Universal Link 才生效。

好了先说到这里,若是遇到什么问题能够详细看官方的说明文档

 
 

问题汇总

  • 按照上面写的配好了,怎么死活打不开呀???

    1.支持https呀,必定要是符合苹果认证的https证书呀。

    2.系统问题,确保iOS9以上

    3.配置文件问题,apple-app-site-association文件中配置的path和测试用的通用连接不一致,注意是区分大小写的。

    4.域名问题,xcode中配置的域名一不当心写错了。

  • 为毛有的手机成功了,有的手机就不行呢???

    1.上面也提到过,由于网络波动有可能会致使部分用户第一次安装时,没法下载apple-app-site-association文件,这个只能引导用户删除重装或者在迭代时修改Associated Domains配置告诉系统从新下载apple-app-site-association文件。

    2.另一种多是苹果抽风致使,笔者今年年初一碰到过一个蛋疼的问题,从中午一直到下午4点发现重复的删除重装,app也不会请求服务器的apple-app-site-association文件,过了4点以后就行了。当时由于时间特殊并无深究究竟是什么缘由致使。

  • 服务器换域名了肿么办???

    笔者作了一个小测试,当Associated Domains添加新的 Domains的以后,在app再次启动的时候抓包发现(不须要删除重装),苹果会给新添加的这个Domains发送一个请求,请求新Domain下的apple-app-site-association文件。

    也就是说Associated Domains发生改变的话,系统是会知道的,这样就能够在迭代的时候删除旧的域名,添加新的域名了。
    另外Domains的配置也可使用通配符,例如:applinks:*.mywebsite.com

  • 全都配置好了,项目也能唤起来了,web页面到底该怎么弄呀???通用连接指向的服务器的页面到底应该是哪一个?

    咱们以前iOS和安卓用的是同一个网页,也就是说从app内分享出去的网页,能够被苹果用户和安卓用户同时查看,在这里咱们是由web童鞋使用js判断当前所处的平台以及其系统。

    若是是安卓用户,则显示安卓相关提示页面。

    若是是苹果用户,那么分两种:

   一、若是是9以上的系统,相关的“在app内打开”按钮的连接配置的就是咱们的通用连接Universal Links了,且该通用连接地址指向的是一个 app下载引导页面,那么当用户安装了app,便可经过通用连接唤醒app;若是用户没有安装app,那么就会跳转到通用连接指向的app下载引导页面,达到最大化的客户导流。

    二、若是是9如下的系统,则由web童鞋在当前页面添加一个 “右上角在safari打开”,相应的 “在app内打开”的按钮就会发一个 跳转到咱们app schema的重定向,以实如今safari中唤醒咱们的app。

  • 当使用通用连接唤醒app以后,手机右上角有一个小按钮?

    那个小按钮是能够引导用户跳转到safari中,名字叫bread crumbs button(面包屑),固然也去不掉。

  • 备忘录和safari中均可以打开app,怎么分享到其余app里面就不行了?

    未跨域致使的,如:分享到微信的连接是 https://www.mydomain.com/share.html,而后该网页中的“在app内打开”按钮配置的通用连接为 https://www.mydomain.com/index.html
    跨域的意思是说,通用连接 和 调用通用连接的网页不要使用同一域名。
    即若是通用连接域名为“www.mydomain.com”,则通用连接所处的网页域名就不能是“www.mydomain.com”。

 
参考连接:
    1.大招之  官方文档
    2. 不错的博文
    3.苹果验证通用连接是否可用的 网站
    4.通用连接文件存放的server须要支持https  苹果支持的https证书列表
 
转自(https://www.jianshu.com/p/734c3eff8fe)
相关文章
相关标签/搜索