增量后清除推送通知徽章

时间:2012-12-07 05:12:10

标签: iphone ios push-notification urbanairship.com

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

它不适合我。

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

2 个答案:

答案 0 :(得分:3)

我在我的应用程序中使用此代码,因为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

技术人员还提到将0分配给 applicationIconBadgeNumber 是没有必要的,所以我把它拿出来了。仍然很漂亮。

编辑#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
  6. 通过上述修改,可以处理此方案。我想你必须告诉UA,当收到通知并且应用程序在前台运行时,通知会被处理。

答案 1 :(得分:0)

我使用过Urban Airship并且之前遇到过这个问题。您没有显示代码,但我假设收到通知后,您将应用程序徽章编号设置为城市飞艇传递给您的,不要这样做。只需让应用程序自行处理,当有远程通知进入时,让它自动增加。如果情况并非如此,那么在城市飞艇方面,您可以设置一个随推送发送的徽章编号。不要使用推送通知发送徽章编号,请将该部分保留,iOS应自动从当前徽章编号增加徽章。