0

我正在尝试使用 CloudKit API 从我的服务器创建公共数据库中的记录,使用服务器到服务器的密钥。我正在使用以下 shell 脚本来生成 curl 命令。当我运行它时,Apple 的响应只是说存在内部错误。

{“uuid”:“a6415feb-168b-4615-9577-10c5168d7d7c”,“serverErrorCode”:“INTERNAL_ERROR”}

这是我正在使用的脚本:

#!/bin/sh

subpath=/database/1/iCloud.com.mycompany.myapp/development/public/records/modify
date=`date -u +"%Y-%m-%dT%H:%M:%SZ"`

body='
{
  "operations": [
    {
      "operationType": "forceReplace",
      "record": {
        "recordType": "Drawing",
        "fields": {
          "date": "2021-01-09T12:00:00Z",
          "numbers": [14, 26, 38, 45, 46, 13],
          "type": 1
        }
      },
      "recordName": "powerball20210109"
    }
  ],
  "atomic": true
}
'

encoded=`echo $body | base64`
signature="$date:$encoded:$subpath"


curl -X POST https://api.apple-cloudkit.com$subpath \
        -H 'Content-Type: application/json' \
        -H 'X-Apple-Cloudkit-Request-KeyID: myKeyHere' \
        -H "X-Apple-CloudKit-Request-ISO8601Date: $date" \
        -H "X-Apple-CloudKit-Request-SignatureV1: $signature" \
        -d "$body"

CloudKit 架构将绘图显示为具有三个属性的自定义类型:

  • 日期是日期/时间
  • 数字是一个 Int(64) (列表)
  • 类型是 Int(64)
4

1 回答 1

0

我可以看到几个问题。所有字段都需要有一个具有value属性的对象。此外,自 1970 年 1 月 1 日以来,日期以毫秒格式以整数形式保存到 CloudKit。

我从未尝试过保存这样的整数数组,但它看起来不错。

试试这个:

"fields":{
  "date": { "value" : 1610193600000 },
  "numbers": { "value" : [14, 26, 38, 45, 46, 13] },
  "type": { "value" : 1 }
}
于 2021-01-12T20:24:41.313 回答