如果应用程序已经运行,如何处理推送通知?

如果应用程序已经运行,我们如何处理推送通知? 如果应用程序正在运行(而不是推送通知警报),我想显示警报。 只有当应用程序没有运行,然后显示推送通知警报。

另外,如果我发送有效载荷到APN,如何使用取消button创build警报?

你可以实现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]; } 

你可以检查UIApplication的状态。 只要做一个这样的检查

  - (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 } } 

“alert”键不会直接在userInfo字典下,你需要得到另一个名字为“aps”的字典,然后从“aps”字典中获得“alert”或“body”。

迭代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