Обратные вызовы делегатов push-уведомлений не вызывают - PullRequest
4 голосов
/ 09 июля 2011

Я регистрируюсь на Push-уведомление, вызывая следующий фрагмент кода:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound];

Но в некоторых редких случаях следующий делегат не вызывается:

- (void)application:(UIApplication *)iApplication didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)iNewDeviceToken {

Даже не следуетметод вызывается:

- (void)application:(UIApplication *)iApplication didFailToRegisterForRemoteNotificationsWithError:(NSError *)iError {

В чем может быть причина этого.Я продолжаю работу с потоком приложений после получения токена устройства.Итак, в некоторых редких случаях мое приложение зависает.

Есть подсказка?

Ответы [ 4 ]

9 голосов
/ 17 декабря 2011

Согласно документации, ни один из обратных вызовов не произойдет до тех пор, пока устройство не установит постоянное соединение с push-сервером.Поэтому, если нет доступного Wi-Fi или соединения для передачи данных, обратные вызовы не произойдут - и Apple не считает это ошибкой.Насколько я могу судить, единственными ошибками, которые могут вызвать обратный вызов didFail ..., является некорректная проблема с разрешениями сертификатов / приложений (проблема разработки) или отклонение разрешения пользователем (хотя я могу воспроизвести это лишь время от времениизменив дату и выключив телефон).

0 голосов
/ 24 августа 2012

Еще одна вещь: если ваш телефон рутирован / сломан для использования в другой сети и т. Д., У вас будут проблемы. Мой телефон был рутирован, и ни один из делегатов не был вызван. Я попросил коллегу положить его на iPad, и он работал нормально, поэтому я знаю, что код в порядке.

Итак, я переустановил ОС на своем телефоне, и она начала работать.

0 голосов
/ 25 июля 2012

Необходимо включить Push-уведомления в профиле обеспечения, настроить его на портале разработчика с помощью идентификатора приложения. Тогда это должно работать.

0 голосов
/ 04 ноября 2011

Подсказка тут же: вы получаете экземпляр NSError, когда он выходит из строя.Поэтому, чтобы выяснить, почему он ошибается, осмотрите NSError и посмотрите, что он говорит вам.

Вероятно, вы должны хотя бы обработать этот случай в своем приложении, например, показать сообщение об ошибке в виде строки"Не удалось зарегистрировать приложение, повторите попытку ...".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...