什么是 Universal Links

在开发中我们需要从浏览器,Safari中去唤醒App,iOS 9之前我们通过配置scheme从而实现这种跳转,但是这种方式需要提前判断系统中是否安装了能够响应对应scheme的app,这种方式在微信中是被禁用的。
Universal Links是iOS 9推出的一项功能,我们可以通过配置Universal Links使用户能够通过一个链接进入app或者指定页面,这个不会被微信禁用。

配置文件

  • 首先我们需要有一个支持Https的域名,必须支持Https
  • 创建一个内容为Json格式的文件,文件名为apple-app-site-association,没有后缀名(没有.json),文件内容如下:
{
     "applinks": {
         "apps": [],
         "details": [
             {
                 "appID": "2DNT4K53X5.com.apple.app",
                 "paths": [ "*" ]
             }
         ]
     }
 }

appID组成:TeamId.your app’s bundle identifier。这里我随意填的,2DNT4K53X5表示你app的TeamId,com.apple.app表示app的bundle identifier
paths组成:设定你的app支持的路径列表,只有这些指定的路径的链接,才能被app所处理。*的写法代表了可识别域名下所有链接。

  • 将这个文件上传到你的域名对应的根目录或者.well-known目录下,这样IOS将会在合适的时候,从该域名请求这个文件。我们可以自己测试,即打开 域名/apple-app-site-association ,看看我们能不能够下载到对应的文件。
  • 然后我们需要在app中进行相关配置。之前我们需要在对应App Id的Application Services列表中加入Associated Domains,使它变成Enabled。现在Xcode会帮我们自动配置,我们只需要在项目中加入Associated Domains,然后在Domains中加入相应链接,如下图:

Domains中加入的链接,必须以 applinks:开头,然后去除你的域名前的Https以及最后的/,例如你的域名是https://www.apple.wwdc.com/,那么Domains中加入的就是applinks:www.apple.wwdc.com。

验证是否有效

配置一个该域名下可以访问的链接地址,然后复制该链接到Safari中直接访问,然后在出现的网页中下拉,当出现在“XXX”App中打开即可

在AppDelegate处理Universal Links

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler

{
	if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
	
	NSURL *webpageURL = userActivity.webpageURL;
	
	NSString *host = webpageURL.host;
	
	if ([host isEqualToString:@"××××.mingpao.com"]) {
	
		//判断域名是自己的网站,进行我们需要的处理
	
	}else{
	
		[[UIApplication sharedApplication]openURL:webpageURL];
		
		}
	
	}
	
	return YES;
}

当用Universal Links启动APP时就会调用上面的方法。