从 iOS 15 开始,所有设备都可以使用一个标识符:https ://developer.apple.com/documentation/photokit/phcloudidentifier
API 非常简单。这个想法是你存储和同步云标识符,然后使用它们来检索本地标识符,然后你可以像你习惯的那样与现有的 API 一起使用。您可以批量请求云标识符,如下所示:
let localIdentifiers = <your-list-of-local-identifiers>
let mappings: [String: Result<PHCloudIdentifier, Error>] =
PHPhotoLibrary.shared().cloudIdentifierMappings(forLocalIdentifiers: localIdentifiers)
您可以使用该stringValue
属性存储此类标识符。
反之亦然(假设您有一个cloudIdentifiers
包含标识符字符串值的列表):
let localIdentifiers: [PHCloudIdentifier: Result<String, Error>]
= PHPhotoLibrary
.shared()
.localIdentifierMappings(
for: cloudIdentifiers.map(PHCloudIdentifier.init(stringValue:)))
会发生什么错误?
- 未找到标识符:您传递的标识符无效或资产已被删除
- 找到云标识符的多个本地标识符(根据 WWDC,如果“云状态不同步或库依赖图像内容来查找匹配项”,则会发生这种情况)有关此处错误处理的更多信息
我通过实验得出的其他见解:
- 您似乎能够在没有互联网的情况下获得云标识符,即使您根本没有登录 iCloud 帐户,您的应用程序也会禁用 iCloud。
- 尽管文档说明这是一项昂贵的操作,但一次加载数百个标识符的开销对我来说并不明显