2

我想与不使用我的应用程序的人共享公共数据库中的 CloudKit 资产。在 CKAsset 类中,只有一个fileURL指向本地文件的属性,因此没有给出 URL。

然而,在 CloudKit Web Services 的文档中,有一个“引用现有资产”请求,它在其响应中给出了downloadURL资产文件。

从我的应用程序调用它会给我一个 421 状态代码,在文档中描述为“AUTHENTICATION_REQUIRED”,因为它需要一个ckSession参数,它是一个“经过身份验证的用户的会话标识符”。它还传递了一个redirectURL,用户可以在其中输入他们的 iCloud 登录信息,然后被重定向回 Web 应用程序,现在带有一个会话标识符。

在应用程序中打开此 URL 不会立即返回会话标识符,而是希望用户在收到他们的会话 ID 之前在浏览器中完成登录过程。

这似乎完全偏离了轨道,而且是错误的做法。我当然不会让我的用户通过网络界面登录 iCloud。该 CloudKit Web 服务 url 唯一缺少的是会话 ID。有没有办法让我使用 CloudKit 框架来获得它?还是有其他方法可以让我找到这个文件的 URL?

4

1 回答 1

0

如果您使用的是 Apple 的官方 CloudKit.js,以下是配置您的 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))
于 2016-08-13T06:01:13.713 回答