CKShare "userDidAcceptCloudKitShareWith" 仅由同一用户的首次安装触发

CKShare "userDidAcceptCloudKitShareWith" is only triggered by first installation of same user

在 Appdelegate 中我有 userDidAcceptCloudKitShareWith
但它只会针对接受邀请的用户的第一台设备触发。

示例:

我在真实设备上进行了尝试,但仅在第一台设备上触发了该方法。

我可以检查他是否有一个具有预期 zoneID 的 sharedZone,但这对我来说听起来有点奇怪 - 非常感谢任何帮助!

您需要在应用启动时创建对 shared 数据库的订阅。这样,当用户接受共享(在任何设备上)时,订阅将被触发,并且 该用户的所有设备(具有订阅)将提取该数据库中的最新数据。无需在多个设备上接受 CKShare

这是一个如何创建对共享数据库的订阅的示例:

let container = CKContainer(identifier: "...")

let subscription = CKDatabaseSubscription(subscriptionID: "shared")
let sharedInfo = CKNotificationInfo()
sharedInfo.shouldSendContentAvailable = true
sharedInfo.alertBody = "" //This needs to be set or pushes sometimes don't get sent
subscription.notificationInfo = sharedInfo

let operation = CKModifySubscriptionsOperation(subscriptionsToSave: [subscription], subscriptionIDsToDelete: nil)
container.sharedCloudDatabase.add(operation)

您还需要处理从共享数据库中获取的更改,以便在您的应用中显示新的共享数据,如下所示:

let fetchOperation = CKFetchDatabaseChangesOperation()
fetchOperation.fetchAllChanges = true
fetchOperation.recordZoneWithIDChangedBlock = { recordZoneID in
  //Process custom/shared zone changes...
}

container.sharedCloudDatabase.add(fetchOperation)

希望对您有所帮助。