iOS,通用链接,Swift。 continueUserActivity 不调用

iOS, Universal links, Swift. continueUserActivity not calling

我正在为我们的 iOS 应用开发通用 link 的实施。

这是我的一小块 AppDelegate:

private func application(_ application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    DeepLinkHelpers.handleUniversalLink(url.absoluteString)
    return true
}

private func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
    DeepLinkHelpers.handleUniversalLink(userActivity.webpageURL?.absoluteString)
    return true
}

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    signalRConnector.launch()

    NotificationCenter.default.addObserver(self, selector: #selector(AppDelegate.processRestartSignalRNotification(_:)), name: NSNotification.Name(rawValue: "restartSignalR"), object: nil)

    NotificationCenter.default.addObserver(self,                            selector: #selector(AppDelegate.reachabilityChanged(_:)),
                                           name: ReachabilityChangedNotification,
                                           object: reachability)

    do {
        try reachability.startNotifier()
    } catch {
        Logger.save(text: "Unable to start notifier")
    }
    return true
}

我已经处理了通用 links 集成的所有其他步骤:

  1. 在我们的 Web 应用程序中发布了 apple-app-site-association 文件
  2. 已在 developers.apple.com
  3. 上启用关联域功能
  4. xcode
  5. 中的指定关联域
  6. 已检查权利文件的目标成员资格
  7. 说 xcode 等待应用程序手动启动(而不是 自动启动)

我正在做以下调试:

  1. 正在连接 ipad
  2. 开始项目 xcode
  3. 在 ipad 中打开日历并单击某些事件中包含的 link。 Link 具有以下格式:app.domain.com/#/123456789
  4. Ipad 打开应用程序但 continueUserActivity 没有调用,我不能 处理来自 url 的代码,用于导航到应用程序中的确切状态。

根据文档,应该执行 continueUserActivity。当应用程序在后台 运行 和应用程序不在 运行.

时,它都不会执行

提前致谢!任何帮助表示赞赏。

我怀疑这是因为您将 continueUserActivity 函数标记为 private。我从来没有见过,事实上 Swift 3 在我尝试时实际上给出了一个错误。似乎没有任何以这种方式构建的代码示例 on all of GitHub

我建议删除 private 范围。

从 iOS 12、Swift 4.2 和 Xcode 10 开始,Apple 再次将方法签名(restorationHandler 类型)更改为

 func application(_ application: UIApplication, continue userActivity: 
NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {

在 2019 年,这对我有帮助(来自本指南:https://medium.com/@abhimuralidharan/universal-links-in-ios-79c4ee038272):

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
    print("Continue User Activity called: ")
    if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        let url = userActivity.webpageURL!
        print(url.absoluteString)
        //handle url and open whatever page you want to open.
    }
    return true
}

在 ios 13 之后你应该使用 ScenDelegate:

//when app is running

func scene(_ scene: UIScene, continue userActivity: NSUserActivity)

//when app is not running 
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)