从macOS 13 Ventura开始,苹果在Notes工具栏上添加了一个按钮,允许您快速将链接和通用链接插入到其他应用程序(如Safari或Message)中的便笺中。

我想知道它背后是否有一个公共API。一开始我以为它是由SharedWithYou框架支持的,但这似乎只适用于通过通用链接与应用程序相关联的链接。我特别感兴趣的是从网站上获取链接,与用户共享消息或在Safari中打开。
发布于 2022-10-14 13:55:05
不幸的是,我并不完全确定如何实现您想要的相同特性,只提供一些细节。
你应该试着从苹果上读这份文件。
他们推荐使用macos的以下内容在指定的应用程序中使用提供的选项异步打开一个或多个URL。
open(_:withApplicationAt:configuration:completionHandler:)如声明是:
func open(
_ urls: [URL],
withApplicationAt applicationURL: URL,
configuration: NSWorkspace.OpenConfiguration,
completionHandler: ((NSRunningApplication?, Error?) -> Void)? = nil
)您可以在第二个文档链接中找到要输入的内容,因为它们将代码标记为其中的链接。
现在的主要部分是你希望你的应用程序能够访问通用链接,这样你就可以跟随此文档支持应用程序中的通用链接。。
要支持应用程序中的通用链接(来自文档):
NSUserActivity对象并将activityType设置为NSUserActivityTypeBrowsingWeb时,更新其响应。要更新应用程序委托以响应通用链接--示例代码演示如何在macOS中处理通用链接:
func application(_ application: NSApplication,
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([NSUserActivityRestoring]) -> Void) -> Bool
{
// Get URL components from the incoming user activity.
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true) else {
return false
}
// Check for specific URL components that you need.
guard let path = components.path,
let params = components.queryItems else {
return false
}
print("path = \(path)")
if let albumName = params.first(where: { $0.name == "albumname" } )?.value,
let photoIndex = params.first(where: { $0.name == "index" })?.value {
print("album = \(albumName)")
print("photoIndex = \(photoIndex)")
return true
} else {
print("Either album name or photo index missing")
return false
}
}苹果的另一篇文章,您可以跟随它来了解如何支持通用链接。
注意:
通用链接也可以用于消息!这是因为它使用apple-app-site-association文件来支持通用链接。通用链接也是用来访问应用程序之间的。
至于你想如何访问最近的链接,例如目前在应用程序中打开的链接,我目前还不太确定。
https://stackoverflow.com/questions/73776803
复制相似问题