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

Posted

技术标签:

【中文标题】推送通知在应用程序运行时不起作用(活动)[重复]【英文标题】:Push notification Doesnt work when the Application is running(Active) [duplicate] 【发布时间】:2013-08-06 08:56:00 【问题描述】:

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

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

 

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

【问题讨论】:

它不显示通知,但您是否看到日志:“Received notification: XXX”和“Received Push Badge: YYY”(其中 XXX 和 YYY 是字符串) 【参考方案1】:

当您的应用程序处于活动模式时,您需要将此方法类似于以下内容放入您的 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);
 

【讨论】:

【参考方案2】:

你对这段代码有什么期望:[[NSNotificationCenter defaultCenter] postNotificationName:@"Notification" object:messageAlert];??

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

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

【讨论】:

【参考方案3】:

如果我没记错的话,Apple 会在您的应用程序运行与否时将推送通知发送到不同的地方。您只实现了未启动的代码,而不是执行期间的部分。

【讨论】:

以上是关于推送通知在应用程序运行时不起作用(活动)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

收到消息时向 iOS 推送通知不起作用

iOS推送通知在生产中不起作用

推送通知在前台不起作用

打开应用程序时推送通知不起作用

服务器更改时推送通知不起作用

如果应用程序打开,离子推送通知不起作用