我正在使用此代码。当推送通知到来时,每件事情都正常工作但是当应用程序在后台时,徽章编号不会增加。如何解决这个问题呢?
- (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;
}
答案 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只是图标中显示的数字。