2016-09-13 3 views
3

Мое приложение имеет локальные уведомления с кнопками действий: откладывание и увольнение. Проблема в том, что когда мое приложение открыто, во всплывающем окне отображается уведомление. Он отображает всплывающее окно и уведомление в панели уведомлений также отображается. В общем случае приложение не отображает уведомление в панели уведомлений, когда оно находится на переднем плане. Но я вижу оба.Уведомления отображаются в панели уведомлений, даже когда приложение открыто

Не могу понять, что здесь происходит. Я обработал уведомление в методе didReceiveLocalNotification, как показано ниже.

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 

UIApplicationState state = [application applicationState]; 
if (state == UIApplicationStateActive) { 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"MyApp" 
                message:notification.alertBody 
                delegate:self cancelButtonTitle:@"OK" 
              otherButtonTitles:@"SNOOZE",@"DISMISS",nil]; 
    alert.delegate = self; 
    [alert show]; 
} 
} 

и ниже мой метод didFinishLaunching

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) { 
    UIMutableUserNotificationAction *action1; 
    action1 = [[UIMutableUserNotificationAction alloc] init]; 
    [action1 setActivationMode:UIUserNotificationActivationModeForeground]; 
    [action1 setTitle:@"SNOOZE"]; 
    [action1 setIdentifier:kNotificationActionSnooze]; 
    [action1 setDestructive:NO]; 
    [action1 setAuthenticationRequired:NO]; 

    UIMutableUserNotificationAction *action2; 
    action2 = [[UIMutableUserNotificationAction alloc] init]; 
    [action2 setActivationMode:UIUserNotificationActivationModeBackground]; 
    [action2 setTitle:@"DISMISS"]; 
    [action2 setIdentifier:kNotificationActionDismiss]; 
    [action2 setDestructive:NO]; 
    [action2 setAuthenticationRequired:NO]; 

    UIMutableUserNotificationCategory *actionCategory; 
    actionCategory = [[UIMutableUserNotificationCategory alloc] init]; 
    [actionCategory setIdentifier:kNotificationCategoryIdent]; 
    [actionCategory setActions:@[action1, action2] forContext:UIUserNotificationActionContextDefault]; 

    NSSet *categories = [NSSet setWithObject:actionCategory]; 
    UIUserNotificationType types = (UIUserNotificationTypeAlert| UIUserNotificationTypeSound| UIUserNotificationTypeBadge); 

    UIUserNotificationSettings *settings; 
    settings = [UIUserNotificationSettings settingsForTypes:types categories:categories]; 

    [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; 

    } 

return YES; 
} 

видеть изображения ниже:

enter image description here

enter image description here

+0

ваше приложение находится на переднем плане и ОС показывает всплывающее уведомление в строке состояния тоже? – Shubhank

+0

Вы можете показать didReceiveRemoteNotification? –

+0

Нет кодирования в didReceiveRemoteNotification –

ответ

2

просто сделать это

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
{ 

UIApplicationState state = [application applicationState]; 
if (state == UIApplicationStateActive) 
    { 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"MyApp" 
                message:notification.alertBody 
                delegate:self cancelButtonTitle:@"OK" 
              otherButtonTitles:@"SNOOZE",@"DISMISS",nil]; 
    alert.delegate = self; 
    [alert show]; 

[[UIApplication sharedApplication] cancelLocalNotification:notification]; 
} 
} 

cancelLocalNotification когда ваше приложение в UIApplicationStateActive.

надеюсь, что это поможет :)

+0

Да, это сработало! :) Ты всегда рядом, чтобы помочь мне. Спасибо: D @balkaran –

+0

ваш приветственный подарок @KrutikaSonawala :) me hu na: D –

+0

LOL: D Спасибо –

Смежные вопросы