我们正在将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没有任何说明。
我们非常感谢您的帮助。
答案 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)
您不知道您的应用是通过应用委托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
}
并且您应该在同一功能中处理深度链接功能