Mam aplikację na iOS, do której wysyłane są powiadomienia push. Mój problem polega na tym, że wiadomości / powiadomienia pozostają w Centrum powiadomień w iOS po dotknięciu. Jak mogę usunąć powiadomienie o mojej aplikacji w Centrum powiadomień przy następnym uruchomieniu aplikacji?
Natknąłem się na posty, w których ludzie dzwonią setApplicationIconBadgeNumber
do wartości zerowej, aby wyczyścić powiadomienia. Wydaje mi się to bardzo dziwne, więc wierzę, że może istnieje inne rozwiązanie?
EDYCJA1:
Mam problemy z wyczyszczeniem powiadomień. Zobacz mój kod tutaj:
- (void) clearNotifications {
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (launchOptions != nil)
{
NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary != nil)
{
NSLog(@"Launched from push notification: %@", dictionary);
[self clearNotifications];
}
}
return YES;
}
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
NSLog(@"Received notification: %@", userInfo);
[self clearNotifications];
}
Uruchamiam aplikację przez Xcode. Kiedy aplikacja jest zminimalizowana i uruchamiam ją za pomocą powiadomienia w Centrum powiadomień, widzę w dzienniku, że didReceiveRemoteNotification
jest wywoływana i używając punktów przerwania, które widzę, że clearNotifications
została uruchomiona. Ale nadal powiadomienie zawiesza się w Centrum powiadomień. Czemu?
let center = UNUserNotificationCenter.current() center.removeAllDeliveredNotifications() // To remove all delivered notifications
stackoverflow.com/a/40397907/1155650Aby rozwinąć odpowiedź pcperini. Jak wspomina, będziesz musiał dodać następujący kod do swojej
application:didFinishLaunchingWithOptions:
metody;Musisz także zwiększyć, a następnie zmniejszyć znacznik w swojej
application:didReceiveRemoteNotification:
metodzie, jeśli próbujesz usunąć wiadomość z centrum wiadomości, aby gdy użytkownik wejdzie do aplikacji po naciśnięciu powiadomienia, centrum wiadomości również zostanie wyczyszczone, tj.źródło
Sensowne może być również dodanie wywołania clearNotifications w applicationDidBecomeActive, aby w przypadku, gdy aplikacja jest w tle i wróci, wyczyści również powiadomienia.
źródło
Aktualizacja dla iOS 10 (Swift 3)
Aby wyczyścić wszystkie powiadomienia lokalne w aplikacjach na iOS 10, użyj następującego kodu:
Ten kod obsługuje czyszczenie lokalnych powiadomień dla iOS 10.xi wszystkich poprzednich wersji iOS. Będziesz potrzebował
import UserNotifications
kodu iOS 10.x.źródło
Jeśli masz oczekujące zaplanowane powiadomienia lokalne i nie chcesz używać
cancelAllLocalNotifications
do usuwania starych w Centrum powiadomień, możesz również wykonać następujące czynności:Wygląda na to, że jeśli ustawisz
scheduledLocalNotifications
to, wyczyści stare w Centrum powiadomień, a ustawiając je na siebie, zachowujesz oczekujące powiadomienia lokalne.źródło
applicationDidBecomeActive:
iapplication:didReceiveLocalNotification:
metodach.W Swift używam następującego kodu wewnątrz mojej AppDelegate:
źródło
Jeśli przyjeżdżasz tutaj i zastanawiasz się odwrotnie (tak jak ja), ten post może być dla Ciebie.
Nie mogłem zrozumieć, dlaczego moje powiadomienia są usuwane, gdy wyczyściłem odznakę ... Ręcznie zwiększam znaczek, a następnie chcę go wyczyścić, gdy użytkownik wejdzie do aplikacji. Nie ma jednak powodu, aby wyczyścić centrum powiadomień; nadal mogą chcieć zobaczyć te powiadomienia lub podjąć działania na ich podstawie.
Na szczęście minus 1 załatwia sprawę:
źródło
Może na wypadek, gdyby były zaplanowane alarmy i nie wyczyszczone ikony aplikacji.
źródło
Jeśli w przyszłości będziesz mieć powtarzające się powiadomienia, a nie chcesz anulować tych powiadomień, możesz wyczyścić element w centrum powiadomień, wykonując następujące czynności:
Nie możesz wyczyścić powiadomienia, gdy Twoja aplikacja jest otwarta na pierwszym planie, wywołując poniższą metodę natychmiast po otrzymaniu powiadomienia lokalnego, w przeciwnym razie otrzymasz dziesiątki setek powiadomień. Może dlatego, że to samo powiadomienie obowiązuje ponownie, a teraz jest czas na strzelanie, więc kontynuuj ogień, aplikuj ponownie, strzelaj, aplikuj ...
źródło
Kiedy wylogowujesz się z aplikacji, w tym momencie musisz użyć poniższego wiersza kodu w metodzie kliknięcia przycisku wylogowania.
i to działa doskonale w mojej aplikacji.
źródło
Musisz dodać poniższy kod w swojej
applicationDidBecomeActive
metodzie AppDelegate .źródło
Mam to stąd . Działa na iOS 9
źródło