58 votes

Suppression du badge de l'icône de l'application iOS

Dans cette application que j'essaie de réaliser, j'utilise des notifications push. Cette partie fonctionne très bien. Lorsque j'envoie une notification, j'ajoute également un badge à l'icône de l'application. Le problème est que lorsque je lance l'application, il devrait disparaître à nouveau, mais ce n'est pas le cas.

-(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];
}

Dans le application didFinishLaunchingWithOptions J'essaie de mettre le badge à 0 de cette façon :

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

Comment puis-je effacer le badge de l'icône de l'application ?

215voto

Mark Points 1259

Si votre application redevient active et qu'elle est toujours en arrière-plan, vous devez réinitialiser le décompte des badges dans -applicationDidBecomeActive: également :

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

Si votre application est toujours en cours d'exécution en arrière-plan -application:didFinishLaunchingWithOptions: ne sera pas appelé.

0 votes

Merci fait ! Alors il y a quelque chose qui a du sens :) Fonctionne juste trouver, je suis seulement le réinitialiser dans la méthode BecomeActive. Je ne vois pas pourquoi je devrais le faire deux fois ?

7 votes

Réinitialisation une fois dans le -applicationDidBecomeActive: fera très bien l'affaire. Parce que cette méthode sera également appelée lorsque -application:didFinishLaunchingWithOptions: s'appelle. Veuillez accepter ma réponse :)

0 votes

N'est-il pas préférable de le faire sur applicationWillResignActive, juste avant que l'utilisateur ne le voie ?

8voto

Fabian Kreiser Points 5239

Probablement, -application:didFinishLaunchingWithOptions: n'est pas appelé, car votre application fonctionne toujours en arrière-plan. Afin de supprimer le nombre de badges lorsque l'application est lancée en arrière-plan, vous devez réinitialiser le nombre de badges dans le champ -applicationWillEnterForeground: aussi.

0 votes

Merci Fabian ! Ta réponse était juste ce dont j'avais besoin :) thannnkkss

0 votes

Est-ce que -applicationDidBecomeActive et -applicationWillEnterForeground : font la même chose en moins ou en plus ? En plaçant la réinitialisation dans -applicationDidBecomeActive. Cela fonctionne dans les deux situations.

0 votes

-applicaionDidBecomeActive : sera également invoquée au retour d'un appel téléphonique. -applicationWillEnterForeground : est la méthode appropriée dans votre situation.

5voto

Sourabh Kumbhar Points 191

En Swift et en AppDelegate

func applicationDidBecomeActive(_ application: UIApplication) {
    application.applicationIconBadgeNumber = 0
}

2voto

handiansom Points 478

Vous pouvez également utiliser ces codes.

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

ou Dans un ViewController spécifique

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

1voto

S. Matsepura Points 1303

Peut-être l'appeler en applicationWillResignActive (en AppDelegate.m ) :

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

Cela vous permettra d'effacer badge si push vient lorsque l'application est ouverte. L'utilisateur voit notification et tu l'effaces, quand il appuie sur Home Button (une ou deux fois). Il sera également clair si app être closed (clair après que l'utilisateur l'ait ouvert).

Aquí vous pouvez voir quand cette méthode est appelée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X