web-dev-qa-db-fra.com

Comment puis-je planifier une notification locale pour le scénario suivant?

Experts, j'ai un scénario dans lequel je dois informer l'utilisateur trois fois par jour (matin, après-midi, soir). Et les horaires de ces notifications seront différents pour chaque jour, en fonction des valeurs de la base de données pour chaque date.

Ces trois notifications sont configurables. Cela signifie que l'utilisateur peut simplement choisir de définir l'après-midi et le soir tout en désactivant la notification du matin dans les paramètres.

Selon ma compréhension, je peux y parvenir en utilisant des notifications locales.

Je peux faire ce qui suit: - avant la fermeture de l'application, à l'intérieur de didFinishLaunchingWithOptions, je peux vérifier quelle est la prochaine notification due, est-elle définie (on/off). S'il est réglé, je le planifie. Sinon, je passe au type de notification suivant et je fais la même chose. Si toutes les notifications sont désactivées, évidemment, aucune notification ne sera planifiée.

Maintenant, lorsque la notification apparaît, j'arrive à voir l'alerte avec deux boutons "Fermer" et "Afficher". Si l'utilisateur sélectionne "Afficher", mon application redevient active et avant que l'utilisateur ne quitte, la prochaine notification est planifiée.

Jusqu'ici tout va bien.

Maintenant, si l'utilisateur choisit de sélectionner "Fermer" Que dois-je faire? Il ne lancera pas mon application et, par conséquent, la prochaine notification ne sera pas planifiée?

Comment puis-je y parvenir? Y a-t-il une meilleure façon de procéder?

Aidez-moi! Aidez-moi! Aidez-moi!

27
Haris Farooqui

Vous pouvez simplement planifier toutes (ou plusieurs) notifications en même temps. Vous n'avez pas besoin d'attendre que l'utilisateur affiche votre application pour planifier la prochaine notification.

De les documents sur UILocalNotification ,

Une application ne peut avoir qu'un nombre limité de notifications planifiées; le système conserve les 64 notifications les plus rapides (avec des notifications replanifiées automatiquement comptant comme une seule notification) et rejette le reste

Donc, si vous avez 3 notifications par jour, vous pouvez pré-planifier 3 semaines de notifications à la fois. Je suppose que vous auriez toujours un problème si l'utilisateur n'ouvre pas votre application pendant un mois, mais avez-vous besoin de vous inquiéter de ce scénario?

Quoi qu'il en soit, je voulais juste m'assurer qu'il est clair que vous n'avez pas besoin de planifier ces notifications une par une.

Exemple:

UILocalNotification* n1 = [[UILocalNotification alloc] init];
n1.fireDate = [NSDate dateWithTimeIntervalSinceNow: 60];
n1.alertBody = @"one";
UILocalNotification* n2 = [[UILocalNotification alloc] init];
n2.fireDate = [NSDate dateWithTimeIntervalSinceNow: 90];
n2.alertBody = @"two";
[[UIApplication sharedApplication] scheduleLocalNotification: n1];
[[UIApplication sharedApplication] scheduleLocalNotification: n2];

Ainsi, même si l'utilisateur choisit Fermer lorsque la première notification apparaît, la seconde sera toujours envoyée.

Par ailleurs, la méthode didFinishLaunchingWithOptions est appelée juste après le démarrage de votre application, pas juste avant sa fermeture. Cela dit, vous pouvez planifier de nouvelles notifications à tout moment.

41
Nate

Vous pouvez également utiliser la propriété repeatInterval pour qu'ils se replanifient eux-mêmes indéfiniment. Cependant, vous êtes limité aux unités dans NSCalendarUnit. Voir docs pour plus d'informations

3
Nick Yap