增量后清除推送通知徽章
Posted
技术标签:
【中文标题】增量后清除推送通知徽章【英文标题】:Clear push notification badge after increment 【发布时间】:2012-11-25 06:56:01 【问题描述】:我正在处理 iphone 中的推送通知。当我收到推送通知时,它在我的应用程序图标上显示 1,下一次是 2、3、4。如果我打开应用程序它的 0。下次它应该是 1、2、3、4 ......但它显示最后一个数字和 +1。我想在打开应用程序后重置推送通知徽章。我从城市飞艇发送+1。
它对我不起作用。
[[UIApplication sharedApplication] cancelAllLocalNotifications];
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
【问题讨论】:
您正在本地清除徽章编号。您还需要从 Urban Airship 服务器中清除它。我不知道城市飞艇。但我确信它有一个 API 可以在服务器上重置通知徽章。 我正在发送徽章编号 +1 以在我的 api 中增加。 【参考方案1】:我在我的应用程序中使用此代码是因为 Urban Airship (UA) 文档说
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
[[UAPush shared] resetBadge];
但它不起作用,应用图标上的徽章不断增加。我在UA的论坛上看到了一些关于这个问题的帖子,但他们没有给出明确的答案。
编辑#1:
我收到了来自 UA 支持技术人员的以下回复,其中包含以下建议,效果很好:
您想要做的是确保在您的 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中,您正在调用以下内容:
[[UAPush shared] setAutobadgeEnabled:YES];
[[UAPush shared] resetBadge];//zero badge on startup
也可以在以下方法中调用[[UAPush shared] resetBadge];:
applicationDidBecomeActive:(UIApplication *)application
和
didReceiveRemoteNotification:(NSDictionary *)userInfo
技术人员还提到给 applicationIconBadgeNumber 赋值 0 不是必须的,所以我把它拿出来了。仍然很漂亮。
编辑 #2:
我最终不得不修改 application:didReceiveRemoteNotification: 以包含对 UA 的 handleNotification:applicationState: 方法的调用:
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
// Get application state for ios4.x+ devices, otherwise assume active
UIApplicationState appState = UIApplicationStateActive;
if ([application respondsToSelector:@selector(applicationState)])
appState = application.applicationState;
[[UAPush shared] handleNotification:userInfo applicationState:appState];
[[UAPush shared] resetBadge];
因为我遇到了以下场景的问题:
-
用户在应用中
收到推送通知
返回主屏幕时,应用图标上未显示任何标记(如预期的那样)
收到另一个推送通知
徽章显示的数字大于 1
通过上面的修改,处理了这个场景。我想你必须告诉 UA,当收到通知并且应用程序在前台运行时,通知就会被处理。
【讨论】:
我也有同样的问题。我尝试了你的建议,但它对我不起作用。你能帮我修一下吗?请在这里看看我的问题:***.com/questions/20073212/… 我不确定我可以添加哪些其他信息。您在上面看到的代码对我有用。【参考方案2】:我用过Urban Airship,之前也遇到过这个问题。您没有显示代码,但我假设收到通知时,您正在将应用程序徽章编号设置为城市飞艇传递给您的编号,不要那样做。只要让应用程序自己处理这个,当远程通知进来时,让它自己自动递增。如果不是这种情况,则可能是在城市飞艇方面,您正在设置一个徽章编号以随推送发送。不要在推送通知中发送徽章编号,留下那部分,iOS 应该从当前徽章编号自动增加您的徽章。
【讨论】:
以上是关于增量后清除推送通知徽章的主要内容,如果未能解决你的问题,请参考以下文章