推送通知到达时,应用程序徽章图标未更新

我已经查看了有关在午夜更新应用程序徽章的问题, 其中包括以下选项:应用程序未启动或在后台,徽章编号可能会减少,并且在通知到达时更改应用程序图标徽章,并且当应用程序关闭时 推送通知徽章计数未更新和更新徽章图标更多,但我有同样的问题,当应用程序在后台和推送通知到达时,应用程序徽章图标不会更新。

我检查了所有可能性。 我的代码是:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { UIApplicationState appState = UIApplicationStateActive; if ([application respondsToSelector:@selector(applicationState)]) { appState = application.applicationState; } for (id key in userInfo) { NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]); } NSLog(@"remote notification: %@",[userInfo description]); [UIApplication sharedApplication].applicationIconBadgeNumber = [[[userInfo valueForKey:@"aps"] valueForKey:@"badge"] integerValue]; UIApplicationState state = [application applicationState]; if (state == UIApplicationStateActive) { NSString *message = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"]; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; } } 

是的,当应用程序处于前台时,它正常工作,然后它显示警报正常。 但当应用程序处于后台时,既不会发生任何事件也不会更新应用程序徽章图标 我还设置了背景模式,如ios7.1所示:推送通知徽章更新问题 ,我还测试了应用程序徽章图标是否正确并在应用程序处于前台时在NSLog中打印。 当应用程序进入后台并且工作正常时,我需要将未读消息设置为徽章图标,但是当任何新推送通知到达时应该更新它。 请建议我选择。

最后这个问题解决了。 确实,app在后台时没有触发任何动作。 因此didReceiveRemoteNotification中的appDelegate方法也不会在应用程序处于后台时触发。

当任何新的推送通知到达设备时,应用程序徽章图标由iOS设置。 有效载荷与@rahulPatel说的相同。 我没做什么改变,因为BADGE_COUNT是从数据库中提取的,虽然它是INTEGER但是考虑到字符串和字符串不被iOS采用,这就是为什么我的应用程序的徽章图标在通知到达时不会更新。 现在我从服务器端的代码变成这样:

 $badges=(int)$cntmsg; $body['aps'] = array( 'alert' => $message, 'sound' => 'default', 'badge' => $badges //'msg_id'=> $msg_id ); 

所以通过将计数msg更改为(int)它解决了我的问题。 谢谢。

通常在所有应用中,未读通知计数都在服务器中维护。 当服务器向特定设备发送推送通知时,令牌服务器会发送徽章计数以及有效负载

您的服务器逻辑需要跟踪正确的徽章计数并适当地发送它。

 { "aps" : { "alert" : "Your notification message to show", "badge" : BADGE_COUNT , "sound" : "sound.caf" } }