标签: cloudkit

我可以在Android或基于Web的应用程序上使用CloudKit吗?

我一直在编写应用程序,使用CloudKit会让我的生活变得更轻松.但是,此应用程序需要iOS应用程序旁边的基于Web的应用程序.我想知道是否有任何方法可以将CloudKit与Android或基于Web的应用程序结合使用.

虽然使用Apple提供的API可能无法直接实现这一点,但另一种可能性是将OS X Server用于CloudKit.是否可以/遵守Apple的CloudKit服务条款?

谢谢!

android ios cloudkit

21
推荐指数
3
解决办法
1万
查看次数

如何在没有谓词的情况下创建CKQuery?

我需要查询所有记录类型,而不进行任何过滤.我试过两种方法:

let query = CKQuery(recordType: "Pm", predicate: nil)
let query = CKQuery(recordType: "Pm", predicate: NSPredicate(format: ""))
Run Code Online (Sandbox Code Playgroud)

我收到了错误:

'NSInvalidArgumentException',原因:'无法解析格式字符串""'

怎么做?

nspredicate swift cloudkit ckquery

21
推荐指数
2
解决办法
3338
查看次数

Cloudkit JS && Node JS

我目前正在尝试使用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?

提前致谢

javascript node.js ios cloudkit cloudkit-web-services

20
推荐指数
1
解决办法
3538
查看次数

验证来自iOS应用的后端来电

我试图找到相当于这个Android验证,但对于iOS.

最初发布在博客文章中, 但现在已合并到主要的Android文档中,验证让您知道3件事:然后,您知道:

  1. 该令牌由Google发布.
  2. 令牌被发送到由有效负载的电子邮件字段中标识的人员操作的设备.
  3. 令牌是由有效负载的azp字段中的客户端ID标识的Android应用获得的.

关键是:

GoogleAuthUtil会发现Android应用和网络客户端ID位于同一个项目中,未经用户批准,会将ID令牌返回给Google签名的应用.

因此,我能够在不中断用户的情况下验证后端呼叫.

苹果公司是否有类似于iOS的东西,当苹果公司观察到iOS应用程序和网络客户端ID时,我可以获得Apple签署的ID令牌?

我发现了一个试图找到类似问题SO问题,但我希望找到一个更简单的解决方案.这个问题已经超过一年了,所以我希望可能有更好的答案,可能还有新的CloudKit网络服务.

google-authentication ios cloudkit cloudkit-web-services

19
推荐指数
1
解决办法
1657
查看次数

NSPersistentCloudKitContainer:如何检查数据是否同步到 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。

core-data cloudkit ios13 nspersistentcloudkitcontainer

19
推荐指数
1
解决办法
1690
查看次数

未收到CloudKit推送通知

我正在编写一个使用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)

ios ios8 cloudkit cksubscription

18
推荐指数
1
解决办法
3978
查看次数

保存CloudKit记录"未经过身份验证"(9/1002)""此请求需要经过身份验证的帐户""

在模拟器中保存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呻吟说"这个设备"(模拟器)不允许这样做.想法有人吗?

ios cloudkit

18
推荐指数
1
解决办法
3648
查看次数

在CloudKit开发环境中使用TestFlight

是否可以使用CloudKit的"开发"环境通过iTunes Connect向新的TestFlight提交应用程序?

似乎只有AdHoc Provisioning Profiles在从Organizer进行"导出"时要求首选的CloudKit容器名称(生产或开发),但AdHoc Provisioning配置文件不包含向iTunes提交应用程序所需的"beta-reports-active"权利连接并允许TestFlight使用.

因此,如果您想使用新的iTunes Connect版本的TestFlight来测试基于CloudKit的应用程序,您必须使用生产环境.其他人遇到过这个问题吗?

ios testflight cloudkit

18
推荐指数
2
解决办法
3410
查看次数

如何使用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我也创建了相应的推送通知证书,虽然我只是下载它们,因为我与这些文件无关.

  1. 我忘了做某事吗?
  2. 我没有正确测试吗?
  3. 是否有人设法在订阅触发的设备上获取远程通知?

更新15/06/14显然这是苹果方面的一个错误,让我们等几个星期. https://developer.apple.com/library/content/samplecode/CloudAtlas/Introduction/Intro.html#//apple_ref/doc/uid/TP40014599


更新18/05/15

如果有人想知道很久以前Apple已经解决了这个问题,现在它就像魅力一样,虽然你需要做一些考虑:

  1. 确保saveSubscription:completionHandler:方法执行没有错误
  2. 如果您使用[application registerForRemoteNotifications]; 只能在前台获得应用程序的通知,它可能看起来毫无意义,但它非常有用,因为这种推送通知是"无声的",你不需要用户权限来使用它们
  3. 如果你想获得旧的时尚推送通知,弹出请求权限和应用程序外部显示的警报以及你需要使用的所有内容:
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:
                                        UIUserNotificationTypeBadge |
                                        UIUserNotificationTypeSound |
                                        UIUserNotificationTypeAlert
                                                                         categories:nil];
    
    Run Code Online (Sandbox Code Playgroud)

    [application registerUserNotificationSettings:settings];

就这样

iphone notifications ios8 cloudkit cksubscription

17
推荐指数
1
解决办法
2251
查看次数

如何在CloudKit中获取当前用户ID?

我想在公共数据库的表中保存每个用户最多一条记录(即评级).为此,我需要保存当前用户ID或设备ID.但我怎么能得到它?

ios cloudkit

17
推荐指数
3
解决办法
1万
查看次数