CloudKit Пространство имен

Пространство имен CloudKit предоставляет доступ к iCloud.

Классы

CKAcceptSharesOperation

Реализует операцию, которая принимает общие записи.

CKAsset

Большой файл, связанный CKRecord с объектом .

CKContainer

Инкапсулирует содержимое, связанное с приложением, включая общие и личные данные для каждого пользователя.

CKContainer.Notifications

Уведомление, размещенное классом CKContainer .

CKDatabase

Содержит данные в .CKContainer Общедоступная CKDatabase предоставляет общие данные, частная база данных — данные текущего пользователя.

CKDatabaseNotification

Уведомление о действиях базы данных.

CKDatabaseOperation

Абстрактный класс для операций с CKDatabaseобъектом .

CKDatabaseSubscription

Подписка на базу данных.

CKDiscoverAllContactsOperation

Объект CKOperation , извлекает идентификаторы всех обнаруживаемых контактов пользователя приложения.

CKDiscoverAllUserIdentitiesOperation

Операция, которая получает всех обнаруживаемых пользователей в адресной книге системы.

CKDiscoveredUserInfo

Сведения о пользователе. Возвращается .CKDiscoverAllContactsOperation

CKDiscoverUserIdentitiesOperation

Операция поиска пользователей, соответствующих критерию.

CKDiscoverUserInfosOperation

Объект CKOperation , извлекает идентификаторы обнаруживаемых пользователей, чьи адреса электронной почты или идентификаторы записей уже известны разработчику приложения.

CKErrorCodeExtensions

Методы расширения для перечисления CloudKit.CKErrorCode.

CKErrorFields

Содержит константы ошибок, используемые CloudKit.

CKFetchDatabaseChangesOperation

Операция, которая извлекает изменения базы данных.

CKFetchNotificationChangesOperation

Объект CKOperation , который ret.. /.. /summary_set.sh CKFetchNotificationChangesOperation A

CKFetchRecordChangesOperation

Объект CKDatabaseOperation , извлекает данные об измененных или удаленных CKRecord объектах.

CKFetchRecordsOperation

Объект CKDatabaseOperation , извлекающий определенные CKRecord объекты.

CKFetchRecordZoneChangesConfiguration

Пространство имен CloudKit предоставляет доступ к iCloud.

CKFetchRecordZoneChangesOperation

Пространство имен CloudKit предоставляет доступ к iCloud.

CKFetchRecordZoneChangesOptions

Содержит параметры, управляющие получением изменений зоны записей.

CKFetchRecordZonesOperation

Объект CKDatabaseOperation , извлекающий CKRecordZone объекты из iCloud.

CKFetchShareMetadataOperation

Операция, которая извлекает общие метаданные для нескольких общих папок.

CKFetchShareParticipantsOperation

Операция, которая извлекает общих участников для общих записей.

CKFetchSubscriptionsOperation

Объект CKDatabaseOperation , извлекающий CKSubscription объекты из iCloud.

CKFetchWebAuthTokenOperation

Операция, возвращающая маркер веб-проверки подлинности для указанного маркера API с панели мониторинга CloudKit.

CKLocationSortDescriptor

Сортирует записи на основе их расстояния от указанного расположения.

CKMarkNotificationsReadOperation

Помечает push-уведомления как прочитанные. Обычно используется приложениями, которые используют push-уведомления для отслеживания изменений.

CKModifyBadgeOperation

Объект , CKOperation изменяющий эмблему значка приложения на текущем устройстве или на всех устройствах пользователя.

CKModifyRecordsOperation

Объект CKDatabaseOperation , который фиксирует изменения в одном или нескольких объектах CKRecord .

CKModifyRecordZonesOperation

Объект CKDatabaseOperation , который фиксирует изменения в зонах записей.

CKModifySubscriptionsOperation

Объект CKDatabaseOperation , который фиксирует изменения в одном или нескольких объектах CKSubscription .

CKNotification

Push-уведомление, отправленное приложению.

CKNotificationID

Уникально идентифицирует push-уведомление, отправленное из контейнера.

CKNotificationInfo

