我目前正在尝试使用Apple的新CloudKit JS执行与iCloud Server的服务器端连接.根据WWDC 2015"CloudKit JS和Web服务",由于CloudKit JS是一个纯JS框架,因此您可以在所有JS环境中使用它,例如节点JS.
我从https://cdn.apple-apple-coudkit.com/ck/1/cloudkit.js复制了CloudKit JS的源代码,并将其粘贴到名为"cloudkit.js"的文件中.这是我尝试过的演示:
var CloudKit = require("/some/folders/cloudkit.js")
function demoPerformQuery() {
CloudKit.configure({
containers: [{
containerIdentifier: 'myContainerIdentifier',
apiToken: 'myAPIToken',
environment: 'development'
}]
})
var container = CloudKit.getDefaultContainer();
var publicDB = container.publicCloudDatabase;
publicDB.performQuery({recordType: 'Items'}).then(function(response){
// never called :-(
})
}
var express = require('express')
var app = express()
app.get("/", function(){
demoPerformQuery()
})
var server = app.listen(8080, function () {
console.log("server launched")
})
Run Code Online (Sandbox Code Playgroud)
由于正确调用了所有函数,因此CloudKit似乎已正确设置.但是从不调用performQuery的回调.为什么?
是否有人已经成功在服务器环境中配置CloudKit JS?
提前致谢
我试图找到相当于这个Android验证,但对于iOS.
最初发布在博客文章中, 但现在已合并到主要的Android文档中,验证让您知道3件事:然后,您知道:
关键是:
GoogleAuthUtil会发现Android应用和网络客户端ID位于同一个项目中,未经用户批准,会将ID令牌返回给Google签名的应用.
因此,我能够在不中断用户的情况下验证后端呼叫.
苹果公司是否有类似于iOS的东西,当苹果公司观察到iOS应用程序和网络客户端ID时,我可以获得Apple签署的ID令牌?
我发现了一个试图找到类似问题的SO问题,但我希望找到一个更简单的解决方案.这个问题已经超过一年了,所以我希望可能有更好的答案,可能还有新的CloudKit网络服务.
我正在与cloudkit仪表板交互并查看我的应用程序收集的数据.
如何从仪表板(data-> csv或json)导出所有数据,以便我可以对其进行一些分析?
谢谢!
有没有办法通过 CloudKit 获取 iCloud Notes?我查看了文档:
https://developer.apple.com/documentation/cloudkit
但没有找到如何访问 Notes 数据的方法。
是否可以使用 CloudKit Web Service从Android本机应用程序使用?如果我想让用户能够修改记录,该身份验证弹出窗口将如何在本机应用程序中显示?
我是否可以在本机应用程序上放置一个按钮,该按钮将打开浏览器,并且重定向的内容将出现在该应用程序中,并且当身份验证成功时,指定一个回调,在该回调中可以唯一标识用户的令牌,我想可以接收到用户记录名称?
Apple工程师在此会议视频中讨论了从Web登录的问题:https : //developer.apple.com/videos/wwdc/2015/?id=704
我了解了如何在 CloudKit 仪表板中创建记录类型并一次添加一个记录。我想尝试添加几百条记录进行测试。有没有办法将 CSV 或 JSON 文件导入仪表板?
我有两个看起来像这样的CloudKit数据对象:
父对象:
{
"records": [
{
"recordName": "14102C0A-60F2-4457-AC1C-601BC628BF47-184-000000012D225C57",
"recordType": "ParentObject",
"fields": {
"fsYear": {
"value": "2015",
"type": "STRING"
},
"displayOrder": {
"value": 2015221153856287200,
"type": "INT64"
},
"fjpFSGuidForReference": {
"value": "14102C0A-60F2-4457-AC1C-601BC628BF47-184-000000012D225C57",
"type": "STRING"
},
"fsDateSearch": {
"value": "2015221153856287158",
"type": "STRING"
},
},
"recordChangeTag": "id4w7ivn",
"created": {
"timestamp": 1439149087571,
"userRecordName": "_0d26968032e31bbc72c213037b6cb35d",
"deviceID": "A19CD995FDA3093781096AF5D818033A241D65C1BFC3D32EC6C5D6B3B4A9AA6B"
},
"modified": {
"timestamp": 1439149087571,
"userRecordName": "_0d26968032e31bbc72c213037b6cb35d",
"deviceID": "A19CD995FDA3093781096AF5D818033A241D65C1BFC3D32EC6C5D6B3B4A9AA6B"
}
}
],
"total":
}
Run Code Online (Sandbox Code Playgroud)
子对象:
{
"records": [
{
"recordName": "2015221153856287168",
"recordType": "ChildObject",
"fields": {
"District": {
"value": "002", …Run Code Online (Sandbox Code Playgroud) 在观看 WWDC 2015 CloudKit JS 时,我意识到 Android 设备用户可能需要 iCloud 才能从 CloudKit DB 请求数据,因为苹果用户需要打开 iCloud 帐户。我的假设正确吗?有没有办法让我的应用程序跨平台?
我正在遵循Apple关于编写CloudKit Web服务请求的指南。我遇到的麻烦是“身份验证Web服务请求”下的步骤2:
- 用您的私钥计算此消息的ECDSA签名。
在此之前,我生成了一个.pem文件证书,在文本编辑器中打开该文件时会显示我的私钥,因此我也使用字符串格式。
我还遵循了生成消息所指内容的步骤,现在将其作为字符串。
因此,假设我有一个私钥(或.pem文件,如果需要)和一条消息作为字符串,那么从理论上讲,我应该很容易获得使用私钥计算的消息的ECDSA签名。但是,这就是我努力的地方。我在网上发现的图书馆似乎采用了更为复杂的方法,其中的移动部件不同,没有引用.pem文件,也没有谈论生成新的公共/私有密钥。
此步骤的任何帮助将不胜感激。
我正在尝试实施与CloudKit Web服务的一些基本集成,遵循Apple的身份验证请求指南.我已经按照一些帮助,这个和这个问题,就是如何正确授权的请求,并且似乎是正确的以下所有步骤,但我仍然得到401 AUTHENTICATION_FAILED苹果错误.
我定位的端点是一个POST端点,用于在给定记录名称的情况下检索记录.
我在我的代码中添加了注释,以显示我在不同阶段获得的输出,并且我使用了替代证书,因此我没有提供我的正版私钥:
def self.signature(parameters, date, image_id)
#date: 2016-08-14T14:32:20Z
#parameters: {"records":[{"recordName":"7DBC4FAD-D18C-476A-89FB-14A515098F34"}]}
encoded_parameters = Digest::SHA256.base64digest(parameters)
#encoded_parameters: 6gmJ4AvmJgkNY4SJm6ImOxZaZ07J7cih/tRXI0zkRjQ=
url_subpath = CloudKit.url_subpath
#url_subpath: /database/1/iCloud.ProjectDent.TwIM/development/public/records/lookup
message = date + ':' + encoded_parameters + ':' + url_subpath
#message: 2016-08-14T14:23:35Z:6gmJ4AvmJgkNY4SJm6ImOxZaZ07J7cih/tRXI0zkRjQ=:/database/1/iCloud.ProjectDent.TwIM/development/public/records/lookup
private_key = OpenSSL::PKey.read(File.read('altkey.pem'))
signature = private_key.dsa_sign_asn1(OpenSSL::Digest::SHA256.digest(message))
#signature: -? WX?xfc???????,????v?3+Xt!?$R?_Y?×*?,?3??Z-\#????h
encoded_signature = Base64.strict_encode64(signature)
#encoded_signature: MEUCIFdYlHhmrxoIY8KW1tT6yZT17bYsP8ia09WTdpEzK1h0AiEA0yRSh39fWYHDlyqJLNgzhr9aLVwj2cWtkse3aA0tGZI=
return encoded_signature
end
def self.headers(parameters, image_id)
date = Time.now.utc.iso8601
signature = self.signature(parameters, date, image_id)
headers = {
'X-Apple-CloudKit-Request-KeyID' => CloudKit.key_id, …Run Code Online (Sandbox Code Playgroud) cloudkit ×10
ios ×4
ruby ×2
android ×1
ecdsa ×1
icloud-api ×1
javascript ×1
json ×1
node.js ×1
openssl ×1