是的,您确实需要致电registerUserNotificationSettings,即使您只需要后台远程通知。所以用户将被提示通知权限。这是没有意义的,因为用户不会看到通知,但事实就是如此。
我用这个来设置它:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let settings = UIUserNotificationSettings(forTypes: .None , categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
}
确保在调用 CloudKit saveSubscription 时提供shouldSendContentAvailable = true。以下代码用于订阅自定义区域:
let subscription = CKSubscription(zoneID:zoneID, options: CKSubscriptionOptions(rawValue: 0))
let notificationInfo = CKNotificationInfo()
notificationInfo.shouldSendContentAvailable = true
subscription.notificationInfo = notificationInfo
CKContainer.defaultContainer().privateCloudDatabase.saveSubscription(subscription) { subscription, error in
}
您还需要在 Xcode 下为您的项目启用背景模式功能,并勾选远程通知框。
用户可以转到“设置”应用来禁用您应用的通知。但是您仍然会收到 CloudKit 服务器的远程通知触发。
在您的 AppDelegate 中实现以下函数以接收远程通知:
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {}
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {}