繁体   English   中英

iOS 应用程序:Firebase 动态链接不适用于最新的 Pod 文件

[英]iOS Application: Firebase Dynamic Links are not working with latest Pod file

我们将最新的动态链接 Pod 集成到我们的 iOS 应用程序中。

每当我们打开 firebase 的链接时,我们的 Appdelegate 中都没有触发任何功能。 检查我们在 App 委托中实现的方法

    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等应用链接前缀

在 iOS 13 中,不会调用 AppDelegate 方法。 将 SceneDelegate 添加到您的项目中。 添加func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { print(userActivity.webpageURL) }

我们将得到 userActivity.webpageURL 将是我们的长动态链接。

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

如果应用程序未运行,则SceneDelegate connectionOptions中提供了深层链接。 因此,您需要编写代码来管理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)
                        }
                    }
                }
            }
        }
    }

试试这个: https : //stackoverflow.com/a/59765601/2781088这可能会解决您最初的 DL 问题,并按照以下代码解决评论中提到的问题。

您可以在以下函数中获取 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 }
    }

不要忘记添加这个: 在此处输入图片说明

希望能解决你的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM