Wiz*_*kid 4 swift cloudkit ios10.3
CKContainer.discoverAllIdentities(completionHandler:), discoveryUserIdentity(recordID: - 完成处理程序返回 CKUserIdentity 但 .lookupInfo 始终为零,即使联系人包含电子邮件、电话等。其他属性如 hasiCloudAccount、userRecordID、nameComponents 都很好。这个问题刚刚开始发生最近发布的 Swift 3.1 有谁知道这是否是有意的行为,因为我在发行说明中找不到任何对 CloudKit 更改的引用,但这看起来像是隐私问题。
经过进一步调查,该问题可能是由于最近的 iOS 10.3 更新所致。在装有 10.2.1 的 iPhone 5 上运行该应用程序时,不会出现该问题,并且lookupInfo 正确包含 emailAddress
提交的 Apple 错误:31377433
新:此外,如果我尝试通过 CKDiscoverAllUserIdentitiesOperation 访问信息,特别是 userIdentityDiscoveredBlock -> user.nameComponents,则结果是与 12 岁以下用户关联的 Apple ID 的“空字符串”(并且可能在“家庭共享”上)计划)。我没有找到任何有关此问题的信息,苹果开发人员支持也没有提供任何帮助。
由于缺少声誉而无法发表评论,因此我必须这样做...
我也提交了同样的错误 (31397767),希望他们能修复它。
因为CKFetchShareParticipantsOperation有必要有CKUserIdentityLookupInfo。由于没有解决方法,我们需要等待他们修复它。
我只是对这个错误感到好奇,因为如果您已经将您的应用程序提交到应用程序商店,则整个共享部分将不适用于用户。
更新
iOS 10.3.1 更新没有解决问题。
更新:解决方案
我收到了 Apple 关于这个“问题”的回复。这是 c&p 的答案:
这是预期的行为,因为 CKDiscoverAllUserIdentitiesOperation 不需要提示用户访问联系人。如果您想将这些结果转化为参与者,您需要请求联系人访问权限并通过 contactIdentifiers 属性自己获取联系人的查找信息。
// 通过 CKDiscoverAllUserIdentitiesOperation 发现的身份对应于本地联系人数据库中的条目。这些身份将填写 contactIdentifiers,您的应用程序可能会使用它来获取有关已发现联系人的其他信息。单个发现的用户可能存在多个 contactIdentifier,因为多个联系人可能包含相同的电子邮件地址或电话号码。
请注意,发现用户和查找参与者是两件逻辑上不同的事情-您只能发现通过 -[CKContainer requestApplicationPermission:CKApplicationPermissionUserDiscoverability ...] 使其可被发现的用户,但您甚至可以通过任何电子邮件地址或电话号码获取参与者如果它不对应于 iCloud 帐户。您不需要发现用户,然后将他们变成参与者 - 您只需让您的应用程序用户输入地址供参与者添加到共享中即可。
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |