2015-10-08 1 views
0

Je fais une application qui montre le nombre de jours depuis que deux personnes sont en couple. Je voudrais montrer le nombre de jours sur le badge d'icône de l'application. Je sais comment faire cela une fois que l'utilisateur quitte l'application, mais je veux mettre à jour le badge chaque jour même si l'application n'est pas ouverte ou en cours d'exécution afin que l'utilisateur connaisse le nombre de jours sans avoir à ouvrir l'application . "BeenTogether" est une application similaire et fait la même chose, donc je suis sûr que c'est possible d'une manière ou d'une autre. Des pensées sur comment pourrais-je accomplir cela?Mettre à jour le badge d'icône tous les jours à minuit

Répondre

2

Je suis sûr que les variations de cela ont été posées environ un milliard de fois, mais la réponse est toujours non. Il existe des moyens de l'approximer, mais tous ont des inconvénients.

  • Notification push silencieuse. Bien sûr, cela signifie que vous devez connaître leur fuseau horaire et avoir besoin d'une connexion réseau.
  • Récupération d'arrière-plan. Cela fonctionne "périodiquement" de sorte que vous ne pouviez pas mettre à jour le badge à exactement minuit mais il serait souvent assez proche.
+0

Stephen, j'ai entendu parler de l'approche de notification push mais cela semble plutôt compliqué pour une tâche aussi simple. L'extraction d'arrière-plan semble cependant être une solution réelle, fonctionne-t-elle même si l'application est fermée en arrière-plan? Merci! –

+0

Oui, il lancera l'application (en arrière-plan) si elle ne fonctionne pas. Cependant, ce n'est pas fiable à 100%. –

1

Vous pouvez réaliser la même chose avec l'aide de la notification locale. Je suppose que vous avez rendez-vous quand ils ont commencé la date. Ainsi, vous pouvez mettre à jour le nombre de badge tous les jours avec Notification Locale.

+0

Pourriez-vous me montrer un code sur comment ferais-je cela? –

+0

Vous pouvez programmer une notification toutes les 24 heures avec la date actuelle. iOS permet de programmer jusqu'à 64 notifications. Donc, vous devez écrire la logique en conséquence. –

+0

Bonne idée. Le problème est que vous devez être en cours d'exécution pour créer/modifier des notifications. Souhaitez-vous créer une poignée de notifications à l'avance et espérer que l'utilisateur se lance à nouveau pour les générer de nouveau? –

0

Je ne suis pas sûr que tout le monde a bien compris ma question, car il est possible d'incrémenter le badge d'icône par un tous les jours à minuit, sans avoir à programmer 64 notifications. La solution est plutôt simple:

//Set a random date (only the time matters because it is repeated everyday), but make sure that the time is at midnight!! 
NSDateComponents *dateComponents = [[NSDateComponents alloc] init]; 
[dateComponents setYear:2015]; 
[dateComponents setMonth:1]; 
[dateComponents setDay:1]; 
[dateComponents setHour:0]; 
[dateComponents setMinute:0]; 

//Create an NSDate from the date components 
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDate *configuredDate = [calendar dateFromComponents:dateComponents]; 

//Schedule a local notification, set the repeatInterval to daily 
UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
localNotification.fireDate = configuredDate; 
localNotification.alertBody = nil; 
localNotification.alertAction = nil; 
localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
localNotification.repeatInterval = NSCalendarUnitDay; 

//Add one to the icon badge number 
localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1; 

[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
+0

J'ai essayé mais il ne pouvait pas mettre à jour le numéro de badge. –