SwiftUI 通用链接不适用于 NFC

one*_*uan 3 nfc swift swiftui

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

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
                    })
            }
        
    }
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的帮助。

小智 8

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

.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()
}
Run Code Online (Sandbox Code Playgroud)

不清楚为什么通过点击 Safari 中的链接收到的相同通用链接应该与从标签读取的相同链接进行不同的处理,但显然这不是同一件事。