通用链接的作用是将网站和App
建立联系,通过点击http
链接打开App
以下是几篇不错的文章,照着做。等实际做的时候再添加过程和填坑过程。
One URL works for both your website and your app.
Apple
推出通用链接:一种能够方便的通过传统HTTP
链接来启动APP
, 使用相同的网址打开网站和 APP
。
主要工作
- 添加域名到
Capabilities
- 上传
apple-app-site-association
文件 - 在
AppDelegate
里处理通用链接 - 开发者网站打开
Associated Domains
功能
开发者中心->Identitiers->App IDs->需要支持的应用App ID
- 添加功能之后,
Provisioning Profile
需要重新生成并更新一下,因为entitlement
文件增加内容了,需要更新到证书里面
主要原理
如果支持通用链接(比如iOS9
,并且把这个功能打开了),当用户点击了通用链接后,iOS
系统会启动App
,并且APPDelegate
中的代理函数application:continueUserActivity:restorationHandler:
会被调用。NSUserActivity *
类型的参数userActivity
的属性activityType
的值为NSUserActivityTypeBrowsingWeb
,这样就可以判断这次的启动是用户通过点击通用链接而过来的。对于iOS9
以前的不支持通用链接的系统,这里不会进来。
另外,URL
信息,通过userActivity
的属性webpageURL
传递过来。根据这个URL
,可以跳转本地的页面,或者像以前一样,调用Safari
显示网页,具体操作就根据URL
的编码约定了。
// 通用链接
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
// 用户点击通用链接,导致APP启动,会进到这个里面
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSURL *url = userActivity.webpageURL;
if (nil == url) {
return YES;
}
if ([url.host isEqualToString:@"domain.com"]) {
// 是目标链接,调用Native代码,打开对应的页面
} else {
// 不是目标链接,用Safari打开
[[UIApplication sharedApplication] openURL:url];
}
}
return YES;
}