Удаление значка из значка приложения iOS

В этом приложении, которое я пытаюсь сделать, я использую push-уведомления. Эта часть работает нормально. Когда я отправляю уведомление, я также добавляю значок к значку приложения. Проблема в том, что когда я запускаю приложение, оно должно снова исчезнуть, но этого не происходит.

-(IBAction)Push{

    NSMutableDictionary *data = [NSMutableDictionary dictionary];

    [data setObject:@"Numfeud: Troels made a move!" forKey:@"alert"];

    [data setObject:[NSNumber numberWithInt:1] forKey:@"badge"];

    [data setObject:@"bar" forKey:@"foo"];

    [PFPush sendPushDataToChannelInBackground:@"GameChannel2" withData:data];
}

В application didFinishLaunchingWithOptions я пытаюсь установить значок на 0 таким образом:

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

Как убрать значок со значка приложения?


person thar    schedule 04.03.2012    source источник


Ответы (5)


Если ваше приложение снова становится активным и все еще работает в фоновом режиме, вам также следует сбросить счетчик значков в -applicationDidBecomeActive::

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    application.applicationIconBadgeNumber = 0;
}

Если ваше приложение все еще работает в фоновом режиме, -application:didFinishLaunchingWithOptions: не будет вызываться.

person Mark    schedule 04.03.2012
comment
Спасибо! Тогда там есть смысл :) Работает просто найди, только в методе BecomeActive сбрасываю. Не понимаю, почему я должен получить его дважды? - person thar; 04.03.2012
comment
Сброс один раз в -applicationDidBecomeActive: подойдет. Потому что этот метод также будет вызываться при вызове -application:didFinishLaunchingWithOptions:. Примите мой ответ :) - person Mark; 04.03.2012
comment
Не лучше ли сделать это в applicationWillResignActive, прямо перед тем, как пользователь это увидит? - person Phuah Yee Keat; 04.03.2019

Вероятно, -application:didFinishLaunchingWithOptions: не вызывается, потому что ваше приложение все еще работает в фоновом режиме. Чтобы удалить счетчик значков при запуске приложения в фоновом режиме, вам также необходимо сбросить номер значка в -applicationWillEnterForeground:.

person Fabian Kreiser    schedule 04.03.2012
comment
Спасибо, Фабиан! Ваш ответ был именно тем, что мне было нужно :) спасибо - person thar; 04.03.2012
comment
-ApplicationDidBecomeActive и -applicationWillEnterForeground: делают то же меньше или больше? При размещении сброса в -applicationDidBecomeActive. Это работает в обеих ситуациях. - person thar; 04.03.2012
comment
-applicaionDidBecomeActive: также будет вызываться при возврате с телефонного звонка. -applicationWillEnterForeground: подходящий метод в вашей ситуации. - person Fabian Kreiser; 05.03.2012
comment
applicationWillEnterForeground не будет вызываться после application: didFinishLaunchingWithOptions :, однако. - person aslisabanci; 19.05.2014
comment
Да, поэтому его нужно сбросить дважды. Также можно использовать -applicationDidBecomeActive: и сбросить его только один раз. - person Fabian Kreiser; 19.05.2014

В Swift и в AppDelegate

func applicationDidBecomeActive(_ application: UIApplication) {
    application.applicationIconBadgeNumber = 0
}
person Sourabh Kumbhar    schedule 03.12.2018

Вы также можете использовать эти коды.

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    application.applicationIconBadgeNumber = 0;
}

или в конкретном ViewController

- (void)awakeFromNib {
   [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
}
person handiansom    schedule 28.03.2017

Может быть, назовите это в applicationWillResignActiveAppDelegate.m):

-(void)applicationWillResignActive:(UIApplication *)application{
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
}

Это поможет вам очистить badge, если push появится, когда приложение открыто. Пользователь видит notification, и вы очищаете его, когда он нажимает Home Button (один или два раза). Также будет ясно, является ли app closed (очищается после того, как пользователь откроет его).

Здесь вы можете увидеть, когда был вызван этот метод.

person S. Matsepura    schedule 25.07.2017