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 集成的所有其他步骤:
- 在我们的 Web 应用程序中发布了 apple-app-site-association 文件
- 已在 developers.apple.com
上启用关联域功能
- xcode
中的指定关联域
- 已检查权利文件的目标成员资格
- 说 xcode 等待应用程序手动启动(而不是
自动启动)
我正在做以下调试:
- 正在连接 ipad
- 开始项目 xcode
- 在 ipad 中打开日历并单击某些事件中包含的 link。
Link 具有以下格式:app.domain.com/#/123456789
- 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)
我正在为我们的 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 集成的所有其他步骤:
- 在我们的 Web 应用程序中发布了 apple-app-site-association 文件
- 已在 developers.apple.com 上启用关联域功能
- xcode 中的指定关联域
- 已检查权利文件的目标成员资格
- 说 xcode 等待应用程序手动启动(而不是 自动启动)
我正在做以下调试:
- 正在连接 ipad
- 开始项目 xcode
- 在 ipad 中打开日历并单击某些事件中包含的 link。 Link 具有以下格式:app.domain.com/#/123456789
- 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)