2015-06-29 4 views
6

EDIT: Heute wieder getestet 27.08.2015 und es funktioniert wieder, Apple hat es behoben.CloudKit Push-Benachrichtigungen bei Datensatz-Update funktioniert nicht mehr

Ich habe eine Anwendung im Entwicklungsmodus. Die Anwendung verwendet CKSubscription, um über Änderungen auf dem Server benachrichtigt zu werden, die für alle drei Optionen konfiguriert sind: Erstellen, Aktualisieren, Löschen. Alles funktionierte gut, aber kürzlich habe ich bei Regressionstests festgestellt, dass die Anwendung keine Benachrichtigungen zu Datensatzaktualisierungen erhält. Die Benachrichtigungen zum Erstellen und Löschen funktionieren immer noch. Die Testtypen sind für alle drei Optionen richtig eingestellt, da ich im Dashboard überprüft habe und die Anwendung für CKSubscription registriert ist, wie es vor ein paar Tagen war, als es wie Charme arbeitete. Ich bekomme keine Fehler von CloudKit. Das Zurücksetzen der Entwicklungsumgebung hat nicht geholfen. Ich habe die Version, mit der ich sicher bin, dass sie funktioniert, erneut getestet und die gleichen Ergebnisse erzielt.

Irgendeine Idee, was dieses Problem verursachen könnte, was sollte ich noch prüfen/versuchen?

Zusätzliche Informationen: Ich denke, etwas könnte auf der Serverseite schief gehen. Ich habe im Code, wo ich für CloudKit-Ereignisse abonniere und Push-Benachrichtigungen bearbeite, nichts geändert - jedenfalls hat die Version, in der sie funktioniert, keine Update-Benachrichtigungen mehr erhalten. Die Anwendung, an der ich gerade arbeite, ist veröffentlicht, somit ist Containerwechsel nicht möglich. Nicht sicher, ob dies das Problem verursacht, möchte ich nur erwähnen: Die App verwendet denselben Container zum Speichern der Core-Daten in der Cloud - Ziel des App-Upgrades ist es, Daten in das CloudKit zu migrieren und als Cloud zu verwenden Lagerung ausschließlich. Es ist verwirrend, dass alles für Wochen funktionierte gut und funktioniert plötzlich ohne ersichtlichen Grund, wahrscheinlich als die Wirkung der Belastung durch intensive Tests, Datensatztypen Hinzufügen ...

-Test mit App von Grund auf neu entwickelt: Ich habe eine einfache Test-App geschrieben, um den Empfang von Benachrichtigungen zu überprüfen. Ich kann nur die Benachrichtigung bei der Datensatzerstellung erhalten. Was ist falsch mit meinem Code:

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) {} 

}

+0

das gleiche Problem: http://Stackoverflow.com/q/31103522/1646157 –

+0

Meine Problemumgehung ist, anstatt Abonnements zu verwenden Ich lade alle Datensätze, die seit der letzten Überprüfung geändert wurden. Und zusätzlich in jeder Minute recherchiere ich auch geänderte Datensätze. 'NSPredate (format:" modificationDate>% @ ", lastUpdate)' –

+0

Was denkst du über meine andere Problemumgehung? http://stackoverflow.com/questions/31499029/alternatives-to-update-notification-that-does-not-work –

Antwort

1

ich dieses Verhalten in der Vergangenheit erlebt haben. In meinem Fall könnte ich es lösen, indem ich einfach das Abonnement lösche und es neu erstelle. Sie sollten das aus Code und nicht aus dem Dashboard tun. Dies über das Dashboard zu tun funktioniert nur für das Konto, das Sie im Dashboard gespeichert haben.

+0

thx für Hinweis, ich habe es mehrmals getan, aber hat nicht geholfen –

+0

Wie hast du das Abonnement gelöscht - Über das Cloudkit Dashboard? –

+0

versucht, beides programmgesteuert und im Dashboard ohne Glück zu löschen. –