Указывает тип push-уведомлений, создаваемых при выполнении условия триггера.

CKOperation

Абстрактный базовый класс для операций, выполняемых в базе данных CloudKit.

CKOperationConfiguration

Настраивает поведение операции CloudKit.

CKOperationGroup

Представляет пакетную группу операций CloudKit.

CKQuery

Задает запрос к базе данных CloudKit.

CKQueryCursor

Содержит текущую точку остановки в результирующем наборе CKQueryобъекта .

CKQueryNotification

Push-уведомление, созданное CKSubscription объектом .

CKQueryOperation

Объект CKDatabaseOperation , выполняющий CKQuery.

CKQuerySubscription

Позволяет разработчикам создавать уведомления на основе запроса.

CKRecord

Словарь пар Key-Value, которые структурирует данные в CloudKit.

CKRecordID

Уникально идентифицирует в CKRecord базе данных.

CKRecordValue

Разработчикам приложений не следует выполнять подклассы этого интерфейса, который обеспечивает строгое опечатывание объектов, хранящихся в базе данных CloudKit. Пользовательские типы данных не поддерживаются.

CKRecordZone

Позволяет упорядочивать связанные CKRecord объекты. По умолчанию частная и общедоступная базы данных имеют одну зону.

CKRecordZoneID

Уникально идентифицирует в CKRecordZone базе данных.

CKRecordZoneNotification

Push-уведомление, полученное в результате изменений в объекте CKRecordZone.

CKRecordZoneSubscription

Подписка на изменение зоны записи.

CKReference

Определяет связь 1:M между CKRecord объектами в пределах одного CKRecordZoneобъекта .

CKServerChangeToken

Объект, доступный только для чтения, идентифицирующий версию CKRecord. При получении обновленных данных передача существующего маркера позволяет серверу только возвращать изменения, повышая эффективность.

CKShare

Представляет общую запись.

CKShareKeys

Константы, используемые различными классами CloudKit.

CKShareMetadata

Представляет общие метаданные записи.

CKShareParticipant

Содержит данные для участника общей папки.

CKSubscription

Постоянный запрос, который отслеживает изменения на сервере. (См. раздел CKQueryNotification.)

CKUserIdentity

Содержит сведения, используемые для поиска пользователя или пользователей.

CKUserIdentityLookupInfo

Содержит данные, которые можно использовать для поиска пользователя.

Интерфейсы

ICKRecordValue

Интерфейс, представляющий обязательные методы (если таковые есть) протокола CKRecordValue.

Перечисления

CKAccountStatus

Перечисляет значения, указывающие, доступна ли учетная запись пользователя iCloud.

CKApplicationPermissions

Перечисляет значение, указывающее, что другие пользователи приложения могут обнаруживать текущего пользователя по адресу электронной почты.

CKApplicationPermissionStatus

Перечисляет состояния, которые могут быть у приложения при попытке получить разрешение.

CKDatabaseScope

Перечисляет значения, определяющие, является ли база данных частной, общей или общедоступной.

CKErrorCode

Перечисляет условия ошибок CloudKit.

CKNotificationType

Перечисляет события, которые могут создавать push-уведомления.

CKOperationGroupTransferSize

Пространство имен CloudKit предоставляет доступ к iCloud.

CKQueryNotificationReason

Перечисляет события постоянного хранилища, которые могут активировать уведомления о жизненном цикле данных.

CKQuerySubscriptionOptions

Перечисляет время или время срабатывания CKSubscription уведомления.

CKRecordSavePolicy

Перечисляет политики, определяющие, когда и нужно ли сохранять запись.

CKRecordZoneCapabilities

Перечисляет специальные операции, которые может выполнять зона.

CKReferenceAction

Перечисляет значения, определяющие, должна ли ссылка удалять себя при удалении целевой записи.

CKShareParticipantAcceptanceStatus

Перечисляет ответы для предоставления общего доступа к запросам на участие.

CKShareParticipantPermission

Перечисляет разрешения общей папки пользователя.

CKShareParticipantRole

Пространство имен CloudKit предоставляет доступ к iCloud.

CKShareParticipantType

