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 是 。谁能帮忙? 【参考方案1】:

在 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 模式):

如果应用程序未运行,则可以在 connectionOptionsSceneDelegate 中找到深层链接。所以你需要在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 文件的主要内容,如果未能解决你的问题,请参考以下文章

firebase 动态链接是不是适用于 PWA 应用程序?

Firebase 动态链接仅适用于模拟器 |扑

项目中多个 iOS 应用的 Firebase 动态链接

未启动应用程序时 Firebase 动态链接不起作用

如何在 Prod for iOS 中测试/验证 Firebase 动态链接推荐?

如何处理 firebase 动态链接的生命周期? (iOS)