我在我的应用程序中使用此代码,因为 Urban Airship (UA) 文档说
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
[[UAPush shared] resetBadge];
但它不起作用,应用程序图标上的徽章不断增加。我在UA的论坛上看到了一些关于这个问题的帖子,他们没有给出明确的答案。
编辑#1:
我收到了 UA 支持技术人员的以下回复,其中包含以下建议,效果很好:
您想要做的是确保在您的didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中,您正在调用以下内容:
[[UAPush shared] setAutobadgeEnabled:YES];
[[UAPush shared] resetBadge];//zero badge on startup
并调用[[UAPush shared] resetBadge]; 在以下方法中:
applicationDidBecomeActive:(UIApplication *)application
和
didReceiveRemoteNotification:(NSDictionary *)userInfo
技术人员还提到给applicationIconBadgeNumber赋值 0不是必须的,所以我把它拿出来了。仍然很漂亮。
编辑#2:
我最终不得不修改application:didReceiveRemoteNotification:以包含对 UA 的handleNotification:applicationState:方法的调用:
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
// Get application state for iOS4.x+ devices, otherwise assume active
UIApplicationState appState = UIApplicationStateActive;
if ([application respondsToSelector:@selector(applicationState)])
{
appState = application.applicationState;
}
[[UAPush shared] handleNotification:userInfo applicationState:appState];
[[UAPush shared] resetBadge];
}
因为我在以下情况下遇到了问题:
- 用户在应用程序中
- 收到推送通知
- 返回主屏幕时,应用程序图标上没有显示徽章(如预期的那样)
- 收到另一个推送通知
- 徽章显示的数字大于 1
通过上面的修改,处理了这种情况。我想你必须告诉 UA 收到通知并且应用程序在前台运行时处理通知。