Перечисляет типы участников общих ресурсов.

CKSubscriptionOptions

Перечисляет флаги для управления поведением push-уведомлений для подписок на основе запросов.

CKSubscriptionType

Перечисляет типы подписок.

Делегаты

CKAcceptPerShareCompletionHandler

Пространство имен CloudKit предоставляет доступ к iCloud.

CKDatabaseDeleteSubscriptionHandler

Обработчик завершения для DeleteSubscription(String, CKDatabaseDeleteSubscriptionHandler) метода .

CKDiscoverUserInfosCompletionHandler

Разработчики приложений могут реализовать этот delgate и назначить его свойству M:CloudKit.CKDiscoverUserInfosOperation.Complete* для обработки возвращаемых сведений о пользователе.

CKFetchDatabaseChangesCompletionHandler

Пространство имен CloudKit предоставляет доступ к iCloud.

CKFetchPerShareMetadataHandler

Пространство имен CloudKit предоставляет доступ к iCloud.

CKFetchRecordChangesHandler

Делегат для AllChangesReported свойства .

CKFetchRecordsCompletedHandler

Делегат для Completed свойства .

CKFetchRecordZoneChangesFetchCompletedHandler

Пространство имен CloudKit предоставляет доступ к iCloud.

CKFetchRecordZoneChangesTokensUpdatedHandler

Пространство имен CloudKit предоставляет доступ к iCloud.

CKFetchRecordZoneChangesWithIDWasDeletedHandler

Пространство имен CloudKit предоставляет доступ к iCloud.

CKFetchSubscriptionsCompleteHandler

Делегат для Completed свойства .

CKFetchWebAuthTokenOperationHandler

Пространство имен CloudKit предоставляет доступ к iCloud.

CKMarkNotificationsReadHandler

Делегат для Completed свойства .

CKModifyRecordsOperationHandler

Делегат для Completed свойства .

CKModifyRecordZonesHandler

Делегат для Completed свойства .

CKModifySubscriptionsHandler

Делегат для Completed свойства .

CKRecordZoneCompleteHandler

Делегат для Completed свойства .

Комментарии

Пространство имен CloudKit позволяет разработчикам приложений управлять потоком данных между приложениями и iCloud. iCloud предоставляет хранилище данных на стороне сервера, как "общедоступное", совместно используемое всеми экземплярами приложения или конкретными приложениями, так и "частное", уникальное для одного пользователя. Хранилище и транспорт iCloud шифруются и синхронизируются между устройствами Apple. CloudKit не обеспечивает сохраняемость на стороне клиента или кэширование данных. Функции CloudKit доступны только при наличии у пользователя активного подключения к Интернету.

Класс самого высокого уровня в CloudKit — .CKContainer Контейнер CloudKit (иногда называемый в документации Apple контейнером Ubiquity) — это хранилище данных, идентифицируемое с определенным именем. Apple советует использовать имя формы "iCloud. {reverse DNS}. {appName}", например "iCloud.com.mycompany.MyApp". Разработчики должны создавать и настраивать свои контейнеры с помощью панели мониторинга iCloud, доступной на портале разработчика Apple.

Один может CKContainer содержать как общедоступные данные, которые совместно используются всеми экземплярами приложения (см. PublicCloudDatabase), так и частные данные, содержащие пользовательские данные (см. ).PrivateCloudDatabase В iCloud общедоступные данные хранятся в хранилище iCloud приложения, а частные — в частном хранилище iCloud пользователя. Общедоступный CKDatabase доступ доступен для всех подключенных пользователей приложения, независимо от того, вошли ли они в iCloud. Закрытый CKDatabase используется только в том случае, если пользователь вошел в iCloud. Разработчики должны написать свой код таким образом, чтобы он корректно реагировал на изменения в состоянии входа или подключения пользователя.

Эти общедоступные и частные CKDatabase объекты хранят структурированные записи. Они представлены объектами CKRecord . В дополнение к данным типа "ключ-значение", эти записи могут содержать CKAsset большие объекты либо напрямую (извлекаются с помощью содержащего CKRecord) либо в виде ссылок (что позволяет отложенно извлекать большие данные).

