苹果推送通知不会自动更改图标徽章

我看到我的iPhone(4S,iOS 5.1)中的邮件应用会在新邮件到达时自动更新徽章计数,即使应用程序未运行。 所以有可能在我的应用程序中实现这种行为,对吧?

我的应用程序成功注册了所有3种types的推送通知 – 徽章,警报和声音。 对于此应用程序的所有3种types的远程通知,电话设置均设置为开。

我的应用程序收到远程通知,并显示警报,播放声音,但它不会更新徽章号码。 如果我通过警报上的查看button启动应用程序,那么我的应用程序可以完美地读取徽章值,并且可以从代码中更改/删除/设置图标徽章。

通知到达时,iOS无法自动更改我的应用的图标徽章的具体原因? 我已经看到所有类似的post,他们都在讨论关于电话设置,或者关于它注册的通知types,或者检查有效载荷JSON包括徽章。

有没有其他原因可能会导致这个问题?

这是我的代码块:

每次启动应用程序时注册APN –

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

设备令牌几乎立即收到。 令牌已经发送给提供商,并且我正在接收通知。 警报和声音的作品。 但徽章没有自动的效果,直到我启动应用程序,并手动更改。 请帮忙。

顺便说一句,我有这个完全相同的问题 – 徽章图标没有引用。 经过几个小时的尝试调整JSON(在validation手机上的应用程序显示徽章,声音,警报)后 – 问题是我已经添加了UIRemoteNotificationTypeNewsstandContentAvailability作为我的应用程序注册的警报types之一。 (我疯了,只是捡一切)

所以,当UIRemoteNotificationTypeNewsstandContentAvailability也混在一起时,它似乎覆盖了允许aps /徽章号码更新应用程序图标的function。 (必须看着更新报摊信息)

这个问题现在已经解决了。 提供商服务器使用引号(如JSONstring,即“9”)发送徽章号码。 奇怪的是,APNs / iOS不认为它是整数。 现在引号被删除,它的工作:)

我有一个类似的问题,通过在徽章号码中强制使用整数(使用来自MySQL数据库的数据)来解决它:

 $body['aps'] = array( 'alert' => array( 'action-loc-key'=> utf8_encode($r['button_action']), 'body' => utf8_encode($r['message']), 'launch-image' => '' ), 'badge' => (int)$r['badge_number'], 'sound' => 'default' ); 

Ps:看看utf8_encode命令,以避免我也遇到过一个json_encode错误。