打开iOS应用后,未调用“ continue userActivity:”方法-Firebase动态链接

时间:2019-04-09 05:34:10

标签: ios swift appdelegate firebase-dynamic-links

我已经成功集成了Firebase动态链接,当我单击动态链接时,我的应用程序正在打开。

我面临的问题是从动态链接打开应用程序后,应该调用continue userActivity:方法,但是什么也没发生。

我已经检查了所有可能的东西,但是没有发现问题。

我已经在SO中搜索了此内容,但没有一个答案对我有帮助。

我的代码:

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
}

4 个答案:

答案 0 :(得分:1)

要首先在应用程序中处理通用链接,您必须在应用程序中添加包含受支持URL的授权文件。

为此,请打开Xcode,选择您的项目,转到“功能”,然后找到“关联域”部分。

enter image description here

启用此功能,并为您的应用支持的每个域添加一个带有应用链接前缀的条目:

现在,您必须在AppDelegate文件中实现application(_:continue:restorationHandler :)。当用户单击您支持的链接时,将调用此方法。

答案 1 :(得分:1)

Google的失误。

我不知道他们是否保留文档。是否最新。

我刚刚复制了Google官方Firebase动态链接文档中的代码。

为什么未调用continue userActivity:方法?

原因是(请参阅以下方法的区别)

从Google文档粘贴的副本。 -错误的

  

func应用程序(_应用程序:UIApplication,继续userActivity:NSUserActivity,restoreHandler:@逃逸([ UIUserActivityRestoring ]?)->无效)->布尔{ >      

}

我写了这篇文章(没有从Google文档中粘贴粘贴内容)-更正了

  

func应用程序(_应用程序:UIApplication,继续userActivity:NSUserActivity,restoreHandler:@escaping([ Any ]?)-> Void)-> Bool {      

}

我已经做了大胆的改动。

这就是我尝试了多个小时。盲目地信任Google文档对我来说真的很沮丧:-|

希望这可能对其他人有帮助。

答案 2 :(得分:0)

使用与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) {

}

答案 3 :(得分:0)

您需要检查两次。

  1. 当应用程序。在后台运行,并通过链接打开: 委托方法为:func checkForTransferedTicket(_ userActivity: NSUserActivity) { }

  2. 当应用程序。在后台未运行,并且正在通过链接打开:

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