打开后 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) {

}

您需要检查两次。

  1. 当应用程序。 运行 在后台,从 Link 打开: 委托方法是:func checkForTransferedTicket(_ userActivity: NSUserActivity) { }

  2. 当应用程序。在后台不 运行 并且从 Link:

    打开
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession,options connectionOptions: UIScene.ConnectionOptions) { if let userActivity = connectionOptions.userActivities.first {
                     print(userActivity)
                 }
         }