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

时间:2018-09-24 10:14:14

标签: xcode cloudkit sharing ckshare

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

示例:

  • 用户A邀请用户B。
  • 用户B在设备B1上接受邀请->一切正常,该方法被触发,我知道该怎么办。
  • 问题在于,当用户B使用其设备B2时,该方法不会不会被触发。我应该如何在设备B2上知道用户B已经已经 接受邀请了吗?

我在真实设备上尝试过此操作,并且仅在第一个设备上触发了该方法。

我可以检查他是否具有带有期望的zoneID的sharedZone,但是这对我来说有点奇怪-任何帮助都超过了!

1 个答案:

答案 0 :(得分:1)

在应用启动时,您需要为共享数据库创建订阅。这样,当用户(在任何设备上)接受共享时,将触发订阅,并且该用户的所有设备(具有订阅)将拉出该数据库中的最新数据。不必在多个设备上接受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)

我希望有帮助。