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 的处理方式不同,但显然是不是一回事。
我们的应用程序使用通用链接并且 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 的处理方式不同,但显然是不是一回事。