1

Nach den Apfel docs https://developer.apple.com/reference/foundation/nsusernotification/1416410-identifierObjectiveC - wie NSUserNotification Kennung Eigenschaft

NSUserNotification hat eine Eigenschaft namens Kennung zu verwenden, die annehmen, um Benachrichtigungen zu ersetzen, wenn die Kennung der gleiche wie eine andere Meldung ist.

Als ich diese Funktion getestet habe, scheint es, dass die Benachrichtigung nicht wirklich ersetzt wird, nur nicht gesendet.

Wie erreiche ich den Effekt, dass nur eine Art von Benachrichtigung in der Benachrichtigungszentrale vorhanden ist, aber die zuletzt benannte Nachricht nach oben aktualisiert wird?

Senden von Benachrichtigungs A + Benachrichtigung B + Benachrichtigung A mit einer Verzögerung von 1 Minute

Dies ist, was auf dem MAC Benachrichtigungszentrum gezeigt wird

Ohne Identifikator

NotificationA (now) 
NotificationB (1 minute ago) 
NotificationA (2 minute ago) 

Mit Kennung

NotificationB (1 minute ago) 
NotificationA (2 minute ago) 

Beachten Sie, wie Benachrichtigung A (2. Mal) nicht aufgrund der Kennung namens

gewünschte Wirkung vorliegt

NotificationA (now) 
NotificationB (1 minute ago) 

In dieser Situation Benachrichtigung A wird erneut gesendet und die vorherige Benachrichtigung A ist

+1

Wir hatten ein ähnliches Problem in Chrome und wir löschten die Benachrichtigung und fügten sie erneut hinzu. Der Code ist noch nicht standardmäßig aktiviert, aber Sie können es ausprobieren, indem Sie einige Flags umschalten. Gerne weitere Informationen zur Verfügung stellen, wenn das hilft. https://cs.chromium.org/chromium/src/chrome/browser/notifications/notification_platform_bridge_mac.mm?rcl=0&l=142 –

+0

Das tut, danke – David

Antwort

2

Sie können eine vorhandene notification mit der NSNotificationCenter s removeDeliveredNotification: Methode löschen. Entfernen Sie die Benachrichtigung und fügen Sie sie erneut hinzu.

Objective-C

[[NSUserNotificationCenter defaultUserNotificationCenter] removeDeliveredNotification:userNotification]; 
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:userNotification]; 

Swift

NSUserNotificationCenter.default.removeDeliveredNotification(userNotification) 
NSUserNotificationCenter.default.deliver(userNotification) 

ich diese Technik erfolgreich benutzt, um Benachrichtigungen zu zeigen, ohne das Benachrichtigungszentrum verschmutzen.

+0

Ich sah gerade Miguels Kommentar, ich denke er war zuerst .. – mangerlahn

+0

Diese Antwort ist viel umfassender, also ist alles gut :) –

+1

Danke für die Antwort, aber die Reihenfolge sollte umgekehrt werden: erste vorherige Benachrichtigung entfernen und dann neue liefern. – Alek