gpt4 book ai didi

ios - 记录更新的 CloudKit 推送通知停止工作

转载 作者:可可西里 更新时间:2023-11-01 03:59:04 25 4
gpt4 key购买 nike

编辑:今天 27.08.2015 重新测试,它再次运行,Apple 已修复它。

我有一个处于开发模式的应用程序。该应用程序使用 CKSubscription 获取服务器更改的通知,配置了所有三个选项:创建、更新、删除。一切正常,但最近在回归测试期间我发现应用程序没有收到记录更新通知,创建和删除通知仍在工作。当我在仪表板上检查时,所有三个选项的订阅类型都已正确设置,并且应用程序已为 CKSubscription 注册,就像几天前它工作得很好时一样。我没有从 CloudKit 收到任何错误。开发环境的重置没有帮助。我已经重新测试了我确信它能正常工作的版本,并得到了相同的结果。

知道是什么导致了这个问题,我还应该检查/尝试什么?

附加信息:我想服务器端可能出了问题。我没有更改我订阅 CloudKit 事件和处理推送通知的代码中的任何内容——无论如何,它工作的版本也不再收到更新通知。我正在处理的应用程序已发布,因此无法更改容器。不确定这是否会导致问题,只是想提一下:该应用程序使用相同的容器将核心数据存储在云中 - 应用程序升级的目标是将数据迁移到 CloudKit 并将其用作云专门存储。令人困惑的是,几周来一切正常,但突然没有任何明确原因停止工作,可能是由于密集测试、添加记录类型的负载影响......

使用从头开发的应用进行测试:我写了一个简单的测试应用程序来检查接收通知。我只能收到有关记录创建的通知。我的代码有什么问题:

import UIKit
import CloudKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

let container = CKContainer.defaultContainer()

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

let settings = UIUserNotificationSettings(forTypes: .Alert, categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()

return true
}

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
println("didFailToRegisterForRemoteNotificationsWithError: \(error)")
}

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
println("didRegisterForRemoteNotificationsWithDeviceToken: \(deviceToken)")
subscribe()
}

func subscribe() {
// let predicate = NSPredicate(format: "text != %@", argumentArray: [""])
// let predicate = NSPredicate(format: "TRUEPREDICATE", argumentArray: nil)
let predicate = NSPredicate(value: true)
let subscription = CKSubscription(recordType: "Note", predicate: predicate, options: .FiresOnRecordDeletion | .FiresOnRecordUpdate | .FiresOnRecordCreation)
let notificationInfo = CKNotificationInfo()
notificationInfo.alertBody = ""
subscription.notificationInfo = notificationInfo
let publicDatabase = container.publicCloudDatabase
println("subscribing with CloudKit...")
publicDatabase.saveSubscription(subscription, completionHandler: { (returnedSubscription, error) -> Void in
if let error = error {
println("subscription error \(error.localizedDescription)")
} else {
println("subscription ok")
}
})
}

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
let ckNotification = CKQueryNotification(fromRemoteNotificationDictionary: userInfo)
println("didReceiveRemoteNotification: \(ckNotification)")
}

func applicationWillResignActive(application: UIApplication) {}

func applicationDidEnterBackground(application: UIApplication) {}

func applicationWillEnterForeground(application: UIApplication) {}

func applicationDidBecomeActive(application: UIApplication) {}

func applicationWillTerminate(application: UIApplication) {}

最佳答案

我过去曾经历过这种行为。就我而言,我可以通过删除订阅并重新创建来解决它。您应该从代码而不是仪表板执行此操作。从仪表板执行此操作仅适用于您登录到仪表板的帐户。

关于ios - 记录更新的 CloudKit 推送通知停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31108576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com