【问题标题】:iOS - Push notification alert is not shown when the app is runningiOS - 应用程序运行时不显示推送通知警报
【发布时间】:2011-12-19 09:47:15
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

我在我的应用程序委托中使用了这样的代码来模拟应用程序处于活动状态时的通知警报。您应该实现适当的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
  }
}

【讨论】:

  • 谢谢。为我工作得很好。 :)
  • 太棒了!有没有办法播放通知声音?
  • @FernandoSantiago 抱歉回复晚了,但我还没有调查过……希望你找到了播放声音的方法。
【解决方案2】:

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

Link to GitHub: AGPushNote

用法基本在线:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      只有这个函数会被调用,你必须在这种情况下明确显示警报,如果应用程序正在运行并且你已经实现了通知,则不会收到通知。将断点放在那里并在函数调用时处理通知调用和在那里显示您的自定义警报。

      【讨论】:

        【解决方案5】:

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

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

        并通过访问userInfo 变量

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

            这是一个支持 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 即可呈现(显示)警报 **

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-03-12
              • 2015-09-15
              • 1970-01-01
              • 1970-01-01
              • 2019-04-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多