Tenho um aplicativo iOS para o qual algumas notificações push são enviadas. Meu problema é que as mensagens / notificações permanecem na Central de Notificações no iOS depois de serem tocadas. Como posso remover uma notificação do meu aplicativo na Central de Notificações na próxima vez que o aplicativo for aberto?
Me deparei com postagens onde as pessoas estão ligando setApplicationIconBadgeNumber
para um valor zero para limpar as notificações. Isso me parece muito estranho, então acredito que talvez exista outra solução?
EDIT1:
Estou tendo problemas para limpar as notificações. Por favor, veja meu código aqui:
- (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];
}
Estou executando o aplicativo através do Xcode. Quando o aplicativo é minimizado e eu inicio o aplicativo usando a notificação na Central de notificações, posso ver no log que o didReceiveRemoteNotification
é chamado e, usando pontos de interrupção, posso ver que o clearNotifications
foi executado. Mas ainda assim a notificação trava na Central de Notificações. Por quê?
let center = UNUserNotificationCenter.current() center.removeAllDeliveredNotifications() // To remove all delivered notifications
stackoverflow.com/a/40397907/1155650Só para expandir a resposta da pcperini. Como ele menciona, você precisará adicionar o código a seguir ao seu
application:didFinishLaunchingWithOptions:
método;Você também precisa aumentar e diminuir o emblema em seu
application:didReceiveRemoteNotification:
método se estiver tentando limpar a mensagem do centro de mensagens para que, quando um usuário entrar em seu aplicativo pressionando uma notificação, o centro de mensagens também apague, ou seja;fonte
Também pode fazer sentido adicionar uma chamada para clearNotifications em applicationDidBecomeActive para que, caso o aplicativo esteja em segundo plano e volte, também apague as notificações.
fonte
Atualização para iOS 10 (Swift 3)
Para limpar todas as notificações locais em aplicativos iOS 10, você deve usar o seguinte código:
Este código lida com a limpeza de notificações locais para iOS 10.x e todas as versões anteriores do iOS. Você precisará
import UserNotifications
para o código iOS 10.x.fonte
Se você tiver notificações locais agendadas pendentes e não quiser usar
cancelAllLocalNotifications
para limpar as antigas na Central de Notificações, você também pode fazer o seguinte:Parece que se você definir o,
scheduledLocalNotifications
ele apaga as antigas na Central de Notificações e, definindo-o para si mesmo, você retém as notificações locais pendentes.fonte
applicationDidBecomeActive:
quanto nosapplication:didReceiveLocalNotification:
métodos.Em Swift, estou usando o seguinte código dentro do meu AppDelegate:
fonte
Se você vem aqui pensando o contrário (como eu estava), este post pode ser para você.
Não consegui descobrir por que minhas notificações foram apagadas quando eu limpei o crachá ... Eu incremento manualmente o crachá e quero limpá-lo quando o usuário entrar no aplicativo. No entanto, isso não é motivo para limpar o centro de notificação; eles ainda podem querer ver ou agir de acordo com essas notificações.
O negativo 1 resolve o problema, felizmente:
fonte
Talvez no caso de haver alarmes programados e emblemas de ícones de aplicativos não apagados.
fonte
Quando você tiver notificações repetidas no futuro, você não deseja cancelar essas notificações, você pode limpar o item na central de notificações:
Você não pode limpar a notificação quando seu aplicativo está aberto em primeiro plano chamando o método abaixo imediatamente após receber a notificação local, caso contrário, você receberá dezenas de centenas de notificações. Talvez porque a mesma notificação se aplique novamente e agora é a hora de disparar, então continue atirando, aplique novamente, dispare, aplique ....:
fonte
Ao fazer logout de seu aplicativo, você deve usar uma linha de código abaixo no método de clique do botão de logout.
e isso funciona perfeitamente no meu aplicativo.
fonte
Você precisa adicionar o código abaixo em seu
applicationDidBecomeActive
método AppDelegate .fonte
Peguei daqui . Funciona para iOS 9
fonte