如何设置最小的 CKSubscription?

Posted

技术标签:

【中文标题】如何设置最小的 CKSubscription?【英文标题】:How to set up a minimal CKSubscription? 【发布时间】:2014-07-23 08:25:43 【问题描述】:

我想设置一个简单的CKSubscription,通知我recordType 已创建,如何?

【问题讨论】:

【参考方案1】:

经过一段时间的试验,这是设置最小 CKSubscription 的方法。您必须在设备上对其进行测试,推送通知在模拟器上不起作用。您可以在仪表板中添加记录,这也会触发推送通知。

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool 

    application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert, categories: nil))
    application.registerForRemoteNotifications()
        return true


func someFunc()  // <- you need to call once in app life time, and again when it was removed / installed 
     let defaultContainer = CKContainer.defaultContainer()
     let publicDatabase = defaultContainer.publicCloudDatabase   
     let subs = CKSubscription(recordType: "xxx", predicate: NSPredicate(value: true), subscriptionID: "yyy", options: .FiresOnRecordCreation)
     subs.notificationInfo = CKNotificationInfo()
     subs.notificationInfo.alertBody = "New item added"
     publicDatabase.saveSubscription(subs, completionHandler: subscription, error in)


func application(application: UIApplication!, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]!)

    // <- this method will invoked

【讨论】:

重要的是,如果alertBody = "",则应用关闭时不会出现警报视图,至少必须设置一个空字符【参考方案2】:

您是否注册了通知?您的应用程序中应该有类似的内容 didFinishLaunchingWithOptions:

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert | .Badge | .Sound, categories: nil))
application.registerForRemoteNotifications()

我创建了一个可在https://github.com/evermeer/EVCloudKitDao 获得的工作演示

【讨论】:

检查您的代码,我需要在每次启动订阅时创建,还是在应用程序的生命周期中只创建一次以获取通知 不,您只需创建一次订阅。如果您尝试创建完全相同的订阅,您将收到类似订阅已存在的错误。 是的,但是在我停止应用程序并重新启动后,我可以重新创建它,并且我可以从其他同名设备创建订阅,对吗?! 当您重新创建它时,您应该会看到它已经存在的错误。由于它已经存在,您可以忽略该错误。如果您在另一台设备上创建它,但 iCloud id 相同,那么您仍然应该看到该错误。如果您使用不同的 iCloud id 创建它,那么没关系

以上是关于如何设置最小的 CKSubscription?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Objective-c 中删除 cksubscription?

如何使用 CKSubscription 检查 CKAsset 更改?

如何快速解析 TVos 中返回的 CKSubscription 用户信息字段

有条件的 CKSubscription 不会触发通知

CloudKit CKSubscription 通知基础

CKSubscriptionOptionsFiresOnRecordUpdate 类型的 CKSubscription 不起作用