连接直接调转本地APP
- schema
- Universal Links
iOS 9之前的调转方式基本都是schema。这种方式主要是APP之间的互相调转和网页直接调转到APP。schema://。但是会有一个弹框,每次都会询问,不是很友好。所以我们直接学习Universal Links。iOS 9.2 之后都可以用


最近看到一个新闻,苹果强制旧设备需要升级了,所以schema 这种调转方式,就不需要说了。

接下来直接看Universal Links
看到微信开发平台的官网已经更新了SDK. 微信开发平台官网

打开基本按照平台操作就可以了。 现在好多APP已经集成了这个功能,打开连接直接调转到本地的APP。比如知乎,豆果,唯品会。现在苹果可能要求微信,给所有APP全面开放这个功能。这个功能还是比较好的。
- 从safari 打开网页直接调转到本地APP
- 连接发送到微信,从微信浏览器直接打开本地APP
按照这个集成就没有问题。目前safari的打开APP很好集成,后面再说微信的坑。那就是从微信浏览器调转到本地APP。
一 Universal Links
- 先说一下特性
唯一性:不像自定义的schema链接,通用链接不会被其它的APP所使用。因为它使用标准的https链接到你自己的域名。【因为你的域名不会被其他人所使用】
安全性:当用户下载APP的时候,iOS会检查你上传到web服务器的文件以确保您的网站允许您的应用程序以其名义打开网址。因为只有本人有权利创建且上传该文件到服务器,所以网站和APP的关联是安全的。
甚至在iOS设备没有安装你项目的时候通用链接也会正常工作。当设备没有安装APP的时候,点击通用链接会在Safari展示你网站的内容
一个通用链接可以同时作用于项目和网站中
其它APP可以在不知道你的APP是否安装的情况下与你的APP通信
- 使用条件
1.有一个注册的域名。
2.支持https请求,并且CA证书是有效的,这个需要与后端同事进行确认。
3.可上传一个json文件到web服务器
4.APP版本至少为iOS9及以上
5.Xcode版本为7以上
二 xcode 配置
首先需要准备一些信息
域名 = www.baidu.com
bundleID = @"com.test.bundle"
team ID = 5VIDSHSAUX 这个在APP证书里面查看就好了。
xcode 11 配置


applinks:www.baidu.com
applinks: 是固定写法,后面写上你的域名就行了
这个时候去看你APP网页证书的时候,会显示

二 服务器配置
创建一个内容为json 名字为apple-app-site-association 的文件。切记文件不需要任何后缀。json 内容
{
"applinks": {
"apps": [],
"details": [
{
"appID": "9JA89QQLNQ.com.apple.wwdc",
"paths": [ "/wwdc/news/", "NOT /videos/wwdc/2015/*"]
},
{
"appID": "ABCD1234.com.apple.wwdc",
"paths": [ "*" ]
}
]
}
}
这里说下appID 是由 team ID.bundleID 组合而成的。
path 是代表这域名后面跟着的路劲 "/* " 一般就可以代表所有路劲都可以调转 "NOT /videos/wwdc/2015/*" 代表那些路劲不需要调转
paths 指定 apple-app-site-association 文件所在的服务器的哪些路径的链接会被视作 Universal Links,哪些不会被当做 Universal Links。如: /wwdc/news/ 会被当做 Universal Links,而 /videos/wwdc/2015/ 路径下的所有链接都不会被视作 Universal Links。
也可以设置多个APP 调转 里面写成数组就可以了。

上传该文件到你的域名所对应的根目录或者.well-known目录下,这是为了苹果能获取到你上传的文件。上传完后,自己先访问一下,看看是否能够获取到,当你在浏览器中输入这个文件链接后,应该是直接下载apple-app-site-association文件。
然后重新运行APP ,重新运行APP ,重新运行APP。重要的说三遍
测试验证
接下来就是测试验证看是否可以实现


如果出现这两种方式都可以的话,那就代表基本成功了。
如果要验证你的连接支不支持调转到本地APP,苹果给了一个测试连接。
打开连接后,复制你要连接到这里
看到这个效果代表测试成功了。

但看到有的是这个样子,也是成功了。

下一步就是在微信网页里面的调转本地APP
只需要在微信开发平台里面注册这个就行了

主要在这里说一下微信浏览网页直接打开APP的坑。这个需要前端同学的帮助。
从iOS 9.2开始,在相同的domain内Universal Links是不work的,必须要跨域才生效
从iOS 9.2开始,在相同的domain内Universal Links是不work的,必须要跨域才生效,我们实测值需要跨子域名即可,比如 m.domain.com 跳转 o.domain.com 是可以触发跳转App。
最后找到这个才是关键。配图说明一下

也就是说微信开发平 注册的是oia.hbtown.com 这个域名。 这个域名才是Universal Links 的关键所在。如果说打开APP的URL和网页URL一样的话是不能跳转到本地APP的,我也一直掉进了这个坑里,微信文档也说的不是很清楚。
这里要需要注意一下。如果说需要更换微信开发平台的Universal Links。那么要做几点注意事项
- 1 微信开发者平台更换 Universal Links
- 2 xcode 配置Associated Domains
- 3 在Universal Links 的域名服务器下上传文件名为 apple-app-site-association 的文件
- 4 删除当前APP。重新运行。(只在第一次安装的时候下载apple-app-site-association)
- 5 切记测试的时候不要打开Charles 这样抓包会影响测试
最终的原理探究学习,以及出现问题的排查。
1 首先检查自己2个路劲下有没有这个apple-app-site-association个文件。方法前面已经说过了。装APP的时候只有第一次才会下载。或者更新APP的时候下载。
2 看apple-app-site-association这个文件的appID 对不对,配置的路径对不对。
3 苹果专门提供了,验证apple-app-site-association这个文件的网页,可以去验证
4 还有就是apple-app-site-association文件在抓包的时候也可能获取失败。所以不行就要换个手机试试,不要总纠结这一个手机
5 探究一下原理,app浏览苹果网页都是WebKit.当打开某一个连接的时候,肯定是可以拦截到的,Universal Links 的配置就起了非常重要的作用。
6 项目中为什么需要配置associate domains?当APP启动的时候,告诉系统这个APP支持Universal Links ,这样就可以去下载apple-app-site-association文件了。
7 apple-app-site-association文件里面的配置信息是干什么的,就是根据applinks 在WebKit加载链接时进行拦截,
8 还遇到过就是网页在浏览器里面是可以直接调转的,就是微信里面不能跳转,然后经过各种排查,发现是前端写的js 判断有问题。判断的微信版本号。逻辑出错了。导致微信不能点击直接跳转。
微信有提供特别方便的监测是否注册成功的方法,如果哪一步没有通过,微信会给出提示,如果出现未认证应用,微信未认证应用说明 看这个说明,如果没有问题的话,一般第二天就会好,被微信从白名单移除。

如果遇到
欢迎大家一起讨论。