我如何知道应用程序是否通过AppDelegate的didFinishLaunchingWithOptions上的Firebase-Deeplink(动态链接)启动

时间:2018-09-26 17:12:46

标签: ios swift firebase appdelegate deeplink

我们正在将Firebase-Deeplinks添加到我们的IOS项目中,以便可以通过Deeplink启动该应用程序。

到目前为止,deeplink功能本身可以正常运行,默认的应用启动例程也可以正常运行。但是让两个startRoutines并肩工作会使我有些头疼。

在这段代码中,我想要达到的目的很明显。

func application(_:didFinishLaunchingWithOptions:) {
   FirebaseApp.configure()

   if "deeplink" {
      return true 
   }
   defaultAppLaunch() // no deeplink
   return true 
}

如果存在深层链接,则这些appDelegate函数之一称为:

func application(:continueUserActivity:restorationHandler:) {
    handleDeeplink()
    return true
}

func application(:openURL:options:) {
    handleDeeplink()
    return true  
}

那么我如何知道application(_:didFinishLaunchingWithOptions :)是否可以调用 defaultAppLaunch()

我知道其中包含 launchOptions 参数,但就我而言,它始终为 nil ,至少在通过XCode运行应用程序时如此。而且,Firebase文档对由Firebase-Deeplinks设置的launchOptions没有任何说明。

我们非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我在处理iOS的动态链接时引用了Firebase文档: Firebase docs for receiving dynamic links

  

接下来,在application:continueUserActivity:restorationHandler中:   方法,当应用程序处于运行状态时,处理作为通用链接接收的链接   已安装(在iOS 9及更高版本上):

func application(_ application: UIApplication, continue userActivity: NSUserActivity,
                 restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
  let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
    // ...
  }

  return handled
}
  

最后,在application:openURL:sourceApplication:annotation:(iOS   8及更高版本)和application:openURL:options:(iOS 9及更高版本)方法,   处理通过您应用的自定义网址方案接收到的链接。这些   当您的应用在iOS 8及更高版本上收到链接时,将调用方法,   并且在安装后首次打开您的应用时   任何版本的iOS。

@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {
  return application(app, open: url,
                     sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String,
                     annotation: "")
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
  if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
    // Handle the deep link. For example, show the deep-linked content or
    // apply a promotional offer to the user's account.
    // ...
    return true
  }
  return false
}

但是您确实提到了该应用程序目前仅在Xcode上运行(我猜是iOS模拟器,也许您也可以在测试设备上尝试它!)

答案 1 :(得分:0)

TL; DR

  

您不知道您的应用是通过应用委托DidFinishLaunching通过深层链接打开的。


说明:

始终始终调用

确实完成启动的应用程序委托,无论应用程序是正常打开还是通过深层链接打开。因此您无法通过应用委托来了解

相反,如果调用以下委托函数,则可以知道应用是通过深层链接打开的。

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
  if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
    // Handle the deep link. For example, show the deep-linked content or
    // apply a promotional offer to the user's account.
    // ...
    return true
  }
  return false
}

并且您应该在同一功能中处理深度链接功能