Получаете URL-адрес CloudKit CKAsset?
Я хотел бы поделиться активом CloudKit в общедоступной базе данных с людьми, которые не используют мое приложение. Из класса CKAsset есть только fileURL
свойство, которое указывает на локальный файл, поэтому URL не указан.
Однако в документации по CloudKit Web Services есть запрос "ссылка на существующие ресурсы", который в ответе дает downloadURL
в файл активов.
Вызов этого из моего приложения дает мне код состояния 421, который описан в документации как "AUTHENTICATION_REQUIRED", так как это требует ckSession
параметр, который должен быть предоставлен, который является "идентификатором сеанса аутентифицированного пользователя". Он также проходит redirectURL
где пользователь может ввести свой логин iCloud, а затем перенаправиться обратно в веб-приложение, теперь с идентификатором сеанса.
Открытие этого URL внутри приложения не сразу возвращало идентификатор сеанса, но вместо этого ожидало, что пользователь пройдет через процесс входа в систему в браузере, прежде чем получить свой идентификатор сеанса.
Это кажется совершенно неправильным, и делать это неправильно. Я, конечно, не собираюсь заставлять своих пользователей входить в iCloud через веб-интерфейс. Единственное, чего не хватает для этого URL-адреса CloudKit Web Services - это идентификатор сеанса. Есть ли способ для меня, чтобы получить это с помощью инфраструктуры CloudKit? Или есть другой способ узнать URL этого файла?
1 ответ
Если вы используете официальный CloudKit.js от Apple, вот код для настройки доступа к CloudKit:
window.addEventListener('cloudkitloaded', function() {
console.log('Cloudkit loaded');
CloudKit.configure({
locale: 'en-us',
containers: [{
containerIdentifier: 'iCloud.com.getYoursInXcode',
apiTokenAuth: {
apiToken: 'getThisInCloudkitDashboardApiAccess',
persist: true //Set cookie
},
environment: 'production'
}]
});
// Do your thing here
})
Если вы выбираете записи в своем бэкэнде, все же лучше получить свой токен API вместо использования процесса "сервер-сервер". Например, запросить записи в GO, чтобы получить запись, составьте свое тело запроса следующим образом
sampleRequest = []byte('{
"resultsLimit":"4",
"desiredKeys": ["recordTitle","recordDescription"],
"query": {
"recordType": "myRecord",
"sortBy": {
"fieldName": "rank",
"ascending": true
}
}
}')
И отправьте его на следующий URL
http.NewRequest("POST", ""https://api.apple-cloudkit.com/database/1/iCloud.com.yourIdentifier/production/public/records/query?ckAPIToken=YOURTOKEN", bytes.NewBuffer(RequestBody))