2016-04-27 3 views
0

Я нахожусь в последней пробной версии PubNub на iOS 8+, Xcode 7.3, пытаясь создать чат-приложение. Я оцениваю PubNub как альтернативу другому чат-серверу.Приложение PubNub iOS не получает push-уведомлений

Я следил за инструкциями в документах PubNub об уведомлениях Apple Push, но мое приложение никогда не получает push-уведомления, когда оно находится в фоновом режиме.

Я создал сертификат p12 и импортировал его в свой набор PubNub. Я включил push-уведомления в моих общих настройках Xcode. Я написал код Swift, как указано в документах PubNub. Я могу успешно опубликовать и подписаться, но метод моего приложения (приложение: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) показывает мне токен 'nil'.

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

и:

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 
} 

И в моих методах регистрации уведомления толчка:

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

Метод печати показывает мне, что deviceToken равна нулю.

Любая идея, что я делаю неправильно? Спасибо заранее.

+0

Как обсуждалось на частном канале, получение нулевого токена не связано с PubNub. Но если вы получите действительный токен, и вы регистрируетесь на каналах с PubNub, и вы все равно не получаете push-уведомления, сообщите нам об этом. –

+0

Вы тестируете устройство или сим, когда получаете нулевой токен? Вы правильно подготовлены? –

+0

Анекдоты устройства предоставляются Apple (и используются PubNub для push), но предоставляются Apple. Если ваше обеспечение неверно (или вы тестируете на сим), то токен вашего устройства будет равен нулю. Помните, что симуляторы никогда не получат токен устройства, поскольку они не являются устройствами. Вот ссылка на предоставление вашего приложения для push-уведомлений в PubNub https://www.pubnub.com/docs/swift/mobile-gateway#Retrieving_your_mobile_device_IDs (у Apple также есть отличные статьи об этом) – gurooj

ответ

1

У вас нет проблем с регистрационным кодом, а также с токеном устройства. Маркер устройства двоичный, который не может быть преобразован в строку с NSUTF8StringEncoding. Вы можете использовать точку останова, чтобы проверить, какое значение есть, но сам вызов успешного делегирования является доказательством того, что ваше приложение получило правильный токен устройства для устройства от Apple.

Чтобы получать уведомления толчка, вы должны использовать правильный публиковать методы, которые позволяют указать APNs полезной нагрузки. Вот один из методов: https://www.pubnub.com/docs/swift/api-reference#publish_arg_6полезная нагрузка должна быть установлена ​​в действительный APNS полезный словарь (спецификация для Apple).

 Смежные вопросы

  • Нет связанных вопросов^_^