嗨,我正在使用UniversalLink制作ios应用。
通用链接可以正常工作,但是不调用callback method。
我的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()进行调试。
所以,这可能是问题的原因。
我真的很感谢别人的帮助
答案 0 :(得分:7)
就我而言,我在Xcode 11上启动了一个全新的项目,该项目使用SceneDelegate
和AppDelegate
类似UniversalLinks(可能还有其他几个API)的方法在SceneDelegate
上使用此回调:
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { }
代替AppDelegate
上的回调:
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { }
一旦我在SceneDelegate
上实现了这一目标,一切就会再次按预期工作。我还没有尝试过,但是我假设如果您针对的是iOS 12及更低版本,则可能需要实现这两种方法。
希望这会有所帮助
答案 1 :(得分:0)
我在SceneDelegate
和通用链接中遇到了类似的问题,在应用程序刚启动时(在这种情况下,ios 13中的背景NFC读取),我无法进入NSUserActivity。
如@Jan的答案中所述,继续SceneDelegate
中有userActivity。
如果应用正在运行或在后台运行,即关闭后,通用链接将触发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")
}
}