根据我的理解,当应用程序正在运行或在前台并且收到推送通知时,应用程序不应显示任何警报,但应用程序代理将调用didReceiveRemoteNotification
委托方法,我应该处理推送通知在那次回调中。
当应用在后台时,推送通知应仅显示警告/横幅。
然而,我们的应用程序在应用程序运行时或在某个时间(而不是所有时间)在前台获得推送通知警报。我想知道它是否是iOS 7中的新功能(我从未听说过这个)或是因为我使用UrbanAirship
使用alias
用户的didReceiveRemoteNotification
推送通知。该应用程序将在运行时显示推送提醒,并在{{1}}中运行回调。
抓住我的头。有谁知道为什么?
答案 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