在Swift中处理来自Firebase的动态链接

1dkrff03  于 2023-11-16  发布在  Swift
关注(0)|答案(2)|浏览(117)

我在Firebase中做了一个动态链接,当我点击它时,我的iOS应用程序。问题是,我无法打印有关链接的信息。
我在AppDelegate文件中使用这个函数来处理动态链接:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        print("Handeling dynamic link")
        if let incomingURL = userActivity.webpageURL {
            print("Incoming URL is \(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.handleIncomingDynamicLink(dynamicLink)
                }
            }
            if linkHandled {
                return true
            } else {
                // Maybe do other things with our incoming url
                return false
            }
        }
        return false
    }

字符串
当我点击一个动态链接并打开应用程序时,没有一个print语句被打印到控制台。
似乎这个功能从来没有被使用过。
DynamicLink函数是:

func handleIncomingDynamicLink(_ dynamicLink: DynamicLink) {
        guard let url = dynamicLink.url else {
            print("That is weird. My dynamic link object has no url")
            return
        }
        print("Your incoming link parameter is \(url.absoluteString)")
}


我想打印有关URL的信息,以便我可以调试并使用URL中的信息重定向到应用程序中的页面。
当我测试这个的时候,我在连接到我的mac的iPhone上运行这个应用程序,我没有在iOS模拟器上运行它。

bihw5rsg

bihw5rsg1#

你的UIApplication委托方法中的代码看起来很好,我看到的唯一区别是,你的委托方法和我的委托方法相比,我在最后一行返回true,而你返回false。
顺便说一下,在UIApplication委托方法中放置断点,如果你到达委托方法的第一行,请告诉我。你能在handleIncomingDynamicLink()方法中找到断点吗?

另外,尝试在applicationDidBecomeActive中添加以下内容:

func applicationDidBecomeActive(_ application: UIApplication) {
    guard let url = self.launchURL else { return }
    self.launchURL = nil
    DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {     // wait to init. notifs.
        DynamicLinks.dynamicLinks().handleUniversalLink(url) { (dynamiclink, error) in
            if let dynamiclink = dynamiclink {
                self.handleIncomingDynamicLink(dynamiclink)
            }
        }
    })
}

字符串

并添加此内容:

func application(_ app: UIApplication,
                      open url: URL,
                      options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {                      
    print("RECEIVED A URL THROUGH A CUSTOM SCHEME: \(url.absoluteString)")
    if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
        self.handleIncomingDynamicLink(dynamicLink)
        return true
    } else { // Maybe handle Google or Facebook sign-in here
        return false
    }
}

9rbhqvlz

9rbhqvlz2#

不需要麻烦。不需要使用AppDelegate或SceneDelegate。只需使用此代码

@main
struct MyApplication: App {
  var body: some Scene {
    WindowGroup {
      ContentView()
        .onOpenURL { url in
          // handle the URL that must be opened
        }
    }
  }
}

字符串
Enjoy:)

相关问题