iOS_ApplicationIconBadgeNumber

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: 一定要用多线程哈,这个太耗网络资源了,而且直接用的话对程序的影响可以说是毁灭性的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值