fra*_*swa 10 ios swift cloudkit
我正在使用CloudKit编写Swift应用程序.当设备在CloudKit中修改记录时,我希望在其他设备的本地存储中更新相应的记录,而不显示推送通知.
我需要调用registerUserNotificationSettings的didFinishLaunchingWithOptions(这意味着用户必须接受我的应用程序的通知),即使我不打算显示任何推送通知?
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert, categories: nil))
Run Code Online (Sandbox Code Playgroud)
mal*_*hal 15
在这种情况下,您无需致电registerUserNotificationSettings.
您需要添加Info.plist设置"Required background mode"(UIBackgroundModes),"App下载内容以响应推送通知"(remote-notification).并且还打电话registerForRemoteNotifications.最后,设置notificationInfo.shouldSendContentAvailable = YES;您的订阅.
现在,既然您的应用程序正在运行以响应所有通知,您需要小心处理错过通知的情况,您可以使用飞行模式来测试,只有最后一次发送.
请注意,一旦您从任何设备创建了订阅,application:didReceiveRemoteNotification:fetchCompletionHandler:将在使用相同iCloud帐户并安装了应用程序的所有设备上调用.
是的,您确实需要打电话,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
}
Run Code Online (Sandbox Code Playgroud)
您还需要在 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]) {}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |