4

CKContainer.discoverAllIdentities(completionHandler:), discoverUserIdentity(recordID: - 完成处理程序返回 CKUserIdentity 但 .lookupInfo 始终为零,即使联系人包含电子邮件、电话等。其他属性如 hasiCloudAccount、userRecordID、nameComponents 都很好。这个问题刚刚开始发生与最近的 Swift 3.1 版本。有谁知道这是否是预期的行为,因为我无法在发行说明中找到对 CloudKit 更改的任何引用,但这看起来像是一个隐私问题。

经过进一步调查,这个问题似乎是由于最近的 iOS 10.3 更新造成的。在具有 10.2.1 的 iPhone 5 上运行该应用程序时,不会出现问题,并且 lookupInfo 正确包含 emailAddress

提交的苹果错误:31377433

新:此外,如果我尝试通过 CKDiscoverAllUserIdentitiesOperation 访问信息,特别是 userIdentityDiscoveredBlock -> user.nameComponents,则结果是与 12 岁以下用户关联的苹果 ID 的“空字符串”(可能在“家庭共享”上)计划)。我没有找到有关此的信息,Apple 开发人员支持也没有提供任何帮助。

4

2 回答 2

7

由于缺少声誉,我无法发表评论,所以我必须这样做......

我也提交了同样的错误(31397767),希望他们能修复它。

因为CKFetchShareParticipantsOperation有必要CKUserIdentityLookupInfo。由于没有解决方法,我们需要等待他们修复它。

我只是对这个错误感到好奇,因为如果您已经将您的应用程序提交到应用程序商店,那么整个共享部分将不适用于用户。

更新

iOS 10.3.1 更新没有解决这个问题。

更新:解决方案

我收到了 Apple 关于这个“问题”的回复。这是答案c&p:

这是预期的行为,因为 CKDiscoverAllUserIdentitiesOperation 不需要提示用户访问联系人。如果您想将这些结果转换为参与者,您需要请求联系人访问权限并通过 contactIdentifiers 属性自己从联系人中获取查找信息。

// 通过 CKDiscoverAllUserIdentitiesOperation 发现的身份对应于本地联系人数据库中的条目。这些身份将填写contactIdentifiers,您的应用可能会使用它来获取有关已发现联系人的其他信息。单个发现的用户可能存在多个联系人标识符,因为多个联系人可能包含相同的电子邮件地址或电话号码。

请注意,发现用户和查找参与者在逻辑上是两件不同的事情——您只能发现通过 -[CKContainer requestApplicationPermission:CKApplicationPermissionUserDiscoverability ...] 可以发现自己的用户,但您甚至可以获取任何电子邮件地址或电话号码的参与者如果它不对应于 iCloud 帐户。您不需要发现用户然后将他们变成参与者 - 您可以让您的应用程序的用户输入地址以供参与者添加到共享中。

于 2017-04-03T07:59:49.863 回答
0

我发现 ckContainer.discoverUserIdentity(withEmailAddress... 命令不会填充生成的 CKIdentity.LookupInfo.RecordID 字段,但它确实填充了 CKIdentity.RecordID 字段。我花了一段时间才弄清楚...(Xcode 12.5。 1、IOS 14.6)

于 2021-07-16T17:10:35.303 回答