我一直在编写应用程序,使用CloudKit会让我的生活变得更轻松.但是,此应用程序需要iOS应用程序旁边的基于Web的应用程序.我想知道是否有任何方法可以将CloudKit与Android或基于Web的应用程序结合使用.
虽然使用Apple提供的API可能无法直接实现这一点,但另一种可能性是将OS X Server用于CloudKit.是否可以/遵守Apple的CloudKit服务条款?
谢谢!
我需要查询所有记录类型,而不进行任何过滤.我试过两种方法:
let query = CKQuery(recordType: "Pm", predicate: nil)
let query = CKQuery(recordType: "Pm", predicate: NSPredicate(format: ""))
Run Code Online (Sandbox Code Playgroud)
我收到了错误:
'NSInvalidArgumentException',原因:'无法解析格式字符串""'
怎么做?
我目前正在尝试使用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网络服务.
我已实现NSPersistentCloudKitContainer将我的数据同步到CloudKit,我想知道同步已完成并且没有其他待同步的更改。
当我尝试重新安装该应用程序时,我开始从 CloudKit 取回我的数据并开始在控制台中打印某些日志。从 CloudKit 取回所有数据大约需要 30 秒。一些日志提到了NSCloudKitMirroringDelegate. 看起来NSCloudKitMirroringDelegate知道剩余的同步请求,但我找不到任何关于确保同步完成的信息。
这里有一些日志确实表明 NSCloudKitMirroringDelegate 知道同步何时完成。
CoreData: CloudKit: CoreData+CloudKit: -NSCloudKitMirroringDelegate checkAndExecuteNextRequest::检查待处理的请求。
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _enqueueRequest:]_block_invoke(714): : 入队请求: A2BB21B3-BD1B-4500-865C-6C848D67081D
CoreData:CloudKit:CoreData+CloudKit:-[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]_block_invoke(2085)::推迟额外的工作。还有一个活动请求:A3E1D4A4-2BDE-4E6A-8DB4-54C96BA0579E
CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]_block_invoke(2092): :没有更多的请求要执行。
有什么办法可以知道数据完全同步了吗?我需要向用户显示某些 UI。
我正在编写一个使用CloudKit的小应用程序.出于某种原因,当有与查询匹配的新记录时,应用程序不会收到任何通知.有没有人能够使这个功能工作?
我在应用程序中创建了新记录,但也在CloudKit仪表板中创建了新记录.记录非常简单,只有一个整数字段.
创建记录:
CKRecord *record = [[CKRecord alloc] initWithRecordType:kSISCloudKitRecordTypeTest];
record[@"value"] = @1;
[self.publicDatabase saveRecord:record completionHandler:^(CKRecord *record, NSError *error)
{
// this call succeeds, no error.
}];
Run Code Online (Sandbox Code Playgroud)
注册通知:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[application registerForRemoteNotifications];
}
Run Code Online (Sandbox Code Playgroud)
创建订阅:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"value = 1"];
CKSubscription *subscription = [[CKSubscription alloc]
initWithRecordType:kSISCloudKitRecordTypeTest
predicate:predicate
options:CKSubscriptionOptionsFiresOnRecordCreation];
CKNotificationInfo *notificationInfo = [CKNotificationInfo new];
notificationInfo.alertLocalizationKey = @"LOCAL_NOTIFICATION_KEY";
notificationInfo.soundName = @"Party.aiff";
notificationInfo.shouldBadge = YES;
subscription.notificationInfo = notificationInfo;
[self.publicDatabase saveSubscription:subscription
completionHandler:^(CKSubscription *subscription, NSError *error)
{
// this succeeds as …Run Code Online (Sandbox Code Playgroud) 在模拟器中保存CKRecord会出现以下错误:
[publicDatabase saveRecord:cloudRouteEntity
completionHandler:^(CKRecord *record, NSError *error) {
if (error) {
NSLog(@"An error occured in %@: %@", NSStringFromSelector(_cmd), error);
abort();
} else {
dispatch_async(dispatch_get_main_queue(), ^(void) {
//gui
NSLog(@"Created Cloudkit Entity");
});
}
}];
Run Code Online (Sandbox Code Playgroud)
但是,它适用于手机.为什么模拟器无法访问CloudKit数据库?
编辑:我认为通过将iCloud帐户添加到模拟器中我会很聪明 - 但iCloud呻吟说"这个设备"(模拟器)不允许这样做.想法有人吗?
是否可以使用CloudKit的"开发"环境通过iTunes Connect向新的TestFlight提交应用程序?
似乎只有AdHoc Provisioning Profiles在从Organizer进行"导出"时要求首选的CloudKit容器名称(生产或开发),但AdHoc Provisioning配置文件不包含向iTunes提交应用程序所需的"beta-reports-active"权利连接并允许TestFlight使用.
因此,如果您想使用新的iTunes Connect版本的TestFlight来测试基于CloudKit的应用程序,您必须使用生产环境.其他人遇到过这个问题吗?
到目前为止,我无法订阅工作.(在我的设备上收到推送通知,订阅似乎已成功创建)
我一直在玩[CloudKitAtlas] [1].我在该自述文件的自述文件中做了它所说的内容:
要求
建立
- iOS 8.0 SDK和Xcode 6
- 在iCloud中启用CloudKit授权(来自功能)
- 更改容器名称以在开发者帐户中设置容器
我能够启动应用程序,它成功注册远程通知:
2014-06-09 11:15:17.712 CloudKitAtlas [841:220562]已注册使用令牌的推送通知:
我也能够创建记录,查询和订阅:
2014-06-09 11:15:21.966 CloudKitAtlas [841:220934]订阅了Item
如果我转到仪表板,我会看到几个订阅.但是当我创建新记录时没有任何反应,回调:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)info
Run Code Online (Sandbox Code Playgroud)
永远不会执行(注意:我在iPhone 5S上运行应用程序,而不是在模拟器上运行)
我正在使用带有显式bundle id(没有通配符)的调试签名,对于这个app id我也创建了相应的推送通知证书,虽然我只是下载它们,因为我与这些文件无关.
更新15/06/14显然这是苹果方面的一个错误,让我们等几个星期. https://developer.apple.com/library/content/samplecode/CloudAtlas/Introduction/Intro.html#//apple_ref/doc/uid/TP40014599
更新18/05/15
如果有人想知道很久以前Apple已经解决了这个问题,现在它就像魅力一样,虽然你需要做一些考虑:
Run Code Online (Sandbox Code Playgroud)UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes: UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];[application registerUserNotificationSettings:settings];
就这样
我想在公共数据库的表中保存每个用户最多一条记录(即评级).为此,我需要保存当前用户ID或设备ID.但我怎么能得到它?
cloudkit ×10
ios ×7
ios8 ×2
android ×1
ckquery ×1
core-data ×1
ios13 ×1
iphone ×1
javascript ×1
node.js ×1
nspersistentcloudkitcontainer ×1
nspredicate ×1
swift ×1
testflight ×1