共用方式為


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 從 iCloud 擷 CKRecordZone 取物件。

CKFetchShareMetadataOperation

擷取多個共用共用之共用中繼資料的作業。

CKFetchShareParticipantsOperation

擷取共用記錄之共用參與者的作業。

CKFetchSubscriptionsOperation

CKDatabaseOperation 從 iCloud 擷 CKSubscription 取物件。

CKFetchWebAuthTokenOperation

從 CloudKit 儀表板傳回指定 API 權杖之 Web 驗證權杖的作業。

CKLocationSortDescriptor

根據記錄與指定位置的距離排序記錄。

CKMarkNotificationsReadOperation

將推播通知標示為已讀取。 通常由使用推播通知來追蹤記錄變更的應用程式使用。

CKModifyBadgeOperation

CKOperation 可修改目前裝置或所有使用者裝置上應用程式圖示的徽章。

CKModifyRecordsOperation

CKDatabaseOperation 認可對一或多個 CKRecord 物件的變更。

CKModifyRecordZonesOperation

CKDatabaseOperation 認可對記錄區域的變更。

CKModifySubscriptionsOperation

CKDatabaseOperation 認可對一或多個 CKSubscription 物件的變更。

CKNotification

傳送至應用程式的推播通知。

CKNotificationID

唯一識別從容器傳送的推播通知。

CKNotificationInfo

指定符合觸發條件時所產生的推播通知類型。

CKOperation

針對 CloudKit 資料庫執行的作業抽象基類。

CKOperationConfiguration

設定 CloudKit 作業的行為。

CKOperationGroup

代表 CloudKit 作業的批次群組。

CKQuery

指定 CloudKit 資料庫的查詢。

CKQueryCursor

在 的結果集中 CKQuery 保留目前的停止點。

CKQueryNotification

物件所產生的 CKSubscription 推播通知。

CKQueryOperation

執行 CKDatabaseOperationCKQuery 的 。

CKQuerySubscription

可讓開發人員根據查詢建立通知。

CKRecord

Key-Value組的字典,可建構 CloudKit 內的資料。

CKRecordID

唯一識別 CKRecord 資料庫中的 。

CKRecordValue

應用程式開發人員不應該將這個介面子類別化,這會為儲存在 CloudKit 資料庫中的物件提供強型別。 不支援自訂資料型別。

CKRecordZone

允許組織相關的 CKRecord 物件。 根據預設,私人和公用資料庫都有單一區域。

CKRecordZoneID

唯一識別 CKRecordZone 資料庫中的 。

CKRecordZoneNotification

由 內 CKRecordZone 變更所產生的推播通知。

CKRecordZoneSubscription

記錄區域變更的訂用帳戶。

CKReference

在單 CKRecordZone 一 內定義 物件之間的 CKRecord 1:M 關聯性。

CKServerChangeToken

識別 版本之 CKRecord 的唯讀物件。 擷取更新的資料時,傳遞現有的權杖可讓伺服器只傳回變更,提高效率。

CKShare

表示共用記錄。

CKShareKeys

各種 CloudKit 類別所使用的常數。

CKShareMetadata

表示共用記錄共用中繼資料。

CKShareParticipant

包含共用參與者的資料。

CKSubscription

追蹤伺服器上變更的持續性查詢。 (請參閱CKQueryNotification.)

CKUserIdentity

包含用來查閱使用者或使用者的資訊。

CKUserIdentityLookupInfo

包含可用來查閱使用者的資料。

介面

ICKRecordValue

介面,表示通訊協定 CKRecordValue 的任何) 時, (所需的方法。

列舉

CKAccountStatus

列舉值,指出使用者的 iCloud 帳戶是否可用。

CKApplicationPermissions

列舉值,這個值表示其他使用者可以透過電子郵件地址探索目前的使用者。

CKApplicationPermissionStatus

列舉嘗試取得許可權時,應用程式可以擁有的狀態。

CKDatabaseScope

列舉值,指出資料庫是否為私用、共用或公用。

CKErrorCode

列舉 CloudKit 錯誤狀況。

CKNotificationType

列舉可產生推播通知的事件。

CKOperationGroupTransferSize

CloudKit 命名空間提供 iCloud 的存取權。

CKQueryNotificationReason

列舉可觸發資料生命週期通知的持續性儲存體事件。

CKQuerySubscriptionOptions

列舉 引發通知的時間 CKSubscription 或時間。

CKRecordSavePolicy

列舉原則,以控制何時或是否應該儲存記錄。

CKRecordZoneCapabilities

列舉區域能夠執行的特殊作業。

CKReferenceAction

列舉值,這個值可控制參考在刪除目標記錄時是否應該刪除本身。

CKShareParticipantAcceptanceStatus

列舉共用參與要求的回應。

CKShareParticipantPermission

列舉使用者共用許可權。

CKShareParticipantRole

CloudKit 命名空間提供 iCloud 的存取權。

CKShareParticipantType

列舉共用參與者類型。

CKSubscriptionOptions

列舉旗標,以控制查詢型訂閱的推播通知行為。

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 儲存體中。 無論使用者是否登入 iCloud,應用程式的所有已連線使用者都可以使用公用 CKDatabase 。 只有在使用者登入 iCloud 時,才會有私人 CKDatabase 。 開發人員必須撰寫其程式碼,以便適當地回應使用者登入或線上狀態的變更。

這些公用和私用 CKDatabase 物件會儲存結構化記錄。 這些是由 CKRecord 物件表示。 除了類似欄位的索引鍵/值資料之外,這些記錄可能會保留 CKAsset 大型物件,這些物件可能直接 (使用包含 CKRecord) 擷取,或作為參考 (允許延遲擷取大型資料) 。

所有 CKRecord 實例都會儲存在 內 CKRecordZoneCKRecordZone就像傳統資料庫實例一樣:它可以包含多個 CKRecord 存放區,這些存放區可能彼此參考,但不能參考其他 CKRecordZone 實例中的存放區,而 CKRecordZone 物件可用來協調跨多個 CKRecord 存放區的不可部分完成作業。 與資料庫實例的相似度不是通用的;例如,開發人員可以使用 M:CKDatabase.FetchRecordAsync (CKRecordID) CKRecordCKDatabase 直接從 擷取 ,而不參考區域。 預設值 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;
}