44

是否可以在收到通知时增加徽章值。或者我应该将计数作为有效负载发送吗?

如果我每次都将徽章值发送为“1”,如果应用程序未打开,我如何增加应用程序图标中的徽章值。

我已经使用了此代码,但不起作用。

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    [UIApplication sharedApplication].applicationIconBadgeNumber = [UIApplication sharedApplication].applicationIconBadgeNumber + 1; 
}
4

5 回答 5

55

通常在所有应用程序中,未读通知计数都保存在服务器中。当服务器向特定设备令牌发送推送通知时,它们会连同有效负载一起发送徽章计数。一旦设备收到通知并且您的应用程序处于后台(或被终止),操作系统会自动将徽章计数更新为您的应用程序图标。如果您的应用程序是否正在运行,您将在

application:didReceiveRemoteNotification:

委托,因此您可以从 (NSDictionary *)userInfo 接收徽章计数。因此,您可以使用该功能更新应用程序图标徽章计数

[UIApplication sharedApplication].applicationIconBadgeNumber = [[[userInfo objectForKey:@"aps"] objectForKey: @"badgecount"] intValue];

认为这应该对您有所帮助。

于 2012-06-22T10:44:45.963 回答
15

如果应用程序未打开,您将无法增加徽章,除非从有效负载中。

于 2012-06-22T09:32:58.283 回答
6

当您的应用程序处于后台模式时出现推送通知并且您想要增加徽章编号时,您应该向服务器发送一个badgeCount,以便服务器知道当前计数。

如果您从服务器端管理徽章计数,那么此代码就足够了:-

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  {
    NSLog(@"remote notification: %@",[userInfo description]);

    if (userInfo) {
        NSLog(@"%@",userInfo);

        if ([userInfo objectForKey:@"aps"]) { 
            if([[userInfo objectForKey:@"aps"] objectForKey:@"badgecount"]) {
                [UIApplication sharedApplication].applicationIconBadgeNumber = [[[userInfo objectForKey:@"aps"] objectForKey: @"badgecount"] intValue];
            }
        }
    }
}
于 2012-06-22T09:51:33.907 回答
3

Urban Airship使用他们的“autobadge”功能支持这一点。

于 2013-08-08T13:58:45.617 回答
-1

打开App收到远程通知后,

使用以下代码在 Appdelegate 文件的“didBecomeActive”方法中获取当前徽章编号:

int badgeCount = [UIApplication sharedApplication].applicationIconBadgeNumber;
    badgeCount = badgeCount + 1;
于 2014-03-14T08:22:29.500 回答