1

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

例子:

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

我在真实设备上进行了尝试,并且只在第一个设备上触发了该方法。

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

4

1 回答 1

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)

我希望这会有所帮助。

于 2018-09-26T04:53:35.813 回答