PHAsset(或ALAsset)跨设备标识符

8
我正在创建一个iOS应用程序,并希望在SQLite数据库中存储有关照片库图片的一些细节。我还希望能够在用户拥有的不同设备之间共享这些数据(想象一下,有人想要重新组织他的iPhone上的照片,并希望在iPad上检索相同的顺序)。
我已经在苹果文档中进行了搜索,但没有找到任何跨设备共享的PHAsset标识符。我还尝试检查PHAsset的PHImageFileURLKey、hashValue或localIdentifier是否被共享,但它们都没有。
有人已经做过这样的事情吗?

1
我意识到我必须再次找到这个问题并进行评论。 苹果最近宣布了PHCloudIdentifier!请查看官方文档https://developer.apple.com/documentation/photokit/phcloudidentifier - Kyle Yi
你应该将被接受的答案更改为@falco-winkler的答案。 - Grimxn
3个回答

5

目前没有。在iOS 8 Beta的早期版本中,PHAsset有一个共享标识符,但后来被删除了。


5
自从 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帐户,也似乎可以获取云标识符。
  • 尽管文档说明它是一项昂贵的操作,但同时加载数百个标识符的开销对我来说并不明显。

2
这应该是现在被接受的答案。它完美地工作。 - Grimxn

-2

看起来,所有已与iTunes同步的PHAssets的localIdentifier都是相同的,即使跨设备。这意味着:如果您从一个设备导入图像并将其同步到另一个设备,则PHAsset的localIdentifier是相同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接