iOS-приложение: как убрать уведомления? - PullRequest
106 голосов
/ 30 декабря 2011

У меня есть приложение для 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 запущен. Но все равно уведомление висит в Центре уведомлений. Почему?

Ответы [ 12 ]

0 голосов
/ 01 июня 2016

Когда вы будете получать повторные уведомления в будущем, вы не хотите отменять эти уведомления, вы можете очистить элемент в центре уведомлений:

func clearNotificationCenter() {
    UIApplication.sharedApplication().applicationIconBadgeNumber = 1
    UIApplication.sharedApplication().applicationIconBadgeNumber = 0
}

Вы не можете очистить уведомление, когда ваше приложение открыто на переднем плане, вызвав метод ниже сразу после получения локального уведомления, в противном случае вы получите десятки сотен уведомлений. Может быть, потому что то же самое уведомление применяется снова, и теперь настало время для стрельбы, так что вы держите огонь, примените снова, выстрелите, примените ....:

[UIApplication sharedApplication].scheduledLocalNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;
0 голосов
/ 11 января 2016

Получил от здесь . Работает на iOS 9

UIApplication *app = [UIApplication sharedApplication];
NSArray *eventArray = [app scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
    UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
    //Cancelling local notification
    [app cancelLocalNotification:oneEvent];
}
...