iOS9 新功能:Support Universal Links,iOS10 openUrl新函数

先看官方文档:https://developer.apple.com/library/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.htmlhtml

简单解释一下ios

咱们都知道ios应用可以注册本身的URL Schemes,以后经过点击连接访问应用,好比 TheTest://testUrl. 而若是是普通的http或者https连接,那么就会用safari打开。json

若是我有一个资源,好比是一个pdf文件,在游览器中能够访问,地址是 http://test.com/aaa.pdf 。若是ios设备安装了个人app,那么在app中也能查看这个pdf。客户想要这样一个功能:点击了一个连接,若是安装了app,那么在app中打开,若是没装,那么在safari打开。api

在ios9之前,用一个连接打开也有方法,但要屡次跳转,十分不友好,基本不会使用。最经常使用的方法是创建2个url,一个是http://test.com/aaa.pdf这样的,一个是TheTest://aaa.pdf这样的,用户本身选择打开哪个,也不太友好。服务器

ios9 的 Support Universal Links 就能解决这个问题。app

咱们只须要在邮件中写一个标准的http连接,就是http://test.com/aaa.pdf这样的,点击以后,系统会判断是否有程序注册了这个连接,若是注册了,不会打开safari,而会打开这个程序。没有注册的话,仍是经过safari打开。dom

具体实现以下:函数

1.配置ios工程:测试

这2个连接,就表示程序会到这2个domain取具体的配置文件。为何要到服务器取?这样就能增长一层验证,防止恶意程序代替正常的网站连接启动。网站

The file needs to be accessible via HTTPS—without any redirects—at https://<domain>/apple-app-site-association or https://<domain>/.well-known/apple-app-site-association.

注意,必须是https的连接,并且不能有任何重定向操做。那么是否是必须使用通过CA认证的https呢?也就是说,能不能本身在内网上创建一个https服务器,让universal links工做呢?

这个问题,我到官方论坛提问了,连接以下 https://forums.developer.apple.com/thread/51619 ,必须使用CA认证的证书!若是实在内网测试,应该本身模拟CA颁发证书,并让系统信任本身建立的ca,那么问题又来了,如何让ios系统信任这个ca呢????是能够经过企业设备管理,把相关证书加入ios系统吗?

取的数据没什么特别,就是一个json数据,可是它的获取位置是固定的,要么是/apple-app-site-association,要么是

/.well-known/apple-app-site-association

{
    "applinks": {
        "apps": [],
        "details": [
            {
                "appID": "Q4BE9Z32J8.com.kings.test",
                "paths": [ "*" ]
            }
        ]
    }
}

具体的说明能够参看官方文档。

成功后,在邮件中点击普通的http://test.com/aaa.pdf连接,就会出现下图:直接进入了程序,注意右上角,点击后能够用游览器启动

而若是用游览器启动,有下图,看上方,还能用程序启动。系统会记录下你最后一次的选择,下次点击http连接时,会重复你的上次的选择。

 

另外,针对这个Universal link 功能,ios10加入了openURL:options:completionHandler:这个新api,其中options的参数有一个UIApplicationOpenURLOptionUniversalLinksOnly选项,默认是false,若是设置为true,当打开一个http这样的链接时,若是没有安装注册这个url的ios应用,函数就会返回错误,不会用safari代替打开。

相关文章
相关标签/搜索