打开后 iOS 应用 "continue userActivity:" 方法未被调用 - Firebase 动态 link
After opening iOS app "continue userActivity:" method isn't called - Firebase dynamic link
我已成功集成 Firebase 动态 link,当我点击动态 link 时,我的应用程序正在打开。
我面临的问题是从动态 links 打开应用程序后,应该调用 continue userActivity:
方法,但没有任何反应。
我检查了所有可能的东西,但没有发现问题。
我已经在 SO 中搜索了这个,但是 none 的答案对我有帮助。
我的代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
GIDSignIn.sharedInstance().clientID = kGoogleSignInClientId
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
// DynamicLinks.performDiagnostics(completion: nil)
FirebaseApp.configure()
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if url.absoluteString.contains(kFBAppId) {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
print(dynamicLink.url ?? URL(string: "test") as Any)
return true
}
return GIDSignIn.sharedInstance().handle(url, sourceApplication: options[.sourceApplication] as? String, annotation: options[.annotation])
}
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
//This method is not getting called
}
我不知道他们是否保留了文档。是否最新。
我刚刚从 Google 的官方 Firebase 动态 link 文档中复制粘贴了代码。
为什么 continue userActivity:
方法没有被调用?
原因是(看下面方法的区别)
复制粘贴自 google 文档。 - 错了
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
}
我写了这个(没有从 google 文档复制粘贴。)- 正确一个
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
}
我加粗了区别。
这就是我尝试了好几个小时的方法。盲目相信 google 医生真的很令人沮丧。:-|
希望这对其他人有所帮助。
除了 AppDelegate.swift 之外还使用单独 SceneDelegate.swift 的人的附加答案:
AppDelegate 中的此方法 >
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == CSSearchableItemActionType {
}
现在在 SceneDelegate 中 >
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
}
您需要检查两次。
当应用程序。 运行 在后台,从 Link 打开:
委托方法是:func checkForTransferedTicket(_ userActivity: NSUserActivity) { }
当应用程序。在后台不 运行 并且从 Link:
打开
func scene(_ scene: UIScene, willConnectTo session: UISceneSession,options connectionOptions: UIScene.ConnectionOptions) { if let userActivity = connectionOptions.userActivities.first {
print(userActivity)
}
}
我已成功集成 Firebase 动态 link,当我点击动态 link 时,我的应用程序正在打开。
我面临的问题是从动态 links 打开应用程序后,应该调用 continue userActivity:
方法,但没有任何反应。
我检查了所有可能的东西,但没有发现问题。
我已经在 SO 中搜索了这个,但是 none 的答案对我有帮助。
我的代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
GIDSignIn.sharedInstance().clientID = kGoogleSignInClientId
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
// DynamicLinks.performDiagnostics(completion: nil)
FirebaseApp.configure()
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
if url.absoluteString.contains(kFBAppId) {
return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options)
}
if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
print(dynamicLink.url ?? URL(string: "test") as Any)
return true
}
return GIDSignIn.sharedInstance().handle(url, sourceApplication: options[.sourceApplication] as? String, annotation: options[.annotation])
}
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
//This method is not getting called
}
我不知道他们是否保留了文档。是否最新。
我刚刚从 Google 的官方 Firebase 动态 link 文档中复制粘贴了代码。
为什么 continue userActivity:
方法没有被调用?
原因是(看下面方法的区别)
复制粘贴自 google 文档。 - 错了
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
}
我写了这个(没有从 google 文档复制粘贴。)- 正确一个
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
}
我加粗了区别。
这就是我尝试了好几个小时的方法。盲目相信 google 医生真的很令人沮丧。:-|
希望这对其他人有所帮助。
除了 AppDelegate.swift 之外还使用单独 SceneDelegate.swift 的人的附加答案: AppDelegate 中的此方法 >
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == CSSearchableItemActionType {
}
现在在 SceneDelegate 中 >
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
}
您需要检查两次。
当应用程序。 运行 在后台,从 Link 打开: 委托方法是:
func checkForTransferedTicket(_ userActivity: NSUserActivity) { }
当应用程序。在后台不 运行 并且从 Link:
打开func scene(_ scene: UIScene, willConnectTo session: UISceneSession,options connectionOptions: UIScene.ConnectionOptions) { if let userActivity = connectionOptions.userActivities.first { print(userActivity) } }