我在我的应用程序中使用此代码,因为 Urban Airship (UA) 文档说
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
[[UAPush shared] resetBadge];
但它不起作用,应用程序图标上的徽章不断增加。我在UA的论坛上看到了一些关于这个问题的帖子,但他们没有给出明确的答案。
EDIT #1:
我收到了 UA 的支持技术人员的回复,其中包含以下建议,效果非常好:
您想要做的是确保在您的didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法,您正在调用以下内容:
[[UAPush shared] setAutobadgeEnabled:YES];
[[UAPush shared] resetBadge];//zero badge on startup
并且还打电话[[UAPush共享]resetBadge];也可以通过以下方法:
applicationDidBecomeActive:(UIApplication *)application
and
didReceiveRemoteNotification:(NSDictionary *)userInfo
技术人员还提到,将 0 分配给应用程序图标徽章编号没有必要,所以我把它拿出来了。仍然工作得很漂亮。
EDIT #2:
我最终不得不修改应用程序:didReceiveRemoteNotification:包括对 UA 的呼叫处理通知:应用程序状态: method:
-(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,当收到通知并且应用程序在前台运行时,通知就会被处理。