![](/img/trans.png)
[英]Delaying openURL when app launched via remote push through didFinishLaunchingWithOptions
[英]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模擬器,也許您也可以在測試設備上嘗試它!)
您不知道您的應用是通過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.