【问题标题】:Custom url scheme works only if the app is in the background?自定义 url 方案仅在应用程序在后台时才有效?
【发布时间】:2016-04-07 14:20:02
【问题描述】:

我为我的 iOS 应用程序定义了一个自定义 url 方案,以便可以从网站访问它。当我在 safari 中键入我的自定义 url 方案时,应用程序打开,但我的 AppDelegate 中的以下函数没有被调用:

 func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
    print("Scheme: \(url.scheme)");
    print("Query: \(url.absoluteString)");
    return true;
}

只有在应用程序打开并在后台运行时才会调用它。我希望当我在 safari 中输入 url 并且应用程序未打开时调用该函数。 任何帮助表示赞赏,谢谢!

【问题讨论】:

    标签: ios swift2 url-scheme


    【解决方案1】:

    在你的didFinishLaunchingWithOptions中,你可以检查launchOptions是否包含键UIApplicationLaunchOptionsURLKey。如果您使用方案打开应用程序,它将在该字典中。

    当应用在后台时,使用 openURL(就像你已经做的那样)。

    【讨论】:

    • 我已经尝试打印出launchOptions[UIApplicationLaunchOptionsURLKey],但它只显示为零。
    • 嗯,这可能是因为它不是字符串,而是 NSURL.. 如果你在 didFinishLaunching: if let URL = launchOptions?[UIApplicationLaunchOptionsURLKey] 中这样做会怎样? NSURL { //在这里打印你的 URL 值 } ?
    • 不,它不会打印出任何东西。
    【解决方案2】:

    斯威夫特 4:

    我发现,有时应用似乎无法打开 url,这仅仅是因为构建它的 phisic 基础设施所需的时间(特别是如果您使用自定义的视图控制器或转换)。我找到了这个解决方案:

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
             DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
                 // your code
             }
             return true
    }
    

    【讨论】:

      【解决方案3】:

      这听起来好像自定义 URL 设置没有正确设置。

      您的 .plist 文件中肯定有这些设置吗?

      有了这些设置,application 函数肯定会在您的应用启动时被调用。

      更多信息在这里:

      Custom URLs

      【讨论】:

      • 自定义 url 方案已在 info.plist 文件中定义,该方案有效,只是在关闭应用程序时不会调用处理该方案的特定函数。
      • 如果自定义 url 设置不正确,它根本就无法工作,如果应用程序在后台,对吗?虽然这实际上现在正在工作..
      • @Revant: 等等.. 实际问题是什么?当您的应用程序启动或“应用程序关闭”时,“应用程序”功能不会启动?当您关闭应用程序时,它不会被调用....
      • @MikeGledhill 当应用程序处于关闭状态并且我在 safari 中输入 url 方案时,应用程序打开但它不调用 AppDelegate 中定义的函数。
      猜你喜欢
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多