我正在尝试使用 CloudKit Web 服务 API 从 Google Apps 脚本中的生产 CloudKit 容器的公共数据库中获取文章记录。
我的请求基于此页面上的文档。
这是我的代码:
// variables for the CloudKit request URL
var path = "https://api.apple-cloudkit.com";
var version = "1";
var container = "iCloud.com.companyname.My-Container-Name";
var environment = "production";
var database = "public";
var token = "8888888888888_my_actual_token_88888888888888888"
function showArticles() {
// assemble the URL
var url = path + "/database/" + version + "/" + container + "/" + environment + "/" + database + "/records/query?ckAPIToken=" + token;
// specify the record type to query
var query = {
recordType: "Article"
};
// specify the payload for the POST request
var payload = {
query : query
};
// set up the fetch options for the fetch request
var options = {
method : "POST",
payload : payload
};
// make the request
var response = UrlFetchApp.fetch(url, options);
Logger.log(response);
}
UrlFetchApp.fetch(url, options)
失败并出现此错误:
Request failed for https://api.apple-cloudkit.com/database/1/iCloud.<?>-Container-Name/development/public/records/query?ckAPIToken=8888888888888_my_actual_token_88888888888888888 returned code 401. Truncated server response: {"uuid":"7d8a8547-ad08-4090-b4b3-917868a42f6f","serverErrorCode":"AUTHENTICATION_FAILED","reason":"no auth method found"} (use muteHttpExceptions option to examine full response) (line 30, file "Code")
我已经进行了几个小时的故障排除,但我无法弄清楚我做错了什么。我也在我的开发环境中尝试过使用单独的令牌,并且发生了同样的事情。
此页面提到了ckWebAuthToken
参数并说“如果省略和需要,则请求失败”,但我找不到任何说明什么请求需要ckWebAuthToken
. 我假设我不需要ckWebAuthToken
,因为我试图访问的记录在我的容器的公共数据库中,我得到一个AUTHENTICATION_FAILED
错误而不是一个AUTHENTICATION_REQUIRED
错误。
让我感到困惑的一部分是错误消息中出现的这个 URL:
https://api.apple-cloudkit.com/database/1/iCloud.<?>-Container-Name/development/public/records/query?ckAPIToken=8888888888888_my_actual_token_88888888888888888
我希望它是:
https://api.apple-cloudkit.com/database/1/iCloud.com.companyname.My-Container-Name/development/public/records/query?ckAPIToken=8888888888888_my_actual_token_88888888888888888
但我不知道这是否真的是被请求的 URL,当我记录url
变量时,一切看起来都很好。
提前感谢您提供任何故障排除提示或解决方案!
更新
我尝试使用 Postman,并且请求使用相同的端点和 POST 数据。看起来container
URL 的组件被 Google Apps 脚本UrlFetchApp.fetch()
方法损坏了。<?>
似乎只在com.
URL 中出现。