ios - 应用程序关闭时本地通知不更新徽章编号

Posted

技术标签:

【中文标题】ios - 应用程序关闭时本地通知不更新徽章编号【英文标题】:ios - local notification not updating badge number when application is closed 【发布时间】:2013-12-26 07:07:49 【问题描述】:

我注意到,当在 ios 设备中接收到本地通知时,通知会出现在通知中心,但应用程序关闭时应用程序徽章编号不会更新。

我需要在通知中心点击通知才能将本地推送消息传输到应用程序。

这是正常行为吗?这可以通过使用远程推送通知来解决吗?

【问题讨论】:

你的应用是在封闭的还是在后台的?并且这也是取决于应用程序编号指示... “未更新”是什么意思?应用程序徽章编号未显示您的 localNotification.applicationIconBadgeNumber 的正确编号? @Mani 应用程序已关闭(不在后台)。 It is also app number indication depended:对不起,我不明白你的意思。 【参考方案1】:

您可以在UILocalNotification 对象中使用applicationIconBadgeNumber 参数。

基本上:

localNotificationObject.applicationIconBadgeNumber++;

示例:

UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.fireDate = [[NSDate date] dateByAddingTimeInterval:20];
localNotification.alertBody = @"Some Alert";

//the following line is important to set badge number
localNotification.applicationIconBadgeNumber++;

[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

但问题在于,徽章编号不会在后续(多个)本地通知中增加(这里有一个场景,但为简单起见,我们只说徽章保持不变1 甚至在 2 个或更多之后,背靠背,本地通知)。 在这种情况下,是的...推送通知似乎是要走的路 (但请注意,推送通知并不总是可靠的......检查:link

嗯...要使用推送通知进行正确的徽章编号更新,您应该知道您可以在推送通知的有效负载中发送徽章计数。 收到此推送通知后,iOS 会将徽章计数更改为推送通知中指定的徽章计数(& 应用程序不需要为此打开)。


示例(续):

applicationIconBadgeNumber 设置为0,因为它在某些情况下会有所帮助(可选

- (void)applicationWillResignActive:(UIApplication *)application 
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];


- (void)applicationWillTerminate:(UIApplication *)application 
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];


额外:

您也可以在终止/关闭或退出应用程序时手动设置徽章编号。 通常...在以下任何或所有方法中:

-applicationWillResignActive -applicationDidEnterBackground -applicationWillTerminate(应用关闭时设置badgeNumber

例子:

- (void)applicationWillResignActive:(UIApplication *)application 
    //Called when the application is about to move from active to inactive state.
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:[[[UIApplication sharedApplication] scheduledLocalNotifications] count]];
    //...


- (void)applicationWillTerminate:(UIApplication *)application 
    // Called when the application is about to terminate.
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:[[[UIApplication sharedApplication] scheduledLocalNotifications] count]];
    //...

【讨论】:

非常全面的答案。如果我在终止应用程序时执行代码,我的问题并没有解决。假设我今天上午 10 点关闭我的应用程序。我在下午 2 点和下午 6 点有一个本地推送。这意味着当我关闭我的应用程序时,我的徽章编号将在晚上 10 点为 2。我真正想要的是在下午 2 点有 1 个徽章,在下午 6 点有 2 个。 @Ketan : 这是关于 UILocalNotification 而不是推送通知...对吗? @Ketan :所以,基本上你希望本地通知徽章在它发生时出现/增加。所以...如果您设置将在 30 分钟后发生的本地通知,那么...您希望徽章仅在 30 分钟后出现/更改?在这种情况下,推送通知似乎是唯一的方法。看看这个问题:link @Ketan:对不起,我错了。我分开了一些错误的信息。我已经确定了我的答案。现在...徽章在本地通知的fireDate 上设置(即使应用程序关闭【参考方案2】:

iPhone:通过本地通知增加应用程序徽章

当您的应用处于后台时,无法使用本地通知动态更新徽章编号。所以你必须使用推送通知。您只能在应用程序在前台运行时增加徽章,并在此处寻找可以使用的替代解决方案

iPhone: Incrementing the application badge through a local notification

【讨论】:

以上是关于ios - 应用程序关闭时本地通知不更新徽章编号的主要内容,如果未能解决你的问题,请参考以下文章

应用程序在后台时未触发 iOS 本地通知

如何更新通知徽章编号?

如何在 IOS 推送通知中更新徽章编号?

本地通知触发时更改图标徽章编号

Swift 本地通知图标徽章编号不递增

IOS10本地通知使用UNUserNotification时如何设置徽章