2

パブリック データベース内の CloudKit アセットを、自分のアプリを使用していない人と共有したいと考えています。CKAsset クラスにはfileURL、ローカル ファイルを指すプロパティしかないため、URL は指定されていません。

ただし、CloudKit Web サービスのドキュメントには、「既存のアセットを参照する」リクエストがあり、そのレスポンスdownloadURLでアセット ファイルに が返されます。

アプリからこれを呼び出すと、「認証されたユーザーのセッション識別子」であるパラメーターを指定する必要があるため、「AUTHENTICATION_REQUIRED」としてドキュメントに記載されている 421 ステータス コードが返されます。ckSessionまたredirectURL、ユーザーが iCloud ログインを入力できる を渡します。その後、セッション ID を使用して Web アプリケーションにリダイレクトされます。

アプリ内でこの URL を開くと、すぐにセッション ID が返されませんでしたが、代わりに、ユーザーがセッション ID を受け取る前にブラウザーでログイン プロセスを実行することが期待されていました。

これは完全に軌道から外れているようで、間違ったことをしています。ユーザーに Web インターフェイス経由で 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 に答える