更新 iOS 图标徽章编号
Update iOS icon badge number
我有图标徽章编号更新要求。该应用程序跟踪任务。我希望该应用程序有一个徽章,显示每天到期的任务数。基本上有两种情况需要更新徽章号:
- 每天午夜。
- 如果添加新任务或删除任务。
我知道如何处理第二种情况。我可以在 applicationResignActive 函数中设置徽章编号。但是,午夜自动更新对我来说是个把戏。要更新徽章编号,我需要调用应用程序的一个函数来计算当天到期的任务。然而,在午夜,应用程序可能处于所有可能的情况:前台、后台而不是 运行。我怎样才能做到这一点?谢谢。
=====================================
为了更清楚地表达我的要求,我希望徽章号码每天正确更新,即使用户一整天或连续几天都没有打开应用程序。另外,我会尽量避免服务器端支持,因为到目前为止该应用程序是一个独立的应用程序。非常感谢您的帮助。
=====================================
最后更新:我接受了 Vitaliy 的回答。但是,他的回答要求应用程序每天至少打开一次。否则,事件不会触发,徽章编号也无法更新。
另外,就我而言,每次应用程序进入后台事件触发时,我都必须删除现有通知并安排一个新的通知,并重新计算最新的徽章编号。
我还是很想知道有什么方法可以处理app每天都打不开的情况,请问如何确保badge number是正确的。到目前为止,最简单的方法是设置一些服务器并让它定期向应用程序推送通知。
你可以用UILocalNotification
实现它:
- 当应用进入后台时,计算最近午夜的确切徽章计数
- 根据您计算出的徽章数量,安排在最近的午夜
UILocalNotification
- 您将在午夜收到通知,应用程序的徽章数量将更新
示例代码:
- (void)applicationDidEnterBackground:(UIApplication *)application {
// Calculate nearest midnight or any other date, which you need
NSDate *nearestMidnight = [self nearestMidnight];
// Create and setup local notification
UILocalNotification *notification = [UILocalNotification new];
notification.alertTitle = @"Some title";
notification.alertBody = @"Some message";
notification.fireDate = nearestMidnight;
// Optional set repeat interval, if user didn't launch the app after nearest midnight
notification.repeatInterval = NSCalendarUnitDay;
// Calculate badge count and set it to notification
notification.applicationIconBadgeNumber = [self calculateBadgeCountForDate:nearestMidnight];
[application scheduleLocalNotification:notification];
}
我有图标徽章编号更新要求。该应用程序跟踪任务。我希望该应用程序有一个徽章,显示每天到期的任务数。基本上有两种情况需要更新徽章号:
- 每天午夜。
- 如果添加新任务或删除任务。
我知道如何处理第二种情况。我可以在 applicationResignActive 函数中设置徽章编号。但是,午夜自动更新对我来说是个把戏。要更新徽章编号,我需要调用应用程序的一个函数来计算当天到期的任务。然而,在午夜,应用程序可能处于所有可能的情况:前台、后台而不是 运行。我怎样才能做到这一点?谢谢。
=====================================
为了更清楚地表达我的要求,我希望徽章号码每天正确更新,即使用户一整天或连续几天都没有打开应用程序。另外,我会尽量避免服务器端支持,因为到目前为止该应用程序是一个独立的应用程序。非常感谢您的帮助。
=====================================
最后更新:我接受了 Vitaliy 的回答。但是,他的回答要求应用程序每天至少打开一次。否则,事件不会触发,徽章编号也无法更新。
另外,就我而言,每次应用程序进入后台事件触发时,我都必须删除现有通知并安排一个新的通知,并重新计算最新的徽章编号。
我还是很想知道有什么方法可以处理app每天都打不开的情况,请问如何确保badge number是正确的。到目前为止,最简单的方法是设置一些服务器并让它定期向应用程序推送通知。
你可以用UILocalNotification
实现它:
- 当应用进入后台时,计算最近午夜的确切徽章计数
- 根据您计算出的徽章数量,安排在最近的午夜
UILocalNotification
- 您将在午夜收到通知,应用程序的徽章数量将更新
示例代码:
- (void)applicationDidEnterBackground:(UIApplication *)application {
// Calculate nearest midnight or any other date, which you need
NSDate *nearestMidnight = [self nearestMidnight];
// Create and setup local notification
UILocalNotification *notification = [UILocalNotification new];
notification.alertTitle = @"Some title";
notification.alertBody = @"Some message";
notification.fireDate = nearestMidnight;
// Optional set repeat interval, if user didn't launch the app after nearest midnight
notification.repeatInterval = NSCalendarUnitDay;
// Calculate badge count and set it to notification
notification.applicationIconBadgeNumber = [self calculateBadgeCountForDate:nearestMidnight];
[application scheduleLocalNotification:notification];
}