CKShare "userDidAcceptCloudKitShareWith" запускается только при первой установке того же пользователя - PullRequest
0 голосов
/ 24 сентября 2018

в Appdelegate У меня есть userDidAcceptCloudKitShareWith
, но он запускается только для первого устройства от пользователя, принявшего приглашение.

Пример:

  • Пользователь Aприглашает пользователя B.
  • Пользователь B принимает приглашение на устройстве B1 -> все в порядке, метод запускается, и я знаю, что делать.
  • Проблема в том, что, когда пользователь B использует егоВ устройстве B2 метод не срабатывает.Как я должен знать на устройстве B2, что пользователь B уже уже принял приглашение?

Я пробовал это на реальных устройствах и получаю только на первом устройстве с использованием метода.

Я мог бы проверить, есть ли у него общая зона с ожидаемым идентификатором зоны, однако это звучит немного странно для меня - любая помощь более чем приветствуется!

1 Ответ

0 голосов
/ 26 сентября 2018

Вам нужно создать подписку на базу данных 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)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...