增量后清除推送通知徽章



我正在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的论坛上看到了一些关于这个问题的帖子,但他们没有给出明确的答案。

编辑#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

技术人员还提到,没有必要将0分配给应用程序IconBadgeNumber,所以我取了它。仍然很漂亮。

编辑#2:

我最终不得不修改应用程序:didReceiveRemoteNotification:,以包括对UA的句柄通知:applicationState: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. 用户在应用程序中
  2. 收到推送通知
  3. 返回主屏幕时,应用程序图标上未显示徽章(如预期)
  4. 收到另一个推送通知
  5. 徽章显示的数字大于1

通过上述修改,可以处理此场景。我想你必须告诉UA,当收到通知并且应用程序在前台运行时,就会处理通知。

我使用过Urban Airship,以前也遇到过这个问题。你没有显示代码,但我假设当收到通知时,你正在将应用程序徽章号码设置为城市飞艇传递给你的号码,不要这样做。只需让应用程序自行处理即可,当收到远程通知时,让它自己自动递增。如果不是这样的话,可能是在城市飞艇一侧,你正在设置一个徽章号码,以便通过推送发送。不要在推送通知中发送徽章号码,忽略这一部分,iOS应该从当前徽章号码自动递增您的徽章。

最新更新