如何设置最小的 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 用户信息字段
CKSubscriptionOptionsFiresOnRecordUpdate 类型的 CKSubscription 不起作用