5

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

它不适合我。

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

2 回答 2

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

技术人员还提到给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. 用户在应用程序中
  2. 收到推送通知
  3. 返回主屏幕时,应用程序图标上没有显示徽章(如预期的那样)
  4. 收到另一个推送通知
  5. 徽章显示的数字大于 1

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

于 2013-05-14T00:18:10.020 回答
0

我用过Urban Airship,以前也遇到过这个问题。您没有显示代码,但我假设收到通知时,您将应用程序徽章编号设置为城市飞艇传递给您的编号,不要那样做。只要让应用程序自己处理这个,当远程通知进来时,让它自己自动递增。如果不是这种情况,则可能是在城市飞艇方面,您正在设置一个徽章编号以随推送发送。不要在推送通知中发送徽章编号,留下那部分,iOS 应该从当前徽章编号自动增加您的徽章。

于 2012-12-07T05:31:23.373 回答