1.//The notification itself contains the number to display in the badge.
- (void)application:(UIApplication )application didReceiveLocalNotification:(UILocalNotification )notif {
application.applicationIconBadgeNumber = notif.applicationIconBadgeNumber-1;
}
2.授权
iOS8更新之后,在设置applicationIconBadgeNumber时提示错误,原因是iOS8之后设置应用程序的applicationIconBadgeNumber需要用户授权
授权方式如下:
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge categories:nil];[[UIApplication sharedApplication] registerUserNotificationSettings:settings]
不过在获取授权之前要先判断是否iOS8以上版本,否则iOS8以下版本会出错。
3.获取角标的方法
[[[userInfo objectForKey:@”aps”] objectForKey:@”badge”] integerValue];
[[[[launchOptions objectForKey:@”UIApplicationLaunchOptionsRemoteNotificationKey”] objectForKey:@”aps”] objectForKey:@”badge”] integerValue];
4.思路
不是在本地客户端实现applicationIconBadgeNumber值的递增,当服务提供商发送一条消息来,客户端程序如果是在后台或者已经关闭,服务器端在没有得到客户端反馈时会将Badge加一,本地只是被动地显示徽章。
分两种情况
一:客户端应用处于active状态时,每次来了remote notification时,我们在程序里面直接置零:app.applicationIconBadgeNumber = 0;然后发送消息到服务器:“我已经收到了,请将badge设置为零吧” ,如果这个时候我们马上退出程序,服务器又来消息了,这个时候它发送的badge为1。客户端此时也就显示为1。
二:客户端处于关闭或后台,每次来了remote notification时,客户端程序没有办法处理消息的计数,也就不能在程序里面进行app.applicationIconBadgeNumber的赋值,也不能对服务器说“我收到了”。而服务器端没有收到客户端的反馈,所以它在第二次给你发通知时就检查badge的值,然后badge累加为二,再将消息发送过来,后客户端这边也就看到的是累加的效果。等到累加到几次了,用户打开客户端程序,这个时候也要告诉服务器:“我已经收到了,请将badge设置为零吧” 。那么服务器下一次也就又从1开始给你发badge的值。
转自:
xiaohui1224@126.com QQ: 278106366
http://stackoverflow.com/questions/1942605/push-notification-badge-auto-increment
注意:再注册通知的时候:registerForRemoteNotificationTypes: 一定要用多线程哈,这个太耗网络资源了,而且直接用的话对程序的影响可以说是毁灭性的。