如何更新通知徽章编号?

Posted

技术标签:

【中文标题】如何更新通知徽章编号?【英文标题】:How to update notification badge number? 【发布时间】:2014-05-30 08:55:22 【问题描述】:

对不起,我从安卓开发跳到ios开发,我想有什么功能会在收到通知时触发?或者我应该如何处理通知?

这是我的应用程序中的应用程序委托。问题是每当收到消息时,如果应用程序在后台,它不会触发 didReceiveNotification 函数,那么当应用程序在后台时如何更新徽章编号?谢谢

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    [[NSNotificationCenter defaultCenter] addObserver: self
                                             selector: @selector(switch_tabbar)
                                                 name: @"switch_tabbar"
                                               object: nil];
    //self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
   // self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    [window setRootViewController:tabBarController];
  //  self.window.rootViewController = tabBarController;
    [self.window makeKeyAndVisible];

    NSLog(@"%@",@"launch");

    application.applicationIconBadgeNumber = 0;
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
    if(launchOptions!=nil)
        NSString *msg = [NSString stringWithFormat:@"%@", launchOptions];
        //NSLog(@"launch %@",msg);
        [self createAlert:msg];
    

    NSArray *permissions = [[NSArray alloc] initWithObjects: @"publish_actions", nil];

    self.session = [[FBSession alloc] initWithPermissions:permissions];
    if (self.session.state == FBSessionStateCreatedTokenLoaded) 
        [self.session openWithCompletionHandler:^(FBSession *session,
                                                  FBSessionState status,
                                                  NSError *error) 

            [FBSession openActiveSessionWithReadPermissions:nil
                                               allowLoginUI:NO
                                          completionHandler:
             ^(FBSession *session,
               FBSessionState state, NSError *error) 
             ];

        ];
    

    return YES;


- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
    NSLog(@"%@",@"receive");
    application.applicationIconBadgeNumber = 0;
    NSString *msg = [NSString stringWithFormat:@"%@", userInfo];
    //NSLog(@"receive %@",msg);
    [self createAlert:msg];


- (void)createAlert:(NSString *)msg 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Message Received" message:[NSString stringWithFormat:@"%@", msg]delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];

【问题讨论】:

【参考方案1】:

在 iOS 中收到推送通知时,徽章计数会自动增加,我们无需在应用中更新徽章计数,

ApplePushService

iOS 中的推送通知格式


    "aps" : 
        "alert" : "You got your emails.",
        "badge" : 9,
        "sound" : "bingbong.aiff"
    ,
    "acme1" : "bar",
    "acme2" : 42

注意:“徽章”值必须为整数

【讨论】:

对不起,我不是必须调用 application.applicationIconBadgeNumber = badgeNumber;以便可以更新徽章?谢谢 只有在 ios 中打开应用时才更新 applicationIconBadgeNumber,而不是在后台 对不起,我很困惑,如果我可以创建这样的通知,你介意教我,我应该如何更改我的代码(问题中的代码)?谢谢 通过执行“application.applicationIconBadgeNumber = 0;”,您可以有效地完全移除徽章。如果您想从应用程序内部设置徽章编号,请使用相同的代码但更改编号。如果您希望推送通知更改徽章编号,请按照其他答案的说明在有效负载中设置“徽章”:NUMBER。【参考方案2】:

徽章值自动从有效负载的值递增。无论它是什么,它都会更改为键“徽章”的新值。

application.applicationIconBadgeNumber = badgeNumber 仅在您的应用程序正在运行且处于活动状态而非后台模式时才会执行。因此,没有其他方法可以在应用程序不活动时发送有效载荷中的计数来更改徽章计数。

【讨论】:

以上是关于如何更新通知徽章编号?的主要内容,如果未能解决你的问题,请参考以下文章

ios - 应用程序关闭时本地通知不更新徽章编号

如何增加徽章数量

当应用程序处于后台时,推送通知徽章编号会自动更新[重复]

如何在没有徽章编号的情况下推送通知?

如何在保留通知中心的同时清除徽章编号

应用关闭时更新徽章编号