Как обрабатывать push-уведомления, если приложение уже запущено? - PullRequest
27 голосов
/ 12 октября 2009

Как мы обрабатываем push-уведомления, если приложение уже запущено? Я хочу показать предупреждение, если приложение запущено (вместо уведомления с push-уведомлением). Только если приложение не запущено, показывать оповещение push-уведомления.

Кроме того, если я отправляю полезные данные в APN, как я могу создать предупреждение с помощью кнопки отмены?

Ответы [ 4 ]

52 голосов
/ 12 октября 2009

Вы можете реализовать application:didReceiveRemoteNotification:

Вот возможный пример кода:

- (void)application:(UIApplication *)application
   didReceiveRemoteNotification:(NSDictionary *)userInfo
{
  NSString *message = nil;
  id alert = [userInfo objectForKey:@"alert"];
  if ([alert isKindOfClass:[NSString class]]) {
    message = alert;
  } else if ([alert isKindOfClass:[NSDictionary class]]) {
    message = [alert objectForKey:@"body"];
  }
  if (alert) {
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Title"
                                       message:@"AThe message."  delegate:self
                             cancelButtonTitle:@"button 1"
                             otherButtonTitles:@"button", nil];
    [alertView show];
    [alertView release];
  }
45 голосов
/ 30 апреля 2011

Вы можете проверить состояние приложения UIA. Просто сделайте проверку, как это

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{

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

            UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"xxx" message:yourMessage delegate:self cancelButtonTitle:@"Done" otherButtonTitles: @"Anzeigen", nil] autorelease];
            [alert setTag: 2];
            [alert show];
    }
    else {
        // Push Notification received in the background
    }
}
14 голосов
/ 28 сентября 2010

Ключ «alert» не будет находиться непосредственно под словарем userInfo, вам нужно получить другой словарь с именем «aps», а затем получить «alert» или «body» из словаря «aps».

5 голосов
/ 27 января 2012

Повторение 3 уровней полезной нагрузки

 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

for (id key in userInfo) {
    NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);
    NSString *message = nil;

NSDictionary *aps = [NSDictionary dictionaryWithDictionary:(NSDictionary *) [userInfo objectForKey:key] ];   
    for (id key1 in aps){
         NSLog(@"key1: %@", key1);
        id alert = [aps objectForKey:key1];
        if ([alert isKindOfClass:[NSDictionary class]]) {
            message = [alert objectForKey:@"body"];
             NSLog(@"body: %@, value: %@", key1, message);
            message = [alert objectForKey:@"loc-args"];
            NSLog(@"loc-args: %@, value: %@", key1, message);
            NSArray *args = (NSArray *) [alert objectForKey:@"loc-args"] ;
                for (id key2 in args){
                    NSLog(@"key2: %@, value: ", key2);
                }
            message = [alert objectForKey:@"action-loc-key"];
            NSLog(@"action-loc-key: %@, value: %@", key1, message);

        }
        else if ([alert isKindOfClass:[NSArray class]]) {
            for (id key2 in key1){
                NSLog(@"key2: %@, value: %@", key2, [key1 objectForKey:key2]);
            }
        }
        else if([key1 isKindOfClass:[NSString class]]) {
            message = [aps objectForKey:key1];
            NSLog(@"key1: %@, value: %@", key1, message);
        } 

    }
  } 

}

Результат:

2012-01-27 20:38:09.599 SPush[4181:707] key: aps, value: {
alert =     {
    "action-loc-key" = Open;
    body = test;
    "loc-args" =         (
        1000,
        2000
    );
};
badge = 0;
"content-available" = 10;
sound = default;
}
2012-01-27 20:38:13.133 SPush[4181:707] key1: alert
2012-01-27 20:38:13.134 SPush[4181:707] body: alert, value: test
2012-01-27 20:38:13.137 SPush[4181:707] loc-args: alert, value: (
1000,
2000
)
2012-01-27 20:38:13.138 SPush[4181:707] key2: 1000, value: 
2012-01-27 20:38:13.139 SPush[4181:707] key2: 2000, value: 
2012-01-27 20:38:13.140 SPush[4181:707] action-loc-key: alert, value: Open
2012-01-27 20:38:13.141 SPush[4181:707] key1: sound
2012-01-27 20:38:13.143 SPush[4181:707] key1: sound, value: default
2012-01-27 20:38:13.144 SPush[4181:707] key1: badge
2012-01-27 20:38:13.145 SPush[4181:707] key1: badge, value: 0
2012-01-27 20:38:13.146 SPush[4181:707] key1: content-available
2012-01-27 20:38:13.147 SPush[4181:707] key1: content-available, value: 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...