Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我如何知道应用程序是否是通过AppDelegate';s没有使用选项完成启动_Ios_Swift_Firebase_Appdelegate_Deeplink - Fatal编程技术网

Ios 我如何知道应用程序是否是通过AppDelegate';s没有使用选项完成启动

Ios 我如何知道应用程序是否是通过AppDelegate';s没有使用选项完成启动,ios,swift,firebase,appdelegate,deeplink,Ios,Swift,Firebase,Appdelegate,Deeplink,我们正在将Firebase Deeplinks添加到我们的IOS项目中,以便可以通过deeplink启动该应用程序 到目前为止,deeplink功能本身运行良好,默认的应用程序启动程序也是如此。但让这两种新技术同时发挥作用让我有些头疼 我试图实现的是,通过查看此代码片段,get可以明显看出 func application(_:didFinishLaunchingWithOptions:) { FirebaseApp.configure() if "deeplink" {

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

到目前为止,deeplink功能本身运行良好,默认的应用程序启动程序也是如此。但让这两种新技术同时发挥作用让我有些头疼

我试图实现的是,通过查看此代码片段,get可以明显看出

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

   if "deeplink" {
      return true 
   }
   defaultAppLaunch() // no deeplink
   return true 
}
如果存在deeplink,则调用以下appDelegate函数之一:

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

func application(:openURL:options:) {
    handleDeeplink()
    return true  
}
那么,我如何知道在应用程序中(u:didfishlaunchingwithoptions:)是否可以调用defaultAppLaunch()

我知道中有launchOptions-参数,但在我的情况下,它总是nil,至少在通过XCode运行应用程序时是这样。Firebase文档中也没有提到Firebase Deeplinks将设置的启动选项


非常感谢您的帮助

我在处理iOS动态链接时引用了Firebase文档:

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

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


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

我在处理iOS动态链接时参考了Firebase文档:

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

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

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

TL;博士 您无法知道您的应用程序是通过app Delegate DidFinishLaunching使用deeplinks打开的。


解释: 无论应用程序是正常打开还是通过deeplinks打开,应用程序代理确实完成启动始终被调用。所以你不能通过应用程序代理知道

相反,如果调用以下委托函数,您可以知道应用程序是通过deeplinks打开的

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功能

TL;博士 您无法知道您的应用程序是通过app Delegate DidFinishLaunching使用deeplinks打开的。


解释: 无论应用程序是正常打开还是通过deeplinks打开,应用程序代理确实完成启动始终被调用。所以你不能通过应用程序代理知道

相反,如果调用以下委托函数,您可以知道应用程序是通过deeplinks打开的

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功能

谢谢。也许我不清楚我的问题。我的深度链接工作正常,这根本没有问题。我的问题是,在调用您和文档提供的方法之前,会先调用I
appDelegate(uu2;:didFinishLaunchingWithOptions)
。在
appDelegate(uu2;:didFinishLaunchingWithOptions)
中,我想知道应用程序是否通过深度链接启动,因为如果不是,我可以使用默认例程(无深度链接)启动应用程序。谢谢。也许我不清楚我的问题。我的深度链接工作正常,这根本没有问题。我的问题是,在调用您和文档提供的方法之前,会先调用I
appDelegate(uu2;:didFinishLaunchingWithOptions)
。在
appDelegate(uquot:didFinishLaunchingWithOptions)
中,我想知道该应用程序是否通过deeplink启动,因为如果不是,我可以使用默认例程(无deeplink)启动该应用程序。这方面你运气好吗?我遇到了同样的问题,无法找到一种方法来同步知道应用程序是否在没有动态链接的情况下打开。不太清楚,为什么没有其他人会遇到这个问题。我最终找到了一个解决方法,对此我并不自豪。我添加了一个启动屏幕(做一些愚蠢的动画,几秒钟后自动隐藏),作为一个幕布。所以基本上我会延迟默认的appstart,直到95%确定不会有dynamicLink例程出现)。我对它不满意,但再也找不到更好的解决方案了。嗯,还必须实施一个变通办法——虽然幸运的是我的问题与分析跟踪相关,而不是影响UI,所以我不必推迟UI显示。让我们期待未来API的改进。你在这方面有什么运气吗?我遇到了同样的问题,无法找到一种方法来同步知道应用程序是否在没有动态链接的情况下打开。不太清楚,为什么没有其他人会遇到这个问题。我最终找到了一个解决方法,对此我并不自豪。我添加了一个启动屏幕(做一些愚蠢的动画,几秒钟后自动隐藏),作为一个幕布。所以基本上我会延迟默认的appstart,直到95%确定不会有dynamicLink例程出现)。我对它不满意,但再也找不到更好的解决方案了。嗯,还必须实施一个变通办法——尽管幸运的是,我的问题是分析跟踪关系
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
}