嗨,我正在使用UniversalLink的iOS应用程序.
Universal Link工作正常,但没有调用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中,此错误在控制台中打印。
无法结束后台任务:不存在标识符为1(0x1)的后台任务,或者该任务可能已结束。请在UIApplicationEndBackgroundTaskError()中中断以进行调试。
因此,这可能是问题的原因。
我真的很感激有人能帮我
4条答案
按热度按时间unguejic1#
我在X1 M0 N1 X和通用链接方面也遇到了类似的问题,在应用程序刚刚推出时,我无法访问NSUSerActivity(在这种情况下,iOS 13中的后台NFC阅读)。
正如@Jan的回答中提到的,continue userActivity现在位于
SceneDelegate
中。如果应用程序正在运行或处于后台(即关闭),则通用链接将激发
scene(_:continue:)
委托。如果应用程序不在后台,通用链接将不会从
scene(_:continue:)
代理中启动,而是从scene(_:willConnectTo:options:)
中启动。o4tp2gmn2#
在我的例子中,我在Xcode 11上启动了一个全新的项目,它使用
SceneDelegate
和AppDelegate
看起来UniversalLinks(可能还有其他几个API)在
SceneDelegate
上使用了此回调:在
AppDelegate
上不使用此回调:一旦我在
SceneDelegate
上实现了一个,一切又开始按预期工作了。我还没有尝试过,但我假设如果你的目标是iOS 12和更低版本,你可能需要实现这两种方法。希望这能帮上忙
qacovj5a3#
对于SwiftUI应用程序,现在有另一种方法来处理通用链接或任何url,假设用户已经安装了该应用程序。
你可以简单地在你的主应用结构中的视图上使用
.onOpenURL()
修饰符。和实现您自己的功能,例如:
来处理你想要的通用链接。
对于Differed深度链接,即处理安装前单击的链接,您仍需要实现SceneDelegate方法。
7gcisfzg4#
将此函数添加到SceneDelegate类中
函数场景(_场景:UIScene,继续用户活动:用户活动){如果设url =用户活动.网页URL {打印(url)}}