macos - 在 macOS 上的 SwiftUI 中打开新窗口时如何验证深层链接?
问题描述
TLDR:如何区分应用程序内部发送的链接和源自应用程序外部的链接?
细节:
如果 SwiftUI 应用程序有多个窗口(场景),则可以通过此处解释的深层链接以编程方式打开一个窗口。
上下文数据可以包含在链接中。例如图书馆应用程序中的图书 ID。
fancyLibraryApp:viewer/book/42
将以下修饰符添加到您的视图以处理此 url 并查看一本书。
var body: some Scene
{
Text("Title of \(book)").onOpenURL
{
self.id = $0.description.lastPathComponent //parse the url as appropriate
}
}
Book 是您从通过 url 传递的 id 检索的值或对象。id 应该是一个绑定,以便更新视图。
链接可以从应用程序内的其他地方发送,但也可以从外部源发送,例如 safari 或终端应用程序 ( open fancyLibraryApp:viewer/book/42
)。
因此必须验证url 。用户是否允许阅读这本书?用户是否登录?
Apple在此处解释了如何验证传入的 url ,但仅适用于 iOS。
NSApplicationDelegate 有一个功能 application(_ application: NSApplication, open urls: [URL])
然而,该函数是在视图修饰符之后调用的onOpenURL
。
那么如何验证 url 呢?
解决方案
推荐阅读
- python - 使用特定的 conda env 运行 pipenv?
- r - 在 R 中使用 read_excel 手动分配列名
- python - 如何从文件中分割某些数字以将它们作为值放入字典中的列表中?
- reactjs - 反应验证表单,但提交时没有刷新
- amazon-dynamodb - AWS Scan 忽略 withLimit()
- pandas - 遍历 df.index 的唯一元素以找到列中的最小值
- node.js - Mongoose.countDocuments 在按去年创建的时刻 js 计算文档时不起作用
- c# - 如何将 CDPSession 与 puppeteersharp 拦截请求一起使用
- python - 为什么我得到“列表索引超出范围”?
- c++ - 为什么在不涉及复制时 std::string s = "123" 被视为复制初始化?