2013-08-06 1 views
3

Я работаю над простым приложением с push-уведомлением, и я успешно его реализовал. Когда я выхожу из приложения, я получаю push-уведомление (хорошо работает), но когда я открываю приложение и пытаюсь отправить сообщение с моего сервера (веб-приложение), он не отображает на нем всплывающее сообщение или уведомление. Я что-то пропустил? Вот мой фрагмент кода на AppDelegate.mPush-уведомление Не работает, когда приложение запущено (активное)

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

// Let the device know we want to receive push notifications 
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: 
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; 
return YES; 
} 


(void)application:(UIApplication*)application didReceiveRemoteNotification: (NSDictionary*)userInfo{ 
    NSLog(@"Received notification: %@", userInfo); 
    NSString *messageAlert = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"]; 
    NSLog(@"Received Push Badge: %@", messageAlert); 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"Notification" object:messageAlert]; 

} 

Пожалуйста, помогите мне в этом. Благодарю.

+0

Он не отображается уведомления, но вы видите журналы: «Полученное уведомление: XXX» и «Полученный значек Push: YYY» (где XXX и YYY - строки) –

ответ

5

Когда приложение является активным режимом вам нужно поместить этот метод что-то вроде ниже в ваш AppDelegate класса: -

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {  
    UIApplicationState state = [application applicationState]; 
    if (state == UIApplicationStateActive) { 
     NSString *cancelTitle = @"Close"; 
     NSString *showTitle = @"Show"; 
     NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"]; 
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"My App Name" 
                  message:message 
                  delegate:self 
                cancelButtonTitle:cancelTitle 
                otherButtonTitles:showTitle, nil]; 
     [alertView show]; 
     [alertView release]; 


    } else { 
     //Do stuff that you would do if the application was not active 
    } 
} 

Также поместите didFailToRegisterForRemoteNotificationsWithError делегата для проверки обесточивания Причины

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { 
NSString *str = [NSString stringWithFormat: @"Error: %@", error]; 
    NSLog(@"%@", str); 
} 
0

Что вы ожидали от этого кода: [[NSNotificationCenter defaultCenter] postNotificationName:@"Notification" object:messageAlert]; ??

Я думаю, вы пропустите некоторые основы. Чтобы представить оповещение, вы должны взглянуть на UIAlertView. NSNotificationCenter предназначен для внутреннего потока данных в вашем приложении. (Шаблон наблюдателя)

Пока приложение работает, предупреждение не будет представлено автоматически. Вам нужно обработать push-сообщение самостоятельно, начиная с application:didReceiveRemoteNotification:. NSNotificationCenter и Push Notifications - это совершенно разные вещи. Они не являются частью друг друга.

0

Если я правильно напомнил, Apple доставляет push-уведомления в разные места, когда приложение работает или нет. Вы внедрили только незапущенный код, но не часть во время выполнения.

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