Scheduling notifications
Bonjour à tous,
Svp j'ai une question des plus élémentaire.... Avec mes excuses pour le dérangement
j'essaie d'utiliser les notifications locales répétées quotidiennement à la même heure.
La notification fonctionne bien .... Même trop bien puisqu'il m'envoie plusieurs fois (de 3 à 7) pour la même notification. Je n'attends qu'une seule notification à différentes heures.
Des idées de ce que j'aurais oublié ?
//Notification à 20:10
let center = UNUserNotificationCenter.current()
let content = UNMutableNotificationContent()
content.title = "L'aventure continue"
content.body = "\(userName)Mon message 1"
content.categoryIdentifier = "alarm"
content.userInfo = ["customData": "fizzbuzz"]
content.sound = UNNotificationSound.default()
var dateComponents = DateComponents()
dateComponents.hour = 20
dateComponents.minute = 10
//dateComponents.second = 00
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true)
//let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: trigger)
center.add(request)
//center.removeAllPendingNotificationRequests()
/******************************************************/
//Notification à 20:15
let center2 = UNUserNotificationCenter.current()
let content2 = UNMutableNotificationContent()
content2.title = "Aller, place à la pratique"
content2.body = "\(userName2)Mon Message 2"
content2.categoryIdentifier = "alarm"
content2.userInfo = ["customData": "fizzbuzz"]
content2.sound = UNNotificationSound.default()
var dateComponents2 = DateComponents()
dateComponents2.hour = 20
dateComponents2.minute = 15
//dateComponents2.second = 00
//dateComponents2.day = 1
let trigger2 = UNCalendarNotificationTrigger(dateMatching: dateComponents2, repeats: true)
//let trigger2 = UNTimeIntervalNotificationTrigger(timeInterval: 10, repeats: false)
let request2 = UNNotificationRequest(identifier: UUID().uuidString, content: content2, trigger: trigger2)
center2.add(request2)
//center.removeAllPendingNotificationRequests()
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je commencerais par regarder `getPendingNotificationRequests()` pour voir si ce n'est pas toi qui les a mises plusieurs fois en testant.
getPendingNotificationRequests() Serait la fonction qui appelle le précédent code ?
Effectivement, je l'avais mis à plusieurs endroits pas autant.
J'ai réduit et j'ai parfois 2 parfois 1
Je ne voulais pas le lancer à l'aide d'un bouton donc j'ai mis dans mon viewDidLoad et dans une autre fonction (d'actualisation)..... Je crois que c'est ça le problème ??? ???
Du coup qu'est-ce que tu me conseilles ? Une fonction ? À chaque fois qu'elle sera appelée, il y aura un compte + 1 ?
ça dépend de ce que tu veux faire exactement.
Tu pourrais utiliser UserDefaults pour garder en mémoire que tu en as déjà lancé à telle-heure, ou getPendingNotificationRequests(), itérer les notificationsRequest, regarder celle de type calendar leur dateComponents et en rajouter un si elle ne se trouve pas déjà dans la liste ?
En faisant appel une seule fois à la fonction dans le ViewDidLoad, j'ai effectivement d'une notif.
Ce que je cherche à faire, c'est de notifier 'utilisateur une fois le matin à 10h et une fois le soir a 18h
C'est la cata looool j'ai autant de notif que de fois ou j'ai ouvert l'appli
Dans ton idée de stocké une valeur dans le UserDefaults, que pense tu de stocker la date (jjmmaaaa) ? si différent on remplace sinon rien ?
Je me demande s'il est vraiment nécessaire de lancer tous les jours pour que les notifications soient prises en compte ou si une seule fois suffit ?
Je crois que j'ai trouvé. Je vous fais un retour dès que j'aurais verifier le tout
center.removeAllPendingNotificationRequests()
Au début de chacune de mes fonctions avec un appel de la fonction à chaque fois que l'application est ouverte.
ça a l'air de fonctionner correctement pour le moment.
Sur le principe de l'utilisation du UserDefaults, j'ai également créé une fonction qui ne sera appelée qu'une fois par jour et aura pour fonction de saluer l'utilisateur. Mais dans mon cas, cela fera un p trop de notification.
Oublie ça. Les notifications sont des intrusions. Il faut les limiter au strict minimum.
Oui, c'est bien ce que je me disais aussi. loooool
Merci d'avoir confirmé