将 URL 方案添加到你自己的应用程序

假设你正在开发名为 MyTasks 的应用,并且你希望允许入站网址创建包含标题和正文的新任务。你正在设计的 URL 可能如下所示:

mytasks://create?title=hello&body=world

(当然,textbody 参数用于填充我们正在创建的任务!)

以下是将此 URL 方案添加到项目的重要步骤:

  1. 在应用的 Info.plist 文件中注册 URL 方案,以便系统知道何时将 URL 路由到你的应用。
  2. UIApplicationDelegate 添加一个接受和处理传入 URL 的函数。
  3. 执行打开该 URL 时需要执行的任何任务。

第一步:在 Info.plist 中注册 URL 方案:

首先,我们需要在 Info.plist 文件中添加“URL 类型”条目。点击此处的(+)按钮: StackOverflow 文档

…然后输入你的应用的唯一标识符,以及你要使用的网址方案。请明确点! 你不希望 URL 方案与另一个应用程序的实现冲突。最好是在这里太长,而不是太短! StackOverflow 文档

第二步:处理 UIApplicationDelegate 中的 URL

我们需要在我们的 UIApplicationDelegate 上实现 application:openURL:options:。我们将检查传入的 URL,看看是否有我们可以采取的行动!

一个实现是这样的:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
    if url.scheme == "mytasks" && url.host == "create" {
        let title = // get the title out of the URL's query using a method of your choice
        let body = // get the title out of the URL's query using a method of your choice
        self.rootViewController.createTaskWithTitle(title, body: body)
        return true
    }

    return false
}

第三步:根据 URL 执行任务

当用户通过 URL 打开你的应用时,他们可能希望发生某些事情。也许这是导航到一段内容,也许是在创建一个新项目 - 在这个例子中,我们将在应用程序中创建一个新任务!

在上面的代码中,我们可以看到对 self.rootViewController.createTaskWithTitle(:body:) 的调用 - 所以假设你的 AppDelegate 有一个指向它的根视图控制器的指针,它正确地实现了这个功能,你就完成了!