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

时间:2014-08-27 16:11:28

标签: ios objective-c apple-push-notifications urbanairship.com

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

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

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

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

3 个答案:

答案 0 :(得分:8)

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

如果您看到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
}

答案 1 :(得分:2)

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

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 in their support articles处理推送通知的正确方法的更多信息。由于您使用的是UA,我建议您使用他们的代理等在前台处理传入的推送通知,而不是在didReceiveRemoteNotification app委托方法中实现您自己的代码。

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

答案 2 :(得分:0)

此答案适用于寻找相同内容的迅速用户

let state = application.applicationState

        if (state == .active) {
            //app is in foreground
            //the push is in your control
        } else {
            //app is in background:
            //iOS is responsible for displaying push alerts, banner etc..
        }

如果您还有其他疑问,请参考选中的答案。 Apple Documentation on handling Notifications