iOS 上的通用 link 应用程序打开应用程序但不调用处理程序
Universal link on iOS app opens app but doesn't call handler
我有一个通用 link 的应用程序。当我在另一个应用程序中点击 link 时,它会打开我的应用程序(除了在 Safari 中,它会打开网页,但会在顶部显示一个小横幅以在应用程序中打开,点击“打开”会打开我的应用程序)。
我的问题是我的应用程序中没有执行任何代码。
我已经把示例代码从 Apple's documentation:
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
{
// Get URL components from the incoming user activity.
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true) else {
return false
}
// Check for specific URL components that you need.
guard let path = components.path,
let params = components.queryItems else {
return false
}
print("path = \(path)")
if let albumName = params.first(where: { [=12=].name == "albumname" } )?.value,
let photoIndex = params.first(where: { [=12=].name == "index" })?.value {
print("album = \(albumName)")
print("photoIndex = \(photoIndex)")
return true
} else {
print("Either album name or photo index missing")
return false
}
}
我没有场景支持(所以只有 AppDelegate)。
现在我在 AppDelegate 中到处都设置了打印和断点(特别是在上面代码的函数中,以及在“应用程序 handleOpen url”中)。
当我在另一个应用程序中点击 URL 时,它会带到我的应用程序,但唯一执行的方法是 applicationDidBecomeActive.
换句话说,我无法从 URL 获取任何引导用户访问我的应用程序的信息...知道为什么吗?
这似乎是一个 apple bug。
获取调用方法的解决方案是在它之前添加:
@objc(application:continueUserActivity:restorationHandler:)
我有一个通用 link 的应用程序。当我在另一个应用程序中点击 link 时,它会打开我的应用程序(除了在 Safari 中,它会打开网页,但会在顶部显示一个小横幅以在应用程序中打开,点击“打开”会打开我的应用程序)。
我的问题是我的应用程序中没有执行任何代码。
我已经把示例代码从 Apple's documentation:
func application(_ application: UIApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
{
// Get URL components from the incoming user activity.
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true) else {
return false
}
// Check for specific URL components that you need.
guard let path = components.path,
let params = components.queryItems else {
return false
}
print("path = \(path)")
if let albumName = params.first(where: { [=12=].name == "albumname" } )?.value,
let photoIndex = params.first(where: { [=12=].name == "index" })?.value {
print("album = \(albumName)")
print("photoIndex = \(photoIndex)")
return true
} else {
print("Either album name or photo index missing")
return false
}
}
我没有场景支持(所以只有 AppDelegate)。
现在我在 AppDelegate 中到处都设置了打印和断点(特别是在上面代码的函数中,以及在“应用程序 handleOpen url”中)。 当我在另一个应用程序中点击 URL 时,它会带到我的应用程序,但唯一执行的方法是 applicationDidBecomeActive.
换句话说,我无法从 URL 获取任何引导用户访问我的应用程序的信息...知道为什么吗?
这似乎是一个 apple bug。
获取调用方法的解决方案是在它之前添加:
@objc(application:continueUserActivity:restorationHandler:)