苹果推送通知无法自动更改应用图标徽章

13

我看到我的iPhone(4S,iOS 5.1)的邮件应用程序会在新邮件到来时自动更新标记计数,即使应用程序没有运行。因此,我的应用程序也可以实现这种行为,对吗?

我的应用程序成功地注册了所有三种类型的推送通知-标记、警报和声音。 该应用程序的手机设置已经打开了所有3种类型的远程通知。

我的应用程序接收远程通知并显示警报,播放声音,但它不会更新标记数。 如果我通过警报上的“View”按钮启动应用程序,那么我的应用程序可以完美地读取标记值,并且我可以从代码中更改/删除/设置图标标记。

iOS为什么不能在通知到达时自动更改我的应用程序的图标标记?我看到所有类似的帖子都在讨论电话设置或注册的通知类型,或者检查负载JSON是否包含标记。

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

以下是我的代码块:

每次启动应用程序时都要注册APNs -

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

设备令牌几乎瞬间接收到。 令牌已发送到提供商,我正在接收通知。警报和声音工作正常。但是徽章在我手动启动应用程序并手动更改之前不会自动生效。请帮忙。


出于好奇,你在使用推送通知做什么? - Wug
1
将其设置为+1或您需要添加的通知数量。 - mkral
实际上,看起来这只能在urbanairship上工作。其他帖子说您需要在服务器端跟踪通知或将计数发送到服务器。 - mkral
@mkral,我会尝试,但苹果不建议使用+1。http://developer.apple.com/library/ios/#DOCUMENTATION/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html - zinnuree
如果我将徽章计数保留在服务器上,然后再通过APNs发送到应用程序中,这意味着相同的结果。徽章本身不会改变。我只能通过代码进行更新。但是,感谢您的回答。现在我需要学习一下... - zinnuree
显示剩余2条评论
3个回答

28
我也遇到了完全相同的问题,应用程序图标上的徽章图标没有显示出来。在验证手机应用程序显示徽章、声音、警报后,我尝试了许多小时去调整JSON文件(随意选择所有东西),但问题是我添加了UIRemoteNotificationTypeNewsstandContentAvailability作为应用程序要注册的警报类型之一。
因此,当混合使用UIRemoteNotificationTypeNewsstandContentAvailability时,它似乎会覆盖允许aps /徽章数字更新应用程序图标的功能。(可能正在寻找更新杂志信息)

4
谢谢! "newsstand" 也是我的问题所在。 - Perry
1
非常感谢!(我也疯了)。 - majorl3oat
非常感谢!我花了半天时间解决这个问题。 - PSsam
是的,完全相同的问题,这个解决了。非常感谢你。 - Andrew Gertig
谢谢!如果没有您的提示,我将会花费更多时间进行调查! - xardas
太棒了,帮了很多忙! - phyzalis

22

问题现在已经修复。服务提供者服务器发送的徽章号码带有引号 (作为 JSON 字符串,即 "9")。奇怪的是 APNs/iOS 没有将其识别为整数。现在已经去掉了引号,它可以正常工作 :)


0

我曾经遇到过类似的问题,通过在徽章编号中强制使用整数来解决它(使用 PHP 并从 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'
    );

顺便提一下,可以使用utf8_encode命令来避免之前我遇到的json_encode错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接