iOS - 应用程序运行时不显示推送通知警报

时间:2011-11-01 10:55:28

标签: ios objective-c iphone push-notification uialertview

我在我的应用中集成了推送通知。用户将收到推送通知以加入群组。当用户点击加入时,我将处理代码中的内容。所以我正在实施:

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

当应用未运行时,此功能正常。
当应用程序运行时,我看不到任何UIAlertView。如何让我的应用程序显示推送通知提醒,以便用户仍然可以决定是否加入?

7 个答案:

答案 0 :(得分:70)

我在我的应用程序委托中使用了这样的代码来模拟应用程序处于活动状态时的通知警报。您应该实现适当的UIAlertViewDelegate协议方法来处理用户点击任一按钮时发生的情况。

- (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:@"Some title"
       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
  }
}

答案 1 :(得分:17)

对于任何可能感兴趣的人,我最终创建了一个自定义视图,它看起来像顶部的系统推送横幅,但添加了一个关闭按钮(小蓝色X)和一个用于点击消息以进行自定义操作的选项。它还支持在用户有时间读取/解除旧通知之前到达多个通知的情况(没有限制可以堆积多少...)

Link to GitHub: AGPushNote

用法基本上是在线:

[AGPushNoteView showWithNotificationMessage:@"John Doe sent you a message!"];

在iOS7上看起来像这样(iOS6具有iOS6的外观和感觉......)

Example

答案 2 :(得分:1)

如果您愿意,您必须自己显示提醒。这是故意行为,如清单2-6下面的http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html所述

答案 3 :(得分:1)

要在运行应用程序时显示警报视图,您必须使用

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

并访问userInfo变量

答案 4 :(得分:1)

只会调用此函数,并且您必须明确显示此情况下的警报如果正在运行的应用程序正在执行通知,则不会发出通知。请在此处设置断点并在函数调用时处理通知调用在那里显示您的自定义提醒。

答案 5 :(得分:0)

应用程序仍将在您的App Delegate中收到-application:didReceiveRemoteNotification消息,但您必须自行处理该消息(即默认情况下不显示警报)。

userInfo参数包含一个带有键notificationType的对象,您可以使用该对象来识别推送消息。

答案 6 :(得分:0)

这是一个支持UIAlertController的版本

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
UIApplicationState state = [application applicationState];
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
if (state == UIApplicationStateActive) {

    UIAlertController * alert=   [UIAlertController
                                  alertControllerWithTitle:notification.alertTitle
                                  message:notification.alertBody
                                  preferredStyle:UIAlertControllerStyleAlert];

    UIAlertAction* ok = [UIAlertAction
                         actionWithTitle:@"OK"
                         style:UIAlertActionStyleDefault
                         handler:^(UIAlertAction * action)
                         {
                             [alert dismissViewControllerAnimated:YES completion:nil];

                         }];

    [alert addAction:ok];

    [self.navigationController presentViewController:alert animated:YES completion:nil];

}

}

**请注意我的应用程序在App Delegate中使用self.navigationController,只需挂钩任何ViewController即可显示(显示)Alert **