通用链接的作用是将网站和App建立联系,通过点击http链接打开App
Apple 推出通用链接:一种能够方便的通过传统HTTP链接来启动APP, 使用相同的网址打开网站和 APP。
主要工作
-
添加域名到 Capabilities
首先在xcode的capabilities中添加APP域名,必须用applinks: 前置它。还添加一些可能拥有的子域和扩展等。
image.png
-
上传 apple-app-site-association 文件
-
在AppDelegate 里处理通用链接
为了在 APP 里支持通用链接, 你需要在 AppDelegate 里实现
application:continueUserActivity:restorationHandler: -
开发者网站打开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;
}
作者:老章888
链接:https://www.jianshu.com/p/a2bb34eb7a91
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论