Как узнать, было ли приложение запущено через Firebase-Deeplink (Динамические ссылки) в didFinishLaunchingWithOptions AppDelegate - PullRequest
0 голосов
/ 26 сентября 2018

Мы добавляем Firebase-Deeplinks в наш IOS-проект, чтобы приложение можно было запустить с помощью deeplink.

Пока что сама функция deeplink работает нормально, как и стандартная процедура запуска приложения.Но то, что обе функции startRoutines работают бок о бок, вызывает у меня некоторую головную боль.

То, чего я пытаюсь добиться, становится очевидным при взгляде на этот фрагмент кода.

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

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

Если есть один из этих диплинковВызов appDelegate-functions:

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

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

Итак, как мне узнать в приложении (_: didFinishLaunchingWithOptions :), если я могу вызвать defaultAppLaunch () ?

Я знаю, что есть launchOptions -Argument, но в моем случае это всегда nil , по крайней мере, при запуске приложения через XCode.А также в документации по Firebase ничего не говорится о параметрах launchOptions, устанавливаемых Firebase-Deeplinks.

Помощь высоко ценится.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

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
}

и вы должны обрабатывать функциональность глубоких ссылок в той же функции

0 голосов
/ 26 сентября 2018

Я ссылаюсь на документы Firebase при обработке динамических ссылок для iOS: Документы Firebase для получения динамических ссылок

Далее в приложении:continueUserActivity: restoreHandler: метод, обрабатывает ссылки, полученные как Universal Links, когда приложение уже установлено (на 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
}

Наконец, в приложении: 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 Simulator, возможно, вы также можете попробовать его на тестовом устройстве!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...