包含Xcode11.0的配置方式和iOS13出现的问题。html
Universal Link
(通用连接)Universal Link
(通用连接)是Apple在iOS9推出的一种可以方便的经过传统HTTPS
连接来启动APP的功能,可使用相同的网址打开网址和APP。当你的应用支持Universal Link
(通用连接),当用户点击一个连接是能够跳转到你的网站并得到无缝重定向到对应的APP,且不须要经过Safari
浏览器。若是你的应用不支持的话,则会在Safari
中打开该连接。在苹果开发者中能够看到对它的介绍是:前端
Seamlessly link to content inside your app, or on your website in iOS 9 or later. With universal links, you can always give users the most integrated mobile experience, even when your app isn’t installed on their device.web
Universal Link
(通用连接)Universal Link
(通用连接):看起来就是一条普通的https
连接,固然是咱们在该连接域名根目录配置过的一个连接,也能够在该连接中放置对应的H5页面。当用户的点击该连接,只要手机中安装了支持该连接的APP就会直接进入到APP中。若是没有安装APP则会跳转到Safari
浏览器中,展现H5页面。对用户来讲则是一个无缝跳转的过程。json
Universal Link
(通用连接)的应用场景使用Universal Link
(通用连接)可让用户在Safari
浏览器或者其余APP的webview
中拉起相应的APP,也能够在APP中使用相应的功能,从而来把用户引流到APP中。好比淘宝当在Safari
浏览器中进入淘宝网页点击打开APP则会使用Universal Link
(通用连接)来拉起淘宝APP。跨域
Universal Link
(通用连接)跳转的好处URL Scheme
,由于它使用标准的HTTPS
协议连接到你的web站点,因此通常不会被其它的APP所声明。另外,URL scheme
由于是自定义的协议,因此在没有安装 app 的状况下是没法直接打开的(在Safari
中还会出现一个不可打开的弹窗),而Universal Link
(通用连接)自己是一个HTTPS
连接,因此有更好的兼容性;HTTPS
连接能够打开那些APP)。由于只有你本身才能上传文件到你网站的根目录,因此你的网站和你的APP之间的关联是安全的;Universal Link
(通用连接)也可以工做。若是你愿意,在没有安装你的app的时候,用户点击连接,会在safari中展现你网站的内容;HTTPS
的连接,能够同时做用于网站和APP;Universal Link
(通用连接)HTTPS
的域名,而且拥有该域名下的上传到根目录的权限(为了上传Apple指定文件)。开发者中心配置:找到对应的App ID,在Application Services列表里有Associated Domains一条,把它变为Enabled就能够了。浏览器
配置App ID支持Associated Domains:
安全
配置指定文件:建立一个内容为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": [ "*" ] } ] } }
服务器
说明:微信
appID:组成方式是
teamId.yourapp’s bundle identifier
。如上面的 9JA89QQLNQ就是teamId。登录开发者中心,在Account -> Membership里面能够找到Team ID。网络
paths:设定你的app支持的路径列表,只有这些指定的路径的连接,才能被app所处理。星号的写法表明了可识 别域名下全部连接。
上传指定文件:上传该文件到你的域名所对应的根目录或者.well-known目录下,这是为了苹果能获取到你上传的文件。上传完后,本身先访问一下,看看是否可以获取到,当你在浏览器中输入这个文件连接后,应该是直接下载apple-app-site-association文件。
Universal Link
(通用连接)相关验证在iOS设备中的备忘录中输入APP能识别的连接,而后直接点击此连接,就会直接跳转到你的app了。或是长按,在出现的弹出菜单中第二项是在’XXX’中打开,这也表明着成功:
或是你将要测试的网址在Safari
中打开,在出现的网页上方下滑,能够看到有在”XX”应用中打开:
出现菜单:
当点击某个连接,直接能够进咱们的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; }
苹果为了方便开发者,提供了一个网页来验证咱们编写的这个apple-app-site-association是否合法有效,进入验证网址进行验证:
注意
前端开发常常面临跨域问题,必需要求跨域,若是不跨域,就不行。
只有当前webview
的URL
域名,与跳转目标URL
域名不一致时,Universal Link
(通用连接)才生效。
服务器换域名了肿么办???
当Associated Domains添加新的 Domains的以后,在app再次启动的时候抓包发现(不须要删除重装),苹果会给新添加的这个Domains发送一个请求,请求新Domain下的apple-app-site-association文件。
也就是说Associated Domains发生改变的话,系统是会知道的,这样就能够在迭代的时候删除旧的域名,添加新的域名了。
另外Domains的配置也可使用通配符,例如:applinks:*.mywebsite.com
全都配置好了,项目也能唤起来了,web页面到底该怎么弄呀???通用连接指向的服务器的页面到底应该是哪一个?
以前iOS和安卓用的是同一个网页,也就是说从APP内分享出去的网页,能够被苹果用户和安卓用户同时查看,在这里须要由web童鞋使用js判断当前所处的平台以及其系统。
若是是安卓用户,则显示安卓相关提示页面。
若是是苹果用户,那么分两种:
Universal Link
(通用连接)了,且该通用连接地址指向的是一个APP下载引导页面,那么当用户安装了APP,便可经过通用连接唤醒APP;若是用户没有安装app,那么就会跳转到通用连接指向的APP下载引导页面,达到最大化的客户导流。URL Scheme
的重定向,以实如今Safari
中唤醒咱们的APP。当使用通用连接唤醒APP以后,手机右上角有一个小按钮?
那个小按钮只有(在iOS10.0如下才有)是能够引导用户跳转到Safari
中,名字叫bread crumbs button
(面包屑),固然也去不掉;而且当用户点过这个按钮后,再点击Universal Link
(通用连接)不会直接打开对应的APP。
备忘录和safari中均可以打开app,怎么分享到其余app里面就不行了?
未跨域致使的,如:分享到微信的连接是https://www.mydomain.com/share.html
,而后该网页中的“在app内打开”按钮配置的通用连接为https://www.mydomain.com/index.html
。
跨域的意思是说,通用连接 和 调用通用连接的网页不要使用同一域名。
即若是通用连接域名为www.mydomain.com
,则通用连接所处的网页域名就不能是www.mydomain.com
。
微信已经禁用了Universal Link
(通用连接)
iOS13中在safari中能够打开相应APP,可是从微信或其余APP中点击去safari怎么就打开了别的APP?
在iOS13以前在其余APP去safari中打开Universal Link
(通用连接)系统匹配域名是全匹配,而在iOS13以后规则发生了变化,猜想是包含关系。好比在iOS13以前,若是Universal Link
(通用连接)为w.mydomain.com
那么在微信或者其余APP访问www.mydomain.com
而后点击去safari打开则不会拉起相应APP,而在iOS13则会拉起相应APP。
而在safari中输入的连接则依然和iOS以前同样,只有www.mydomain.com
才会提示打开相应APP。
文章如有不对地方,欢迎批评指正