推送通知在应用程序运行时不起作用(活动)

时间:2013-08-06 08:56:00

标签: iphone ios ipad

我正在使用推送通知处理一个简单的应用程序,并成功实现了它。当我退出应用程序时,我得到一个推送通知(运行良好)但是当我打开应用程序并尝试从我的服务器(Web应用程序)发送消息时,它不会显示任何弹出消息或通知。我错过了什么吗?这是我在AppDelegate.m上的代码片段

- (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];

 }

请帮我解决这个问题。感谢。

3 个答案:

答案 0 :(得分: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);
} 

答案 1 :(得分:0)

您对此代码的期望是什么:[[NSNotificationCenter defaultCenter] postNotificationName:@"Notification" object:messageAlert]; ??

我想你错过了一些基础知识..要提出警报,你应该看看UIAlertViewNSNotificationCenter用于应用程序中的内部数据流。 (观察员模式)

当您的应用程序正在运行时,系统不会自动显示任何警报。您需要从application:didReceiveRemoteNotification:开始自行处理推送消息。 NSNotificationCenterPush Notifications完全不同。他们不是彼此的一部分。

答案 2 :(得分:0)

如果我正确回忆,Apple会在您的应用运行与否时向不同位置发送推送通知。您只实现了未启动的代码,但没有实现执行期间的部分。