我一直在努力寻找一些似乎应该“正常工作”的东西。我通过Urban Airship建立了推送通知,除了应用程序在后台的徽章更新外,一切正常。据我所知,只要徽章设置为有效载荷中的整数,如果应用程序不在前台,这应该自行处理。
如果我在应用程序位于前台时捕获徽章更新,我可以正确设置它,但这不是我想在我的应用程序中使用徽章的原因。
以下是didFinishLaunchingWithOptions:
UAConfig *config = [UAConfig defaultConfig];
// You can also programatically override the plist values:
// config.developmentAppKey = @"YourKey";
// etc.
// Call takeOff (which creates the UAirship singleton)
[UAirship takeOff:config];
[UAPush shared].notificationTypes = (UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeNewsstandContentAvailability);
[[UAPush shared] setPushEnabled:YES];
[[UAPush shared] setAutobadgeEnabled:YES];
[self performSelector:@selector(resetUABadge:)];
[[UAPush shared] handleNotification:[launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]
applicationState:application.applicationState];
当应用程序启动时,resetUABadge调用只会将所有内容设置回0。无论是否存在performSelector,都会出现此问题。
我不确定是否有某些配置我缺少或者是什么,但推送通知的其他部分在应用程序背景/关闭(警报,声音)时有效,但徽章根本不会更新。
答案 0 :(得分:5)
我通过this question找到了答案。如果您同时注册UIRemoteNotificationTypeBadge
和UIRemoteNotificationTypeNewsstandContentAvailability
,则报摊类型会完全打破徽章。不可否认,我本来就不应该首先在报摊上注册,但我从没想过它会破坏徽章。
叹息。