增加推送通知徽章iPhone

时间:2012-06-22 09:31:45

标签: iphone objective-c xcode push-notification

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

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

我使用过此代码但无效。

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

5 个答案:

答案 0 :(得分:51)

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

的通知
application:didReceiveRemoteNotification:

委托,因此您可以从(NSDictionary *)userInfo接收徽章计数。因此,您可以使用功能

更新应用程序图标徽章计数
[UIApplication sharedApplication].applicationIconBadgeNumber = [[[userInfo objectForKey:@"aps"] objectForKey: @"badgecount"] intValue];

认为这应该对你有帮助。

答案 1 :(得分:12)

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

答案 2 :(得分:5)

当您的应用程序处于后台模式时出现推送通知&如果要增加徽章编号,您应该向服务器发送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];
            }
        }
    }
}

答案 3 :(得分:3)

Urban Airship使用“autobadge”功能支持this

答案 4 :(得分:0)

打开App时收到远程通知

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

int badgeCount = [UIApplication sharedApplication].applicationIconBadgeNumber;
    badgeCount = badgeCount + 1;