我已经查看了关于 Updating application badge at midnight with options: app not launched or in background, badge number can decrease 的问题 和 Changing application icon badge when notification arrives 和 Push Notification Badge Count Not Updating 和 Update badge icon when app is closed还有更多,但我有同样的问题,当应用程序在后台并且推送通知到达时,应用程序角标(Badge)图标没有更新。
我已经检查了所有的可能性。我的代码是:
-(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];
}
}
是的,当应用程序处于前台时它工作正常然后它显示警报正常。但是当应用程序在后台时,既没有发生任何事件也没有更新应用程序角标(Badge)图标。我还设置了背景模式,如 ios7.1: push notification badge update issue 所示。并且我还测试了当应用程序处于前台时应用程序角标(Badge)图标被正确接收并打印在 NSLog 中。当应用程序在后台运行并且它工作正常时,我需要将它设置为未读消息作为角标(Badge)图标,但是当任何新的推送通知到达时它应该被更新。请给我建议选项。
最佳答案
这个问题终于解决了。确实,当应用程序处于后台时,不会触发任何操作。因此 appDelegate
中的 didReceiveRemoteNotification
方法在应用处于后台时也不会触发。
当任何新的推送通知到达设备时,应用程序角标(Badge)图标由 iOS 设置。有效负载与@rahulPatel 所说的相同。我几乎没有做任何改变,因为 BADGE_COUNT 是从数据库中获取的,虽然它是 INTEGER,但考虑到字符串和字符串不被 iOS 使用,这就是为什么我的应用程序的角标(Badge)图标在通知到达时没有更新的原因。现在我的服务器端代码变成这样:
$badges=(int)$cntmsg;
$body['aps'] = array(
'alert' => $message,
'sound' => 'default',
'badge' => $badges
//'msg_id'=> $msg_id
);
所以通过将 count msg 更改为 (int) 它解决了我的问题。谢谢。
关于ios - 推送通知到达时应用程序角标(Badge)图标未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23931484/