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

时间:2012-07-03 19:19:38

标签: ios apple-push-notifications badge

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

我的应用程序成功注册所有3种类型的推送通知 - 徽章,警报和声音。 对于此应用程序,所有3种类型的远程通知的“电话设置”都设置为“开启”。

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

当通知到达时,iOS无法自动更改我的应用图标徽章的任何特定原因?我看过所有类似的帖子,他们都在讨论手机设置,或者关于它注册的通知类型,或关于检查有效载荷JSON是否包含徽章。

是否还有其他可能导致此问题的原因?

这是我的代码块:

每次启动应用时注册APN -

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

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

3 个答案:

答案 0 :(得分:27)

我也有同样的问题。徽章图标未引用。经过几个小时试图调整JSON(在手机上验证应用程序显示徽章,声音,警报后) - 问题是我添加了 UIRemoteNotificationTypeNewsstandContentAvailability 作为我的应用注册的警报类型之一。 (我疯了,只是挑了一切)

因此,当UIRemoteNotificationTypeNewsstandContentAvailability也在混合中时,它似乎会覆盖允许aps /徽章数字更新应用图标的功能。 (必须要更新报摊信息)

答案 1 :(得分:21)

现在问题已解决。提供者服务器使用引号发送徽章编号(作为JSON字符串,即“9”)。奇怪的是,APNs / iOS不会将其识别为整数。现在引号被删除并且有效:)

答案 2 :(得分:0)

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

$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错误。