如何在打开动态 link 时重定向到某个屏幕?
How to redirect to a certain screen when opening a dynamic link?
我正在开发一个可以接收 Firebase 的 Dynamic Link 的应用程序。我想要的是当用户单击动态 Link 时,应用程序将其重定向到某个 UIViewController
。所以我的 AppDelegate.swift
文件中有一个看起来像这样的代码:
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
//return GIDSignIn.sharedInstance().handle(url)
return application(app, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String, annotation: "")
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
// On progress
if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
print("open url = open dynamic link activity")
print("url = \(dynamicLink)")
let destinationVC = UIStoryboard(name: "DynamicLink", bundle: nil).instantiateViewController(withIdentifier: "DynamicLinkView") as? DynamicLinkVC
self.window?.rootViewController?.navigationController?.pushViewController(destinationVC!, animated: true)
} else {
print("open url = none")
}
return GIDSignIn.sharedInstance().handle(url)
}
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// On progress
let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
print("dynamic link = \(dynamiclink)")
}
if handled {
let destinationVC = UIStoryboard(name: "DynamicLink", bundle: nil).instantiateViewController(withIdentifier: "DynamicLinkView") as? DynamicLinkVC
self.window?.rootViewController?.navigationController?.pushViewController(destinationVC!, animated: true)
}
return handled
}
所以,当我单击 link 时发生了什么,应用程序立即打开,但它没有重定向到我想要的 UIViewController
(在本例中为 destinationVC
)。它像往常一样直接进入了登录页面。但是在debug区,link是这样的=
dynamic link = Optional(https://xxxx], match type: unique, minimumAppVersion: N/A, match message: (null)>)
不幸的是,当应用程序不是由 Xcode 构建时,我无法记录日志消息。
我对此很困惑,我的代码有什么问题吗?我是 iOS 开发的新手,所以我不确定我哪里做错了。如果您需要更多信息,请随时询问,我会提供给您。任何帮助,将不胜感激。谢谢。
如果您的其余代码工作正常,而您只是在导航到另一个视图控制器时遇到问题,那么此解决方案将适合您。
如果您想打开特定的 ViewController,同时单击动态 link,然后更新您在下面的 restorationHandler
中编写的代码更新后的代码将帮助您 redirect/navigate 到特定的 View Controller
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// On progress
let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
print("dynamic link = \(dynamiclink)")
}
if handled {
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "DynamicLink", bundle: nil)
if let initialViewController : UIViewController = (mainStoryboardIpad.instantiateViewController(withIdentifier: "DynamicLinkView") as? DynamicLinkVC) {
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
}
return handled
}
希望这能解决您的问题。
我正在开发一个可以接收 Firebase 的 Dynamic Link 的应用程序。我想要的是当用户单击动态 Link 时,应用程序将其重定向到某个 UIViewController
。所以我的 AppDelegate.swift
文件中有一个看起来像这样的代码:
@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any]) -> Bool {
//return GIDSignIn.sharedInstance().handle(url)
return application(app, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String, annotation: "")
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
// On progress
if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
print("open url = open dynamic link activity")
print("url = \(dynamicLink)")
let destinationVC = UIStoryboard(name: "DynamicLink", bundle: nil).instantiateViewController(withIdentifier: "DynamicLinkView") as? DynamicLinkVC
self.window?.rootViewController?.navigationController?.pushViewController(destinationVC!, animated: true)
} else {
print("open url = none")
}
return GIDSignIn.sharedInstance().handle(url)
}
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// On progress
let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
print("dynamic link = \(dynamiclink)")
}
if handled {
let destinationVC = UIStoryboard(name: "DynamicLink", bundle: nil).instantiateViewController(withIdentifier: "DynamicLinkView") as? DynamicLinkVC
self.window?.rootViewController?.navigationController?.pushViewController(destinationVC!, animated: true)
}
return handled
}
所以,当我单击 link 时发生了什么,应用程序立即打开,但它没有重定向到我想要的 UIViewController
(在本例中为 destinationVC
)。它像往常一样直接进入了登录页面。但是在debug区,link是这样的=
dynamic link = Optional(https://xxxx], match type: unique, minimumAppVersion: N/A, match message: (null)>)
不幸的是,当应用程序不是由 Xcode 构建时,我无法记录日志消息。
我对此很困惑,我的代码有什么问题吗?我是 iOS 开发的新手,所以我不确定我哪里做错了。如果您需要更多信息,请随时询问,我会提供给您。任何帮助,将不胜感激。谢谢。
如果您的其余代码工作正常,而您只是在导航到另一个视图控制器时遇到问题,那么此解决方案将适合您。
如果您想打开特定的 ViewController,同时单击动态 link,然后更新您在下面的 restorationHandler
中编写的代码更新后的代码将帮助您 redirect/navigate 到特定的 View Controller
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// On progress
let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
print("dynamic link = \(dynamiclink)")
}
if handled {
let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "DynamicLink", bundle: nil)
if let initialViewController : UIViewController = (mainStoryboardIpad.instantiateViewController(withIdentifier: "DynamicLinkView") as? DynamicLinkVC) {
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = initialViewController
self.window?.makeKeyAndVisible()
}
return handled
}
希望这能解决您的问题。