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

Я работаю над push-уведомлением в iphone. когда я получаю push-уведомление, на значке моего приложения отображается 1, в следующий раз - 2,3,4. если я открою приложение, его 0. В следующий раз его должно быть 1,2,3,4... но он показывает последний номер и +1. Я хочу сбросить значок push-уведомления после открытия приложения. я отправляю +1 с городского дирижабля.

и это не работает для меня.

 [[UIApplication sharedApplication] cancelAllLocalNotifications];
 [UIApplication sharedApplication].applicationIconBadgeNumber = 0;

person iOS Developer    schedule 07.12.2012    source источник
comment
Вы очищаете номер значка локально. Вам также необходимо очистить его от сервера Urban Airship. Я не знаю Урбан Дирижабль. Но я уверен, что у него есть API для сброса значка уведомления на сервере.   -  person EmptyStack    schedule 07.12.2012
comment
я отправляю номер значка +1 для увеличения в моем API.   -  person iOS Developer    schedule 07.12.2012


Ответы (2)


Я использую этот код в своем приложении, потому что в документации Urban Airship (UA) сказано:

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
[[UAPush shared] resetBadge];

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

РЕДАКТИРОВАНИЕ №1:

Я получил следующий ответ от специалиста службы поддержки UA со следующими предложениями, которые отлично сработали:

Что вам нужно сделать, так это убедиться, что в вашем методе didFinishLaunchingWithOptions:(NSDictionary *)launchOptions вы вызываете следующее:

[[UAPush shared] setAutobadgeEnabled:YES];
[[UAPush shared] resetBadge];//zero badge on startup

а также вызовите [[UAPush shared] resetBadge]; в следующих методах:

applicationDidBecomeActive:(UIApplication *)application

и

didReceiveRemoteNotification:(NSDictionary *)userInfo

Технический специалист также упомянул, что назначение 0 для applicationIconBadgeNumber не обязательно, поэтому я удалил его. До сих пор прекрасно работает.

РЕДАКТИРОВАНИЕ № 2:

В итоге мне пришлось изменить application:didReceiveRemoteNotification:, чтобы включить вызов метода UA handleNotification:applicationState::

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    // Get application state for iOS4.x+ devices, otherwise assume active
    UIApplicationState appState = UIApplicationStateActive;
    if ([application respondsToSelector:@selector(applicationState)])
    {
        appState = application.applicationState;
    } 

    [[UAPush shared] handleNotification:userInfo applicationState:appState];
    [[UAPush shared] resetBadge];
}

потому что у меня возникла проблема со следующим сценарием:

  1. Пользователь в приложении
  2. Получено push-уведомление
  3. Значок не отображался на значке приложения при возврате на главный экран (как и ожидалось)
  4. Получено еще одно push-уведомление
  5. На значке отображается число больше 1

С приведенной выше модификацией этот сценарий обрабатывается. Я думаю, вы должны сообщить UA, что уведомление обрабатывается, когда оно получено и приложение работает на переднем плане.

person Moebius    schedule 14.05.2013
comment
Я с той же проблемой. Я попробовал ваши предложения, но это не работает для меня. Не могли бы вы помочь мне исправить это? Пожалуйста, взгляните на мой вопрос здесь: stackoverflow.com/questions/20073212 / - person Adil Malik; 19.11.2013
comment
Я не уверен, какую еще информацию я могу добавить. Код, который вы видите выше, работает для меня. - person Moebius; 19.11.2013

Я использовал Urban Airship и раньше сталкивался с этой проблемой. Вы не показываете код, но я предполагаю, что при получении уведомления вы устанавливаете номер значка приложения для того, какой городской дирижабль передает вам, не делайте этого. Просто позвольте приложению справиться с этим самостоятельно, когда приходит удаленное уведомление, пусть оно автоматически увеличивается самостоятельно. Если это не так, возможно, на стороне городского дирижабля вы устанавливаете номер значка для отправки с помощью push. Не отправляйте номер значка вместе с push-уведомлением, оставьте эту часть, iOS должна автоматически увеличивать ваш номер значка по сравнению с его текущим номером значка.

person Kris Gellci    schedule 07.12.2012