CKShare "userDidAcceptCloudKitShareWith" 仅由同一用户的首次安装触发
CKShare "userDidAcceptCloudKitShareWith" is only triggered by first installation of same user
在 Appdelegate 中我有 userDidAcceptCloudKitShareWith
但它只会针对接受邀请的用户的第一台设备触发。
示例:
- 用户A邀请用户B。
- 用户 B 在设备 B1 上接受邀请 -> 一切正常,方法被触发,我知道该怎么做。
- 问题是,当用户 B 使用他的设备 B2 时,该方法不会 被解雇。我怎么知道在设备 B2 上,用户 B 已经
接受邀请了吗?
我在真实设备上进行了尝试,但仅在第一台设备上触发了该方法。
我可以检查他是否有一个具有预期 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)
希望对您有所帮助。
在 Appdelegate 中我有 userDidAcceptCloudKitShareWith
但它只会针对接受邀请的用户的第一台设备触发。
示例:
- 用户A邀请用户B。
- 用户 B 在设备 B1 上接受邀请 -> 一切正常,方法被触发,我知道该怎么做。
- 问题是,当用户 B 使用他的设备 B2 时,该方法不会 被解雇。我怎么知道在设备 B2 上,用户 B 已经 接受邀请了吗?
我在真实设备上进行了尝试,但仅在第一台设备上触发了该方法。
我可以检查他是否有一个具有预期 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)
希望对您有所帮助。