iOS 应用程序:Firebase 动态链接不适用于最新的 Pod 文件
Posted
技术标签:
【中文标题】iOS 应用程序:Firebase 动态链接不适用于最新的 Pod 文件【英文标题】:iOS Application: Firebase Dynamic Links are not working with latest Pod file 【发布时间】:2020-02-18 05:50:09 【问题描述】:我们将最新的动态链接 Pod 集成到我们的 ios 应用程序中。
每当我们打开 Firebase 的链接时,我们的 Appdelegate 中都不会触发任何功能。 检查我们在 App delegate 中实现的方法
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) (dynamiclink, error) in
if(dynamiclink != nil)
let aStr = dynamiclink!.url!.absoluteString
print("reopen url :\(String(describing: aStr.removingPercentEncoding))")
let decodeUrl = aStr.removingPercentEncoding!
return true
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
print("got link1")
print(" first time url :\(url)")
let aStr = url.absoluteString
print("url :\(String(describing: aStr.removingPercentEncoding))")
let decodeUrl = aStr.removingPercentEncoding!
if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url)
if dynamicLink.url != nil
let aStr = dynamicLink.url!.absoluteString
let decodUrl = aStr.removingPercentEncoding!
return true
我们在应用程序中使用了自定义域,我们也在 info.plist 中添加了它们
<key>FirebaseDynamicLinksCustomDomains</key>
<array>
<string>https://page.google.com/newrequest</string>
</array>
<key>FirebaseAppDelegateProxyEnabled</key>
<string>YES</string>
我们向 AssociatedDomains 添加了一个动态链接 URL,其前缀为应用链接,例如 applinks:page.google.com
【问题讨论】:
看看这个:***.com/a/59765601/2781088这可能对你有帮助。 解决了吗? 您好@MohitKumar,感谢您的回复。我尝试了链接,一切都很好,但它没有获取动态链接详细信息。我需要知道,我们可以在哪里加红长网址。目前它没有调用 Appdelegate 中的任何方法。谢谢 如果***.com/a/59765601/2781088 这解决了您最初的问题,请不要忘记投票。对于上述评论中提到的问题,我已经在下面发布了答案。 您好,我也遇到了问题,之前它可以工作,但突然 dynamiclink!.url 是在 iOS 13 中,AppDelegate 方法将不会调用。将 SceneDelegate 添加到您的项目中。添加
func scene(_ scene: UIScene, continue userActivity: NSUserActivity)
print(userActivity.webpageURL)
我们将得到 userActivity.webpageURL 将是我们的长动态链接。
【讨论】:
点击此链接:medium.com/@fenceguest/…。你的一天会节省谢谢你 嗨,我遇到了同样的错误,如果您有解决方案,请查看下面的链接帮助我 ***.com/q/67019905/11468227【参考方案2】:Swift 5.0 和 iOS 14.0 的答案
对于那些仍在为管理 SceneDelegate 中的深层链接而苦苦挣扎的人来说,这个答案可能会有所帮助。
案例 1:应用正在运行(前台和后台):
首先你应该记住,在 iOS 13 更新之后,深层链接不再由UIApplicationDelegate
管理,这项工作交给了SceneDelegate
。
所以对于第一种情况,您需要添加以下方法来处理用户点击深层链接时的事件
func scene(_ scene: UIScene, continue userActivity: NSUserActivity)
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let url = userActivity.webpageURL,
let host = url.host else
return
DynamicLinks.dynamicLinks().handleUniversalLink(url) dynamicLink, error in
guard error == nil,
let dynamicLink = dynamicLink,
let urlString = dynamicLink.url?.absoluteString else
return
print("Dynamic link host: \(host)")
print("Dyanmic link url: \(urlString)")
// Handle deep links
self.handleDeepLink(urlString: urlString)
print("Dynamic link match type: \(dynamicLink.matchType.rawValue)")
案例 2:应用未运行(Kill 模式):
如果应用程序未运行,则可以在 connectionOptions
的 SceneDelegate
中找到深层链接。所以你需要在willConnectTo(:)
方法中写一段代码来管理Firebase的深层链接。
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)
if let userActivity = connectionOptions.userActivities.first
if let incomingURL = userActivity.webpageURL
_ = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL) (dynamicLink, error) in
guard error == nil else return
if let dynamicLink = dynamicLink
if let urlString = dynamicLink.url?.absoluteString
// Handle deep links
self.handleDeepLink(urlString: urlString)
【讨论】:
哇。我一直在想这么久为什么它不起作用。我知道我完全遵循了他们的文档。谢谢! 嗨,我遇到了同样的错误,如果您有解决方案 ***.com/q/67019905/11468227,请检查下面的链接帮助我【参考方案3】:试试这个:https://***.com/a/59765601/2781088 这可能会解决您最初的 DL 问题,并按照以下代码解决 cmets 中提到的问题。
您可以在以下函数中获取 URL(将这些方法添加到您的 App Delegate 中):
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool
if DynamicLinks.dynamicLinks().shouldHandleDynamicLink(fromCustomSchemeURL: url)
let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url)
self.handleDynamicLink(dynamicLink)
return true
和
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
if let incomingURL = userActivity.webpageURL
print(incomingURL)
let linkHandled = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL) (dynamicLink, error) in
guard error == nil else
print("Found an error! \(error!.localizedDescription)")
return
if let dynamicLink = dynamicLink
self.handleDynamicLink(dynamicLink)
if linkHandled
return true
else
//May be do other things with our incoming URL?
return false
return false
handleDynamicLink 方法:
func handleDynamicLink(_ dynamicLink: DynamicLink?)
guard let dynamicLink = dynamicLink else return
guard let deepLink = dynamicLink.url else return
别忘了添加这个:
希望这能解决您的问题。
【讨论】:
它没有触发任何方法。看看这个github.com/firebase/quickstart-ios/issues/895 您也可以查看此视频以识别问题:youtube.com/watch?v=KLBjAg6HvG0 添加的关联域也很完美,它从带有动态链接前缀的笔记应用程序正确打开到我的应用程序。但如果我打开直接动态链接在控制台中出现错误为“6.17.0 - [Firebase/Analytics][I-ACS023000] Deep Link Web URL query is empty” 试试这个:***.com/a/56483454/2781088 如果这能解决你的问题 嗨,我遇到了同样的错误,如果您有解决方案,请查看下面的链接帮助我 ***.com/q/67019905/11468227以上是关于iOS 应用程序:Firebase 动态链接不适用于最新的 Pod 文件的主要内容,如果未能解决你的问题,请参考以下文章