设置 iOS 应用程序(启用通用链接)

应用程序端的设置需要两件事:

  1. 配置应用程序的权利,并通过启用项目中的关联域功能来启用通用链接。
  2. 处理 AppDelegate 中的传入链接。

1.配置应用程序的权利,并启用通用链接

配置应用程序权利的第一步是为你的应用程序 ID 启用它。在 Apple Developer Member Center 中执行此操作。单击证书标识符和配置文件,然后单击标识符。选择你的应用程序 ID(如果需要,首先创建它),单击编辑并启用关联域权限。

接下来,通过单击相应的 App ID 获取 App ID 前缀和后缀。

App ID 前缀和后缀应与 apple-app-site-association 文件中的前缀匹配。

接下来在 Xcode 中,选择应用程序的目标,单击功能并将关联域切换为打开。为你的应用支持的每个域添加一个条目,以 app 链接为前缀

例如 applinks:YourCustomDomainName.com

对于示例应用程序,这看起来像这样:

注意 :确保你已选择相同的团队并在成员中心输入与注册的 App ID 相同的 Bundle ID。还要确保 Xcode 通过选择文件包含权利文件,并在文件检查器中确保选中目标。

2.处理 AppDelegate 中的传入链接

所有重定向从 Safari 到应用程序的通用链接都通过 Application 的 AppDelegate 类中的以下方法进行。你解析此 URL 以确定应用程序中的正确操作。

[UIApplicationDelegate application: continueUserActivity: restorationHandler:]

Objective-C

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
    ///Checking whether the activity was from a web page redirect to the app.
    if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
        ///Getting the URL from the UserActivty Object.
        NSURL *url = userActivity.webpageURL;
        UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
        UINavigationController *navigationController = (UINavigationController *)_window.rootViewController;
        if ([url.pathComponents containsObject:@"home"]) {
            [navigationController pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"HomeScreenId"] animated:YES];
        }else if ([url.pathComponents containsObject:@"about"]){
            [navigationController pushViewController:[storyBoard instantiateViewControllerWithIdentifier:@"AboutScreenId"] animated:YES];
        }
    }
    return YES;
}  

Swift:

func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
      if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
          let url = userActivity.webpageURL!
          //handle url
      }
      return true
  }

iOS 应用程序代码

应用程序代码可以在这里找到 master 分支。