iPhone: Inkrementieren des Anwendungsabzeichens durch eine lokale Benachrichtigung
ist es möglich, erhöhen Sie die Anwendung Abzeichen durch eine lokale Benachrichtigung, wenn die app nicht läuft?
Ich wissen, wie man die Abzeichen, aber noch nicht gefunden, einen Weg, um zu erhöhen Sie diesen Wert.
localNotification.applicationIconBadgeNumber = 23;
Update: fand ich eine (bei weitem nicht perfekte) Lösung. Sie können Vorhersagen, was passieren wird, wenn der Benutzer nicht über die app öffnen und fügen Sie Benachrichtigungen für jeden +1-Ereignis.
Beispiel:
- Für Tag 1: Count = 0
- Für Tag 2: localNotification.applicationIconBadgeNumber = 1;
- Für Tag 3: localNotification.applicationIconBadgeNumber = 2;
- Für Tag 4: localNotification.applicationIconBadgeNumber = 3;
==> Setzen Sie diese Meldungen in einem array, und legen Sie Sie vor der Anwendung beendet wird.
Jedoch, ich bin auf der Suche nach eine bessere Lösung als diese Problemumgehung.
InformationsquelleAutor der Frage Stefan | 2011-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einzige Weg, du wirst in der Lage sein, auf dynamisch setzen Sie die badge-Nummer, wenn Sie Ihre Anwendung nicht ausgeführt wird, ist mit push-Benachrichtigungen. Sie haben zu verfolgen die updates der server-Seite.
InformationsquelleAutor der Antwort visakh7
Habe ich gefunden, umgesetzt & getestet ein 'workaround' für (offenbar) die automatische Inkrementierung der app-icon-badge-Nummer, das funktioniert auch mit nicht wiederholte lokale Benachrichtigungen
Es ist in der Tat nicht möglich, UILocalNotifications haben iOS 'automatisch' update/Schrittweite der badge-Nummer, wenn mehrere lokale Benachrichtigungen ausgelöst werden, und der user "ignoriert" oder nicht mit Ihnen umgehen sofort, so dass Sie 'pile-up' in der Mitteilungszentrale.
Auch 'hinzufügen einige callback-Methode", um Ihre app kann nicht kümmern sich um die 'auto-increment', weil die ganze Meldung Sache behandelt wird, die 'außerhalb' Ihrer app iOS Ihre app muss nicht einmal gestartet sein.
Allerdings gibt es einige workaround, das auf der Erkenntnis basiert das fand ich durch Experimentieren, weil die XCode-Dokumentation ist zu vage, auf der Plakette Eigenschaft.
Also für einen 'workaround' Ihre app muss schon die richtigen, die Inkrementierung der badge-Nummer für jede Benachrichtigung, die es neu erstellt und registriert 'auf der Oberseite der ausstehenden Benachrichtigungen".
Da Ihre app kann nicht schauen Sie in die Zukunft und wissen, welche Veranstaltungen Sie Griff sofort, und die, die Sie verlassen 'pending' für eine Weile, es gibt einige trick zu tun :
Wenn Benachrichtigungen behandelt werden von der app (durch Tippen auf die Benachrichtigung(en), icon, ...), müssen Sie zu :
zahlen wieder
Auch, wenn die app registriert eine neue Meldung, es ist zu prüfen, wie viele Benachrichtigungen versandt werden, die noch anhängig sind, die erste, und registrieren Sie die neue Meldung mit :
Blick auf meinen code, es wird klarer. Getestet habe ich dies, und es ist definitiv Arbeit :
In Ihrem 'registerLocalNotification' Methode das sollten Sie tun :
Wenn Sie mit der Benachrichtigung (appDelegate), rufen Sie die Methode unten verwenden, das löscht das Abzeichen auf das Symbol und nummeriert Sie neu das Abzeichen für ausstehende Benachrichtigungen (falls vorhanden)
Beachten, dass der nächste code, der funktioniert gut für 'laufende' registrierten Ereignisse. Wenn Sie 'add' - Ereignisse zwischen ausstehende lieben, haben Sie zu "re-sort" diese Ereignisse zuerst angezeigt werden. Ich wollte nicht so weit gehen, aber ich denke, es ist möglich.
Wirklich 'bullet-proof', diese Methode sollte 'atomic' (kernel -) code, verhindern, dass das iOS von feuern einer Meldung während der Ausführung dieser Methode. Wir müssen dieses Risiko eingehen hier, stehen die Chancen sehr klein sind, wird dies geschehen.
Dies ist mein Erster Beitrag auf Stackoverflow, so können Sie Kommentar-auch wenn ich nicht nach den "Regeln" hier
InformationsquelleAutor der Antwort Ronny Webers
Basiert auf der Dokumentation , ich glaube, Sie können nicht erhöhen Sie den Wert der Marke, wenn Ihre Anwendung nicht ausgeführt wird. Legen Sie die badge-Nummer, wenn Sie planen, Ihre Meldung, so ist es nicht möglich, zu erhöhen.
InformationsquelleAutor der Antwort Krishnan
Fügen Sie folgenden code in Ihr Projekt zu delegieren.
dies funktioniert für mich. 🙂
InformationsquelleAutor der Antwort Tarang
Whasssaabhhh Antwort in Swift 2.1, mit der Sortierung
InformationsquelleAutor der Antwort Edgardo Agno
Whasssaaahhh Antwort, war sehr hilfreich für mich. Ich musste auch die Art der Benachrichtigungen basierend auf Ihre fireDates. Hier ist Whasssaaahhh code mit meinem code, um die Sortierung der Meldungen über die NSArray - delegate-Methode für die Sortierung
-
[NSArray sortedArrayUsingComparator:^(id obj1, id obj2) {}];
Nach einiger Zeit, die ich brauchte, um dies zu implementieren, die auf Swift, aber auch erforderlich, um Unterstützung wiederholte lokale Benachrichtigungen. Ich habe kommen mit einer Lösung auf Swift.
Lösung für Swift 2.3
Hinweis: dateByAddingHours, dateByAddingHours, dateByAddingMonths, dateByAddingYears, dateByRemovingSeconds sind Methoden aus einer DateExtension ich mit, und sind sich selbst beschreibende Methoden, die Sie implementieren können, auf Ihrem eigenen.
InformationsquelleAutor der Antwort Bionicle
Als alternative zu Bionicle-die Lösung, man kann mit einem NSSortDescriptor zu behandeln Sortieren, basierend auf der fireDate Feld. Wieder diese Lösung bietet alle Vorteile des Whasssaaahhh original-Antwort, die aber auch heißt, es verarbeiten können Benachrichtigungen Hinzugefügt werden, die in nicht chronologischer Reihenfolge, z.B. das hinzufügen einer Benachrichtigung in 30 Sekunden, dann 20 Sekunden Zeit. Ich nenne Sie die unter-Funktion beim hinzufügen einer lokalen Benachrichtigung, und bei der Rückkehr in die Anwendung.
InformationsquelleAutor der Antwort Steven Craft
Basierend auf Wassaahbbs und Bionicles Antworten oben, für Swift 3.0 dies scheint zu funktionieren für Wiederholte Lokale Benachrichtigungen. Ich habe es die Arbeit für die Einstellung 4 lokale Benachrichtigungen, von denen jeder kann ein-und ausgeschaltet werden, unabhängig.
Den renumberBadgesOfPendingNotifications-Funktion in AppDelegate applicationDidBecomeActive so Abzeichen werden aktualisiert, wenn Benutzer die app öffnet, nachdem Sie benachrichtigt werden. Und auch in einem settingsVC, wo ein setNotification Funktion setzt die Meldungen in den ersten Platz, und Im Fall, schaltet der Benutzer eine Benachrichtigung auf on oder off also braucht ein Abzeichen update.
Auch das Abzeichen wird auf 0 gesetzt in applicationDidBecomeActive mit UIApplication.geteilt wird.applicationIconBadgeNumber = 0.
InformationsquelleAutor der Antwort richc
Basierend auf Wassaahbbs und Bionicles Antworten. Swift-4.0, alle iOS-Versionen. Rufen Sie diese Funktion in
func applicationDidBecomeActive(_ application: UIApplication)
.InformationsquelleAutor der Antwort Beniamin Sarkisian
seit iOS10 ist es möglich zu definieren, die badge-Nummer direkt auf die UNMutableNotificationContent.
Hier, was für mich funktioniert :
Arbeite ich an einer Anwendung, die fügt Benachrichtigung basierend auf einem Datum (mit CalendarComponents), mein trigger ist UNCalendarNotificationTrigger. Mein code ist einfach:
Über
content.badge
der doc sagt :Den Abzeichen-Schritten, selbst wenn eine Benachrichtigung Hinzugefügt, auch wenn die app nicht läuft. Sie können deaktivieren Sie die badge-Nummer, wo Sie wollen in der app mit :
InformationsquelleAutor der Antwort Mehdi Chennoufi