Все CKRecord экземпляры хранятся в CKRecordZone. Является CKRecordZone чем-то вроде традиционного экземпляра базы данных: он может содержать несколько CKRecord хранилищ, которые могут ссылаться друг на друга, но не на хранилища в других CKRecordZone экземплярах, а CKRecordZone объекты могут использоваться для координации атомарных операций в нескольких хранилищах CKRecord . Сходство с экземпляром базы данных не является универсальным; Например, разработчик может использовать M:CKDatabase.FetchRecordAsync(CKRecordID) для получения CKRecord непосредственно из CKDatabase без ссылки на зону. Значение по умолчанию CKRecordZone доступно через P:CloudKit.CKRecordZone.DefaultRecordZone(). Разработчики могут создавать дополнительные зоны с помощью панели мониторинга CloudKit и использовать их для логического секционирования данных.

Для приложений CloudKit требуется профиль подготовки с com.apple.developer.icloud-services правами и идентификатор пакета для конкретного приложения (например, "com.mycompany.CloudKitApp"). Разработчики должны создать и настроить такой профиль подготовки.

Ниже приведены некоторые типичные способы использования CloudKit, которые работают с отдельными записями.

//Create 
private async Task<CKRecord> StoreInCloudKit (string name, CLLocation loc, int stationId)
{
    string containerName = "iCloud.com.xamarin.CKWork";
    var container = CKContainer.FromIdentifier (containerName);
    CKDatabase publicDatabase = container.PublicCloudDatabase;
    var zoneId = CKRecordZone.DefaultRecordZone ().ZoneId;
    var recordType = "StationReferences";

    var record = new CKRecord (recordType);
    record ["Name"] = new NSString (name);
    record ["Position"] = loc;
    record ["StationID"] = new NSNumber (stationId);

    var storedRecord = await publicDatabase.SaveRecordAsync (record);
    return storedRecord;
}

//Retrieve (via ID)
private async Task<CKRecord> AccessCloudKit ()
{
    string containerName = "iCloud.com.xamarin.CKWork";
    var container = CKContainer.FromIdentifier (containerName);
    CKDatabase publicDatabase = container.PublicCloudDatabase;

    var recordNameIHappenToKnow = "7eaf0432-2fa4-475f-851a-c6a19b3f8587";
    var recordId = new CKRecordID (recordNameIHappenToKnow);
    var record = await publicDatabase.FetchRecordAsync (recordId);

    return record;
}

//Retrieve (query)
private async Task<CKRecord []> QueryCloudKit ()
{
    string containerName = "iCloud.com.xamarin.CKWork";
    var container = CKContainer.FromIdentifier (containerName);
    CKDatabase publicDatabase = container.PublicCloudDatabase;

    var zoneId = CKRecordZone.DefaultRecordZone ().ZoneId;
    Console.WriteLine ($"Default zone name = '{zoneId.ZoneName}' owner = '{zoneId.OwnerName}'");
    /*
    var zoneName = "_defaultZone";
    var ownerName = "__defaultOwner__";
    var zoneId0 = new CKRecordZoneID (zoneName, ownerName);

    Console.WriteLine ($"Assert { zoneId0 == zoneId }");
    */

    var recordType = "StationReferences";

    var location = new CLLocation (19.7303, -155.056);
    var predicate = NSPredicate.FromFormat ("distanceToLocation:fromLocation:(Position, %@) < 100", location);

    var query = new CKQuery (recordType, predicate);

    var result = await publicDatabase.PerformQueryAsync (query, zoneId);
    return result;
}

//Update
private async Task<CKRecord> UpdateInCloudKit (CKDatabase database, CKRecord record, NSString key, NSObject newValue)
{
    record [key] = newValue;
    var modifiedRecord = await database.SaveRecordAsync (record);
    return modifiedRecord;
}

//Delete 
private async Task<CKRecordID> DeleteRecord (CKDatabase database, CKRecord record)
{
    var id = record.Id;
    var deletedId = await database.DeleteRecordAsync (id);
    return deletedId;
}