2016-04-27 21 views
0

Ich bin auf der neuesten, Testversion von PubNub auf iOS 8 +, Xcode 7.3, versuchen, eine Chat-App zu bauen. Ich bewerte PubNub als Alternative zu einem anderen Chatserver.PubNub iOS App erhält keine Push-Benachrichtigungen

Ich habe die Anweisungen in den PubNub-Dokumenten über Apple Push-Benachrichtigungen befolgt, aber meine App erhält keine Push-Benachrichtigungen, wenn sie im Hintergrund ist.

Ich habe das p12-Zertifikat erstellt und in mein PubNub-Keyset importiert. Ich habe Push-Benachrichtigungen in meinen Xcode-Allgemeinen Einstellungen aktiviert. Ich habe den Swift-Code wie in den PubNub-Dokumenten angegeben geschrieben. Ich bin in der Lage, erfolgreich zu veröffentlichen und zu abonnieren, aber meine Anwendung (Anwendung: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) -Methode zeigt mir ein 'Null' Token.

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate, PNObjectEventListener { 
    var window: UIWindow? 
    // Instance property 
    var client: PubNub? 

    // For demo purposes the initialization is done in the init function so that 
    // the PubNub client is instantiated before it is used. 
    override init() { 

     // Instantiate configuration instance. 
     let configuration = PNConfiguration(publishKey: "mypubkey", subscribeKey: "mysubkey") 
     // Instantiate PubNub client. 
     client = PubNub.clientWithConfiguration(configuration) 
     super.init() 
     client?.addListener(self) 
    } 

und:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
// Override point for customization after application launch. 
self.client?.subscribeToChannels(["my_channel"], withPresence: true) 

let types: UIUserNotificationType = [.Badge, .Sound, .Alert] 
let mySettings: UIUserNotificationSettings = UIUserNotificationSettings(forTypes:types, categories: nil) 
UIApplication.sharedApplication().registerUserNotificationSettings(mySettings) 
UIApplication.sharedApplication().registerForRemoteNotifications() 

return true 
} 

Und in meinen Push-Benachrichtigung Registrierungsmethoden:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
    NSUserDefaults.standardUserDefaults().setObject(deviceToken, forKey: "DeviceToken") 
    NSUserDefaults.standardUserDefaults().synchronize() 
    print("Device Token=\(NSString(data: deviceToken, encoding:NSUTF8StringEncoding))") 
    self.client?.addPushNotificationsOnChannels(["my_channel"], 
     withDevicePushToken: deviceToken, 
     andCompletion: { (status) -> Void in 
    ... 
    }) 
} 

Die Druckmethode zeigt mir, dass die deviceToken Null ist.

Irgendeine Idee, was ich falsch mache? Vielen Dank im Voraus.

+0

Wie auf dem privaten Kanal besprochen, bezieht sich das Abrufen eines Null-Tokens nicht auf PubNub. Wenn Sie jedoch ein gültiges Token erhalten und sich mit PubNub für Channels registrieren und Ihre Push-Benachrichtigungen immer noch nicht erhalten, teilen Sie uns dies bitte mit. –

+0

Testen Sie mit einem Gerät oder einer Simulation, wenn Sie den Null-Token erhalten? Sind Sie ordnungsgemäß versorgt? –

+0

Geräte-Token werden von Apple bereitgestellt (und von PubNub für Push verwendet), werden jedoch von Apple bereitgestellt. Wenn Ihre Bereitstellung nicht korrekt ist (oder Sie auf einer SIM-Karte testen), ist Ihr Geräte-Token gleich Null. Denken Sie daran, dass Simulatoren nie einen Geräte-Token erhalten werden, weil sie keine Geräte sind. Hier ist der Link zur Bereitstellung Ihrer App für Push-Benachrichtigungen in PubNub https://www.pubnub.com/docs/swift/mobile-gateway#Retrieving_your_mobile_device_IDs (Apple hat auch tolle Artikel zu diesem Thema) – gurooj

Antwort

1

Sie haben keine Probleme mit Ihrem Registrierungscode sowie mit dem Gerätemarker. Das Geräte-Token ist eine Binärdatei, die nicht mit NSUTF8StringEncoding codiert werden kann. Sie können den Haltepunkt verwenden, um zu überprüfen, welcher Wert vorhanden ist. Der Aufruf des Erfolgsdelegaten selbst ist jedoch ein Beweis dafür, wie Ihre Anwendung das richtige Geräte-Push-Token von Apple erhalten hat.

Push-Benachrichtigungen erhalten, müssen Sie eigenen Methoden verwenden veröffentlichen, die Sie APNS Nutzlast angeben können. Hier ist eine der Methoden: https://www.pubnub.com/docs/swift/api-reference#publish_arg_6Payload sollte auf APNS Nutzlast Wörterbuch (per-Apple-Spezifikation) eingestellt werden.