Ios 推送通知到达时应用程序徽章图标未更新
我已经仔细研究了这个问题 及 及 还有更多的问题,但我有相同的问题,当应用程序在后台,推送通知到达,应用程序徽章图标不更新 我已经检查了所有的可能性。我的代码是:Ios 推送通知到达时应用程序徽章图标未更新,ios,iphone,notifications,push-notification,badge,Ios,Iphone,Notifications,Push Notification,Badge,我已经仔细研究了这个问题 及 及 还有更多的问题,但我有相同的问题,当应用程序在后台,推送通知到达,应用程序徽章图标不更新 我已经检查了所有的可能性。我的代码是: -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { UIApplicationState appState = UIApplicationStateActive;
-(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];
}
}
是的,当应用程序在前台时,它工作正常,然后显示警报正常。但当应用程序处于后台时,既不会发生任何事件,也不会更新应用程序徽章图标。我还设置了后台模式,如中所示,并且我还测试了当应用程序位于前台时,应用程序徽章图标是否正确接收并打印在NSLog中。我需要设置它未读的消息作为徽章图标时,应用程序是在后台和它的工作良好,但它应该更新时,任何新的推送通知到达。请向我推荐选项。通常在所有应用程序中,未读通知计数都保存在服务器中当服务器向特定设备发送推送通知时,令牌服务器会将徽章计数与有效负载一起发送 您的服务器逻辑需要跟踪正确的徽章计数并适当发送
{
"aps" :
{
"alert" : "Your notification message to show",
"badge" : BADGE_COUNT ,
"sound" : "sound.caf"
}
}
这个问题终于解决了。确实,应用程序在后台时不会触发任何动作。因此,当应用程序处于后台时,
appDelegate
中的didReceiveMemotentification
方法也不会触发
当任何新推送通知到达设备时,iOS会设置应用程序徽章图标。有效载荷与@rahulPatel所说的相同。我很少改变,因为BADGEZY计数是从数据库中提取的,虽然它是整数,但是考虑到字符串和字符串不是由IOS获取的,这就是为什么当通知到达时,我的应用程序的徽标图标没有更新。现在,我的服务器端代码如下所示:
$badges=(int)$cntmsg;
$body['aps'] = array(
'alert' => $message,
'sound' => 'default',
'badge' => $badges
//'msg_id'=> $msg_id
);
因此,通过将count msg更改为(int),它解决了我的问题。谢谢。它必须从服务器端而不是从iOS端进行管理。@iPatel是的,但是为什么在设置aps->badge时没有更新badge图标?当通知到达并且应用程序无法处理通知时,徽章图标应设置为aps->badge的值,因为它在后台。服务器端代码正常,我已经对其进行了测试。它给出了完美的徽章计数结果,我已经通过调试进行了检查,当应用程序在前台时,它给出了完美的结果。但当通知到达并且应用程序位于后台时,它应该更新应用程序图标徽章。是的,正如您在代码中所显示的,它在服务器端是正确的。它每次都会发送更新的徽章计数。我收到推送通知作为远程通知:{aps={alert=“单击以查看消息”。“badge=34;sound=default;};};}您是否厌倦了使用不同的ios设备进行检查?是的,rahul,问题已经解决了。。。当从数据库获取此BADGE_计数值时,它将变为字符串,这是problemBadge计数器的字符串格式。从服务器将其设置为整数解决了我的问题。