〉
〈
This sample demonstrates how to authenticate a user with your app. There are two steps to authentication:
auth.persist = true
in your configuration you could run setUpAuth while
bootstrapping
your app and this function will use the stored cookie. The promise resolves with a
userInfo
object or
null
and a sign-in or
sign-out button will have been appended to the button container with id
apple-sign-in-button
or apple-sign-out-button
(whichever is appropriate).
These containers need to be in the DOM before executing the function and
their IDs can be customized in CloudKit.configure
.
whenUserSignsIn
and
whenUserSignsOut
are resolved when the user signs-in/out respectively. The former resolves with a
userInfo
object.This sample demonstrates how to fetch the currently signed-in user’s userIdentity
object. If the current user has made himself discoverable to the app, this object will have nonempty
nameComponents.
This sample demonstrates how to obtain a list of userInfo
objects corresponding to users
of the app
in the signed-in user’s iCloud Contacts who have made themselves discoverable to the app.
This sample demonstrates how to look up a discoverable user’s name by email address. This
method will
always return a userInfo
object with the emailAddress
field populated. The
other fields will be
populated only if a matching discoverable user is found.
This sample demonstrates how to look up a discoverable user’s info by userRecordName. The
.catch()
block is invoked
when no matching user is found.
The page you were looking for was not found. Please use the menu on the left to navigate the app.
This sample shows how to add a notification listener to the container. The listener will get called
whenever the server sends us a notification of an update to a subscription. In order to receive
notifications your app
must park a connection with the notification backend using registerForNotifications
.
This sample demonstrates how an authenticated user can save a record to his/her private database. Our example records are of type Items. Leave the recordName field blank to let the server generate a record name. Leave the recordChangeTag field blank when creating a new record and supply the latest server change tag when modifying an existing record.
This sample demonstrates how an authenticated user can delete a record from the private database.
This sample demonstrates how to fetch a record by record name from the private database.
This sample demonstrates how a user can subscribe to a change to a record in a specific zone (zone subscription) as well as to changes to records that match a query condition (query subscription). Once subscribed, your app can register for notifications of changes.
This sample shows how to delete a subscription by ID.
This sample shows how to fetch a subscription by ID.
This sample shows how to fetch all subscriptions.
This sample demonstrates how an authenticated user can get all changes relative to a sync token in a
custom zone.
If no sync token is provided all records in the zone are returned. The response will always contain
a new sync token
which can be cached in the client and sent in a new sync request. The sync token can also be used
for paginating a result
set. The moreComing
boolean on the response indicates if the result set is incomplete.
When you have a zone-level subscription you can get
notified of changes to that zone and you would typically run
fetchChangedRecords
to then fetch the latest changes and bring your client up-to-date.
This sample shows how to create a custom zone in the user’s private database. Zones are useful for syncing a user’s data. Once you have created a custom zone you will be able to create records in that zone and test the sync feature.
This sample shows how to delete a custom zone by name from the private database.
This sample shows how to fetch a record zone by name from the private database.
This sample shows how to list all record zones in your private database. The response will always contain the default zone.
This sample demonstrates how any user can query records in the public database. The same example will work equally well for querying records in a user’s private database. We will query records of type Items which has the following schema:
Our code sample gets the client’s geolocation and asks for a list of Items sorted by closest distance from this location.
This web application provides executable sample code for the core API methods provided by the CloudKit JS JavaScript library. While these methods cover many typical use cases, there are more flexible versions available if needed which allow for batch requests and more configuration. The user is advised to refer to the CloudKit JS Reference for more information.
All code examples can be run by clicking the play button at the top of the page. The results will be displayed below the sample code block.
The static assets which make up this tutorial are available for download as a convenient zip package from the Github. The configuration code resides in the file js/init.js.
CloudKit.configure({
containers: [{
// Change this to a container identifier you own.
containerIdentifier: 'iCloud.io.startway.CloudKitCatalog',
apiTokenAuth: {
// And generate a web token through CloudKit Dashboard.
apiToken: '<Insert your API Token here>',
persist: true, // Sets a cookie.
signInButton: {
id: 'apple-sign-in-button',
theme: 'black' // Other options: 'white', 'white-with-outline'.
},
signOutButton: {
id: 'apple-sign-out-button',
theme: 'black'
}
},
environment: 'development'
}]
});
Change the container identifier to one that you own. For more information on how to create a container see CloudKit Quick Start. Once you have a container, you will need to create an Items record type with fields:
You can do this as well as generate an API token through the CloudKit Dashboard.
CloudKit JS is hosted at https://cdn.apple-cloudkit.com/ck/2/cloudkit.js. Include the library on your web page using either of the two methods below. You will automatically get updates and bug fixes as they are released.
<script src="https://cdn.apple-cloudkit.com/ck/2/cloudkit.js"></script>
<!-- Listen for the cloudkitloaded event on the window object. -->
<script>
window.addEventListener('cloudkitloaded', function() {
// Now the global namespace CloudKit is defined and you can proceed
// to configure your application.
});
</script>
<!-- Include the script with the ‘async’ attribute. -->
<script src="https://cdn.apple-cloudkit.com/ck/2/cloudkit.js" async></script>
CloudKit JS is supported on Safari, Firefox, Chrome, Internet Explorer and Microsoft Edge, including embedded web views. For security reasons, a mobile web view must launch the Apple sign-in page in a native browser in order to use iCloud authentication.