Apple push-уведомление не меняет значок значка автоматически

Я видел, как почтовое приложение на моем iPhone (4S, iOS 5.1) автоматически обновляет счетчик значков, если приходит новая почта, даже если приложение не запущено. Значит, можно добиться такого же поведения и в моем приложении, верно?

Мое приложение успешно регистрируется для push-уведомлений для всех 3-х типов - значок, оповещение и звук. Настройки телефона включены для всех 3 типов удаленных уведомлений для этого приложения.

Мое приложение получает удаленные уведомления и показывает оповещения, воспроизводит звук, но не обновляет номер значка. Если я запускаю приложение с помощью кнопки «Просмотр» в предупреждении, мое приложение может отлично считывать значение значка, и я могу изменить / удалить / установить значок значка из кода.

Какая-либо конкретная причина, по которой iOS не может автоматически изменить значок значка моего приложения при получении уведомления? Я видел все похожие сообщения, все они обсуждают либо настройки телефона, либо типы уведомлений, которые он зарегистрировал, либо проверку того, что полезная нагрузка JSON включает значок или нет.

Есть ли другая причина, которая может вызвать эту проблему?

Вот мои блоки кода:

Регистрируйтесь для получения APN каждый раз при запуске приложения -

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

Токен устройства получен практически мгновенно. Токен отправлен провайдеру, и я получаю уведомления. Оповещения и звуки работают. Но значок не действует автоматически, пока я не запустил приложение и не изменил его вручную. Пожалуйста помоги.


person zinnuree    schedule 03.07.2012    source источник
comment
установлен ли ваш значок на +1, когда вы отправляете уведомление? или только 1?   -  person mkral    schedule 03.07.2012
comment
Из любопытства, для чего вы используете push-уведомления?   -  person Wug    schedule 03.07.2012
comment
установите +1 или сколько уведомлений вам нужно добавить.   -  person mkral    schedule 03.07.2012
comment
На самом деле похоже, что это может работать только на урбанистике. В других сообщениях говорится, что вам нужно отслеживать серверную сторону уведомлений или отправлять счет на сервер.   -  person mkral    schedule 03.07.2012
comment
@mkral, я попробую, но яблоко не предлагает использовать +1 developer.apple.com/library/ios/#DOCUMENTATION/   -  person zinnuree    schedule 03.07.2012
comment
Я был неправ, вы можете сделать это на UrbanAirship, но по умолчанию Apple этого не допускает. Вам следует отслеживать количество значков на сервере.   -  person mkral    schedule 03.07.2012
comment
Если я сохраню счетчик значков на сервере, а затем снова отправлю его в приложение через APN, это будет означать то же самое. Значок не изменится сам. Я могу обновить только с помощью кода. Однако спасибо за ваш ответ. Придется теперь немного поучиться ...   -  person zinnuree    schedule 03.07.2012


Ответы (3)


У меня тоже была такая же проблема. Значок значка не цитировался. После многих часов попыток настроить JSON (после того, как приложение на телефоне показало значки, звуки, предупреждения), проблема заключалась в том, что я добавил UIRemoteNotificationTypeNewsstandContentAvailability в качестве одного из типов предупреждений, для которых мое приложение регистрировало. (Я сошел с ума, просто все собирая)

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

person James Boutcher    schedule 26.11.2012
comment
Спасибо! газетный киоск тоже оказался моей проблемой. - person Perry; 03.01.2013
comment
Спасибо! много. (Я тоже сошел с ума). - person majorl3oat; 23.01.2013
comment
Большое вам спасибо! полдня потратил на эту проблему. - person PSsam; 26.11.2013
comment
Ага. Та же самая проблема, и это решило ее. Огромное спасибо. - person Andrew Gertig; 08.12.2013
comment
Спасибо! Я бы потратил гораздо больше времени на расследование без вашей подсказки! - person xardas; 31.03.2014
comment
Отлично, очень помогло! - person phyzalis; 18.06.2014

Теперь проблема устранена. Сервер поставщика отправлял номер значка в кавычках (в виде строки JSON, т.е. «9»). Странно, что APN / iOS не распознает его как целое число. Теперь кавычки убраны и работает :)

person zinnuree    schedule 06.07.2012

У меня была аналогичная проблема, я решил ее, указав целое число в номере значка (используя PHP с данными, поступающими из MySQL db):

$body['aps'] = array(
        'alert' => array(
        'action-loc-key'=> utf8_encode($r['button_action']),
        'body'          => utf8_encode($r['message']),
        'launch-image'  => ''
        ),
    'badge' => (int)$r['badge_number'],
    'sound' => 'default'
    );

Ps .: взгляните на команду utf8_encode, чтобы избежать ошибки json_encode, с которой я столкнулся и раньше.

person Heitor    schedule 30.05.2016