簡體   English   中英

我如何知道應用程序是否通過AppDelegate的didFinishLaunchingWithOptions上的Firebase-Deeplink(動態鏈接)啟動

[英]How do I know if app was launched via Firebase-Deeplink (Dynamic Links) at AppDelegate's didFinishLaunchingWithOptions

我們正在將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 -Argument,但就我而言,它始終為nil ,至少在通過XCode運行應用程序時如此。 而且,Firebase文檔對由Firebase-Deeplinks設置的launchOptions沒有任何說明。

非常感謝您的幫助。

我在處理iOS的動態鏈接時引用了Firebase文檔: 用於接收動態鏈接的Firebase文檔

接下來,在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及更高版本)方法中,處理通過應用程序的自定義URL方案接收的鏈接。 當您的應用在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模擬器,也許您也可以在測試設備上嘗試它!)

TL; DR

您不知道您的應用是通過App Delegate 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
}

並且您應該在同一函數中處理Deeplinks功能

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM