Получение URL CloudKit CKAsset?

Я хочу поделиться активом CloudKit в общедоступной базе данных с людьми, которые не используют мое приложение. В классе CKAsset есть только свойство fileURL, которое указывает на локальный файл, поэтому URL-адрес не указан.

Однако в документации для веб-служб CloudKit есть — это запрос на «ссылку на существующие активы», который в своем ответе дает downloadURL файлу актива.

Вызов этого из моего приложения дает мне код состояния 421, который описан в документации как "AUTHENTICATION_REQUIRED", поскольку для этого требуется указать параметр ckSession, который является "идентификатором сеанса аутентифицированного пользователя" . Он также передает redirectURL, где пользователь может ввести свой логин iCloud, а затем быть перенаправленным обратно в веб-приложение, теперь уже с идентификатором сеанса.

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

Это кажется совершенно неправильным и неправильным. Я точно не собираюсь заставлять своих пользователей входить в iCloud через веб-интерфейс. Единственное, чего не хватает для этого URL-адреса веб-служб CloudKit, — это идентификатор сеанса. Есть ли способ получить это с помощью платформы CloudKit? Или есть другой способ узнать URL-адрес этого файла?


person Andrew    schedule 01.12.2015    source источник


Ответы (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, а не использовать процесс Server-To-Server. Например, запросите записи в 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))
person JSNoob    schedule 13.08.2016