2016-01-03 1 views
2

Почему-то didReceiveRemoteNotification или ReceivedRemoteNotification никогда не срабатывает; когда я его реализовал некоторое время назад, это было прекрасно, по крайней мере, когда я тестировал его, когда приложение было в фоновом режиме. Теперь, спустя две недели, и мое приложение более зрелое, я возвращался к части уведомлений, чтобы узнать, что в какой-то конкретный момент события увольняются. Устройство получает всплывающее окно push-уведомления, и когда я нажимаю его, приложение открывается, но didFinishLaunchingWithOptions launchOptions равно нулю.didReceiveRemoteNotification или ReceivedRemoteNotification никогда не срабатывает

Что могло бы заставить это перестать работать?

  • Push-уведомления включен
  • фона Режимы работы (удаленные уведомления и фона выборки) позволило

в didFinishLaunchingWithOptions:

if application.respondsToSelector("registerUserNotificationSettings:") { 

     let setting = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil); 
     application.registerUserNotificationSettings(setting); 
     application.registerForRemoteNotifications(); 

    } 

было добавлено следующее:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
    deviceTokenStr = DeviceTokenToString(deviceToken) 
    print(deviceTokenStr) 
} 

и

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) { 
    print("Device token for push notifications: FAIL") 
} 

то два следующих FUNC:

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) { 
    print("notification received") 
} 

и

func application(application: UIApplication, ReceivedRemoteNotification userInfo: [NSObject : AnyObject]) { 
    print("notification received") 
} 

didRegisterForRemoteNotificationsWithDeviceToken возвращает маркер для толчка, и в тренажере вызывает didFailToRegis terForRemoteNotificationsWithError, пока все работает нормально.

Когда приложение находится в фоновом режиме и инструктирует сервер отправлять push, он приходит на телефон и нажимает на него, откроет приложение.

, но ничего внутри didReceiveRemoteNotification или ReceivedRemoteNotification не срабатывает.

Я просмотрел множество сообщений stackoverflow, но ни одна из них, похоже, не имеет той же проблемы и/или решения, после того как вы пытаетесь использовать всевозможные комбинации в разных сообщениях, я не могу заставить ее вернуться к работе.

APN полезная нагрузка Основные только «АПС»:

{ 
    "alert":"string message", 
    "sound":"default" 
} 

Было бы замечательно, если бы кто-то может дать мне руку, чтобы выяснить, почему она остановилась.

Заранее спасибо.

Edit: добавили содержание к функциям

Когда приложение работает, он будет показывать только 64 символов нажимных маркеров в журнале, никаких ошибок не показаны.

на консоли устройства протоколирования это показывает, что это на время толчок уведомление приходит и, когда приложение работает в фоновом режиме:

Jan 3 21:20:29 Marcs-iPhone SpringBoard[58] <Warning>: SBLockScreenNotificationListController: Attempting to remove a bulletin I don't have 

ничего не происходит в лог консоли, когда приложение является активным приложением.

Edit 2: Log добавляемые APN Tester

2016-01-03 21:42:59 +0000: Connected to server gateway.sandbox.push.apple.com 
2016-01-03 21:42:59 +0000: Set SSL connection 
2016-01-03 21:42:59 +0000: Set peer domain name gateway.sandbox.push.apple.com 
2016-01-03 21:42:59 +0000: Keychain Opened 
2016-01-03 21:42:59 +0000: Certificate data for Apple Push Services: com.xxxxxxx.xxxxxxxx initialized successfully 
2016-01-03 21:42:59 +0000: Sec Identity created 
2016-01-03 21:42:59 +0000: Client certificate created 
2016-01-03 21:42:59 +0000: Connected 
2016-01-03 21:42:59 +0000: Token: <xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx> 
2016-01-03 21:42:59 +0000: Written 92 bytes sending data to gateway.sandbox.push.apple.com:2195 
2016-01-03 21:42:59 +0000: Disconnected from server gateway.sandbox.push.apple.com:2195 

Сообщение прибывали по телефону при выполнении APN послал, хотя и ничего не показал в журнале консоли устройства, ни отладочный вывод

+2

Можете ли вы продемонстрировать реализацию методов, которые, по вашему мнению, не работают? didRegisterForRemoteNotificationsWithDeviceToken и didFailToRegisterForRemoteNotificationsWithError не кажутся точными, поскольку у них отсутствуют параметры, а капитализация не соответствует декларации. – Joride

+0

сейчас i'am только делает печать ("уведомление") полученый в didReceiveRemoteNotification и ReceivedRemoteNotification в didRegisterForRemoteNotificationsWithDeviceToken я должен следующее: 'пусть deviceTokenStr = DeviceTokenToString (deviceToken)' ' печать (deviceTokenStr)' где DeviceTokenToString является небольшая функция, которая удаляет < > и пробелы –

+0

Пожалуйста, включите полную реализацию в свой вопрос. Кроме того, взгляните на консоль, а не на отладочную, но на одну из них. Это может привести к некоторым ошибкам, которые могут вам помочь. – Joride

ответ

1

отсортированных и ответьте здесь, если кто-то другой столкнется с той же проблемой.

После долгого копания код функционирует и работает, у меня было одно обходное решение в моем проекте, чтобы устранить проблему исключения _handleNonLaunchSpecificActions: forScene.

extension UIApplication { 
    func _handleNonLaunchSpecificActions(arg1: AnyObject, forScene arg2: AnyObject, withTransitionContext arg3: AnyObject, completion completionHandler:() -> Void) { 
     //catching handleNonLaunchSpecificActions:forScene exception on app close 
    } 
} 

после удаления этого обходного пути уведомления снова работают как шарм.

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