Я использую этот код в своем приложении, потому что в документации 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];
}
потому что у меня возникла проблема со следующим сценарием:
- Пользователь в приложении
- Получено push-уведомление
- Значок не отображался на значке приложения при возврате на главный экран (как и ожидалось)
- Получено еще одно push-уведомление
- На значке отображается число больше 1
С приведенной выше модификацией этот сценарий обрабатывается. Я думаю, вы должны сообщить UA, что уведомление обрабатывается, когда оно получено и приложение работает на переднем плане.
person
Moebius
schedule
14.05.2013