iOS9通用链接备忘

通用链接的作用是将网站和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;
}

参考文章

iOS 9学习系列:打通 iOS 9 的通用链接(Universal Links)

iOS9 Universal Links (通用链接)

iOS 9 通用链接(Universal Links)

Support Universal Links

你可能感兴趣的:(iOS9通用链接备忘)