2016-06-12 8 views
0

ich mit dem folgenden Abonnement habe Schwierigkeiten:Wolkenjunge Abonnement Elende

let predicate = NSPredicate(format: "gc_alias != %@ AND distanceToLocation:fromLocation:(%K,%@) < %f", 
           self.localPlayer!.alias!, 
           "location", 
           self.currentLocation!, 
           10) 


    let subscription = CKSubscription(recordType: "Player", predicate: predicate, options: .FiresOnRecordCreation) 
    subscription.zoneID = nil 

    let notification = CKNotificationInfo() 
    notification.alertBody = "Nearby Player within Range!" 
    notification.soundName = UILocalNotificationDefaultSoundName 

    subscription.notificationInfo = notification 

    let container = CKContainer.defaultContainer() 
    let publicDb = container.publicCloudDatabase 

    publicDb.saveSubscription(subscription) { (result, error) -> Void in 
     if error != nil { 
      print(error!.localizedDescription) 
     } else { 
      print("SUBSCRIBED SUCCESS") 
      print(result) 
      NSUserDefaults.standardUserDefaults().setBool(true, forKey: "subscribed") 
     } 
    } 

Grundsätzlich, wenn ein neuer Spieler Datensatz erstellt oder aktualisiert ich log der Standort des Benutzers.

Ich möchte Benutzer A per Push benachrichtigt werden, wenn Benutzer B ihren Player-Datensatz erstellt oder aktualisiert und innerhalb von 10 km ist.

Ich glaube, ich habe die Push-Berechtigungen in meiner App korrekt eingerichtet (Benutzer wird aufgefordert, dies zu bestätigen, bevor ihr Sub erstellt wird, zum Beispiel).

Keine Pushs ankommen. Irgendwelche Ideen? Leide ich an einem grundlegenden CK-Missverständnis?

+0

Könnten Sie fügen Sie den Code in dem Sie die CK-Eintrag erstellen und wo Sie für Benachrichtigungen anmelden? – diegog

+0

distanceToLocation: fromLocation :() gibt Meter zurück, nicht Kilometer. Sie müssen 10000 statt 10 übergeben. – diegog

+0

Diegog FTW! Meter schienen es zu gewinnen! Dazu gibt es im Internet überraschend Fehlinformationen. : | – Genericrich

Antwort

0

Sie scheinen nicht für Push-Benachrichtigungen Registrierung werden:

iOS Developer Library: Subscribing to Record Changes

Abonnements zur Datenbank Speichern nicht automatisch Ihre App so konfigurieren, Benachrichtigungen zu erhalten, wenn ein Abonnement Feuer. CloudKit verwendet den Apple Push Notification-Dienst (APNs), um Abonnementbenachrichtigungen an Ihre App zu senden. Daher muss sich Ihre App registrieren, damit Push-Benachrichtigungen sie empfangen können.

Nach Hacking with Swift: Delivering notifications with CloudKit push messages: CKSubscription and saveSubscription sollten Sie:

Zum AppDelegate.swift und setzen diesen Code in das didFinishLaunchingWithOptions Methode:

let notificationSettings = UIUserNotificationSettings(forTypes: [.Alert, .Sound], categories: nil) 
UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings) 
UIApplication.sharedApplication().registerForRemoteNotifications() 

Und

Für die wegen der Fertigstellung könnten Sie optional Fangen Sie auch die didReceiveRemoteNotification-Nachricht ab, die an Ihren App-Delegaten gesendet wird. Dieser wird aufgerufen, wenn während der Ausführung der App eine Push-Nachricht eintrifft. So etwas wie dies sollte den Trick tun:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
    if let pushInfo = userInfo as? [String: NSObject] { 
     let notification = CKNotification(fromRemoteNotificationDictionary: pushInfo) 

     let ac = UIAlertController(title: "What's that Whistle?", message: notification.alertBody, preferredStyle: .Alert) 
     ac.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) 

     if let nc = window?.rootViewController as? UINavigationController { 
      if let vc = nc.visibleViewController { 
       vc.presentViewController(ac, animated: true, completion: nil) 
      } 
     } 
    } 
} 
+0

Ich melde mich woanders für Benachrichtigungen an. Was ich wissen möchte, ist, dass diese Art von Abonnement für die Benachrichtigung von Spieler A funktioniert, dass Spieler B sein Spielerobjekt in CK mit einem Ort aktualisiert hat, der sich innerhalb von 10 KM von seiner aktuellen Position befindet. In meinem Dashboard mit zwei Konten auf zwei Testgeräten sehe ich immer noch nur einen Abonnementtyp. – Genericrich

+0

Verleihung von Kopfgeld an Didgog für seine Beobachtung über Meter gegen km. – Genericrich