У меня есть приложение для iOS, куда отправляются push-уведомления. Моя проблема в том, что сообщения / уведомления остаются в Центре уведомлений в iOS после нажатия. Как я могу удалить уведомление для моего приложения в Центре уведомлений при следующем запуске приложения?
Я наткнулся на сообщения, в которых люди обращаются setApplicationIconBadgeNumber
к нулевому значению, чтобы очистить уведомления. Мне это кажется очень странным, поэтому я считаю, что, может быть, существует другое решение?
EDIT1:
У меня проблемы с удалением уведомлений. Пожалуйста, посмотрите мой код здесь:
- (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];
}
Я запускаю приложение через Xcode. Когда приложение свернуто, и я запускаю приложение, используя уведомление в Центре уведомлений, я вижу в журнале, что didReceiveRemoteNotification
вызывается и использует точки останова, которые я вижу, что clearNotifications
он был запущен. Но все равно в Центре уведомлений висит уведомление. Зачем?
let center = UNUserNotificationCenter.current() center.removeAllDeliveredNotifications() // To remove all delivered notifications
stackoverflow.com/a/40397907/1155650Просто чтобы расширить ответ pcperini. Как он упоминает, вам нужно будет добавить в свой
application:didFinishLaunchingWithOptions:
метод следующий код ;Вам также необходимо увеличить, а затем уменьшить значок в вашем
application:didReceiveRemoteNotification:
методе, если вы пытаетесь очистить сообщение из центра сообщений, чтобы, когда пользователь входит в ваше приложение после нажатия уведомления, центр сообщений также очищается, т. Е.источник
Также может иметь смысл добавить вызов clearNotifications в applicationDidBecomeActive, чтобы в случае, если приложение находится в фоновом режиме и возвращается, оно также очищает уведомления.
источник
Обновление для iOS 10 (Swift 3)
Чтобы очистить все локальные уведомления в приложениях iOS 10, вы должны использовать следующий код:
Этот код обрабатывает очистку локальных уведомлений для iOS 10.x и всех предыдущих версий iOS. Вам потребуется
import UserNotifications
для кода iOS 10.x.источник
Если у вас есть ожидающие запланированные локальные уведомления и вы не хотите использовать их
cancelAllLocalNotifications
для удаления старых в Центре уведомлений, вы также можете сделать следующее:Похоже, что если вы установите,
scheduledLocalNotifications
он очищает старые в Центре уведомлений, и, установив его на себя, вы сохраняете ожидающие локальные уведомления.источник
applicationDidBecomeActive:
и вapplication:didReceiveLocalNotification:
методах.В Swift я использую следующий код внутри своего AppDelegate:
источник
Если вы приходите сюда и задаетесь вопросом об обратном (как и я), этот пост может быть для вас.
Я не мог понять, почему мои уведомления удалялись, когда я очищал значок ... Я вручную увеличиваю значок, а затем хочу очистить его, когда пользователь входит в приложение. Однако это не причина очищать центр уведомлений; они по-прежнему могут захотеть увидеть эти уведомления или действовать в соответствии с ними.
К счастью, отрицательный 1 помогает:
источник
Может быть, если есть запланированные будильники и неочищенные значки значков приложений.
источник
Если у вас будут повторяться уведомления в будущем, вы не хотите отменять эти уведомления, вы можете очистить элемент в центре уведомлений следующим образом:
Вы не можете очистить уведомление, когда ваше приложение открыто на переднем плане, вызвав указанный ниже метод сразу после получения локального уведомления, иначе вы получите десятки сотен уведомлений. Может быть, потому что то же уведомление применяется снова, и сейчас самое время стрелять, поэтому вы продолжаете огонь, применяете снова, запускаете, применяете ....:
источник
Когда вы выходите из приложения, вы должны использовать приведенную ниже строку кода для метода нажатия кнопки выхода.
и это отлично работает в моем приложении.
источник
Вам необходимо добавить приведенный ниже код в свой
applicationDidBecomeActive
метод AppDelegate .источник
Получил отсюда . Работает на iOS 9
источник