SwiftUI 通用链接不适用于 NFC

SwiftUI Universal Links not working for NFC

我们的应用程序使用通用链接并且 AASA 文件似乎工作正常,因为电子邮件中的超链接以及二维码 URL 都可以启动该应用程序。它们也会导致调用 SwiftUI .onOpenURL(perform:) 函数。

NFC 让事情变得有点混乱。 URL 被识别并且应用程序启动,表明该问题与 AASA 无关。但是,不会调用 onOpenURL 函数。谁能告诉我如何处理来自 NFC 的通用链接?理想情况下,我想让它保持纯 SwiftUI,但如果我需要使用 AppDelegate,那就这样吧。

SwiftUI 主文件中的代码是:

import SwiftUI

@main
struct MyApp: App {
    
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
    var body: some Scene {
            WindowGroup {
                ContentView()
                    .onOpenURL(perform: { url in
                        print("url opened:\(url)")
                        // prints when opened from URL in email, 
                        // Notes or QR code, but not when opened 
                        // from URL embedded in NFC NDEF
                    })
            }
        
    }
}

我也试过在 AppDelegate 中定义 application(_:continue:restorationHandler:) 函数,但也没有调用它。

感谢您的帮助。

如果它能帮助遇到相同问题的任何人,我通过为应用程序注册 URL 模式然后使用 .onOpenURL(perform:).

解决了这个问题

这似乎是一种奇怪的方式,但它按要求工作,真是快乐的日子!

解决方案是在合适的视图上添加一个继续用户 activity 处理程序:

.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { userActivity in
        print("Continue activity \(userActivity)")
        guard let url = userActivity.webpageURL else {
                return
        }
        print("User wants to open URL: \(url)")
        // TODO same handling as done in onOpenURL()
}

不清楚为什么在 Safari 中通过点击 link 接收到的同一个通用 Link 与从标签读取的同一个 link 的处理方式不同,但显然是不是一回事。