当应用程序在前台运行时收到iOS推送通知

根据我的理解,当应用程序正在运行或在前台并且收到推送通知时,应用程序不应显示任何警报,但应用程序委托将调用didReceiveRemoteNotification委托方法,我应该在该回调中处理推送通知。

当应用程序在后台时,推送通知应仅显示警报/横幅。

但是,我们的应用程序在应用程序运行时或在某个时间(而不是所有时间)在前台获得推送通知警报。 我想知道它是否是iOS 7中的新function(我从未听说过这个)或是因为我使用UrbanAirship为我们的iOS应用程序使用用户的alias进行推送通知。 应用程序将在运行时显示推送警报,并在didReceiveRemoteNotification运行回调。

抓住我的头。 有谁知道为什么?

当应用程序位于前台时,它不应显示任何内容。

如果您看到alertView,则表示您为其提供了代码。

以下内容:

 -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { UIApplicationState state = [application applicationState]; if (state == UIApplicationStateActive) { //app is in foreground //the push is in your control } else { //app is in background: //iOS is responsible for displaying push alerts, banner etc.. } } 

如果您已实现pushNotificationDelegate

 [UAPush shared].pushNotificationDelegate = self; 

然后覆盖,并将其留空

 - (void)displayNotificationAlert:(NSString *)alertMessage { //do nothing } 

由于您的代码中配置了Urban Airship的方式,您很可能会看到额外的推送通知。 来自Urban Airship的文档 :

The sample UI includes an implementation of UAPushNotificationDelegate that handles alerts, sounds, and badges. However, if you wish to customize this behavior, you can provide your own implementation:

[UAPush shared].pushNotificationDelegate = customPushDelegate;

有关使用Urban Airship处理推送通知的正确方法的更多信息,请参阅其支持文章 。 由于您使用的是UA,我建议您在前台处理传入的推送通知,而不是在didReceiveRemoteNotification应用委托方法中实现自己的代码。

希望这有帮助…如果没有,请发布您的代码,以便我们可以破译正在发生的事情。 这确实是非常奇怪的行为!