首页 > 解决方案 > ios 13 中未调用 application(...continue userActivity...) 方法

问题描述

嗨,我正在使用 UniversalLink 制作 ios 应用程序。

通用链接工作正常,但未调用回调方法

我的 AppDelegate.swift 在下面。

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }


    func application(_ application: UIApplication,
                     willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        return true
    }

    // this method not called!!
    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        print("called")
        return true
    }
}

该方法在 iOS 12 模拟器中调用。

因此,该问题仅在 iOS 13 中出现。

仅在 iOS13 中,此错误会在控制台中打印。

无法结束 BackgroundTask:不存在标识符为 1 (0x1) 的后台任务,或者它可能已经结束。中断 UIApplicationEndBackgroundTaskError() 进行调试。

所以,这可能是问题的原因。

我真的很感谢有人帮助

标签: iosswiftios13

解决方案


我有一个类似的问题SceneDelegate和通用链接,当应用程序刚刚启动时我无法访问 NSUserActivity(在这种情况下,iOS 13 中的背景 NFC 读取)。

正如@Jan 的回答中提到的,继续 userActivity 现在位于SceneDelegate.

如果应用程序正在运行或在后台运行,即。关闭,通用链接将触发scene(_:continue:)委托。

如果应用程序不在后台,则不会从scene(_:continue:)委托中启动通用链接。相反,NSUserActivity将从scene(_:willConnectTo:options:). 例如。

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    if let userActivity = connectionOptions.userActivities.first {
        debugPrint("got user activity")
    }
}

推荐阅读