增加后清除推送通知徽章

我正在iphone上推送通知。 当我收到推送通知时,其在我的应用程序图标上显示1,下一次它的2,3,4。 如果我打开应用程序的0.下一次它应该是1,2,3,4 …但它显示最后的数字和+1。 打开应用程序后,我想重置推送通知徽章。 我从城市飞艇发送+1。

它不适合我

[[UIApplication sharedApplication] cancelAllLocalNotifications]; [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 

我在我的应用程序中使用这个代码,因为城市飞艇(UA)文档说

 [UIApplication sharedApplication].applicationIconBadgeNumber = 0; [[UAPush shared] resetBadge]; 

但它不起作用,应用程序图标上的徽章不断增加。 我在UA论坛的这个问题上看到了几个post,他们没有给出明确的答案。

编辑#1:

我收到UA支持技术人员的以下回应,提出了以下build议,这些build议非常有效:

你要做的是确保在你的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:

我结束了不得不修改应用程序: 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. 用户在应用中
  2. 推送通知
  3. 返回主屏幕时,应用程序图标上没有显示徽章(如预期的那样)
  4. 接收到另一个推送通知
  5. 显示的徽章数大于1

通过上面的修改,可以处理这种情况。 我想你必须告诉UA,当收到一个通知,并且应用程序在前台运行时,处理通知。

我曾经用过Urban Airship,之前有这个问题。 你没有显示代码,但我认为,当收到通知时,你正在设置应用程序的徽章号​​码,城市飞艇传递给你,不要这样做。 只要让应用程序自己处理这个,当一个远程通知进来时,让它自动增加。 如果不是这样的话,那么在城市飞艇的一边,你可以设置一个徽章号码来发送。 不要发送带推送通知的徽章号码,不要发送该部分,iOS应自动将您的徽章从当前的徽章号码中递增。