应用程序在后台时如何增加徽章编号

时间:2014-02-24 07:22:56

标签: ios iphone objective-c

我正在使用此代码。当推送通知到来时,每件事情都正常工作但是当应用程序在后台时,徽章编号不会增加。如何解决这个问题呢?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

    //UIApplication *application = [UIApplication sharedApplication];
    NSInteger badgeNumber = [application applicationIconBadgeNumber];// Take the current badge number
    //badgeNumber--;    // decrement by one
    [application setApplicationIconBadgeNumber:[[[launchOptions valueForKey:@"aps"]valueForKey:@"badge"]integerValue]];  // set ne badge number

    NSLog(@"userInfo :%@  %d",launchOptions,[[[launchOptions valueForKey:@"aps"]valueForKey:@"badge"]integerValue]);


    return YES;
}

3 个答案:

答案 0 :(得分:2)

当应用程序在后台时,didFinishLaunchingWithOptions方法永远不会调用。当你的应用程序处于后台时,你需要在AppDelegate's applicationDidEnterBackground:方法中实现你的逻辑。

- (void)applicationDidEnterBackground:(UIApplication *)application{

[UIApplication sharedApplication].applicationIconBadgeNumber = 2;
}

答案 1 :(得分:2)

当应用处于后台或关闭状态时,您无法使用代码增加徽章编号但徽章可以按通知有效负载中的值增加。在此状态期间不会执行任何代码,并且操作系统本身会处理推送通知。 This link有同样的问题并已解决。

检查推送通知有效负载是否包含应用程序徽章字段并设置为大于0的值。如果为0,则当应用程序处于后台或关闭时,徽章编号将为0。

答案 2 :(得分:1)

发送推送通知时,您需要添加徽章值。因此,您需要为每个用户设备设置手柄徽章。在PHP中是这样的:

$body['aps'] = array(
'alert' => $message,
'sound' => 'default',
'badge'=> 10
);

其中10只是图标中显示的数字。