My application has a notification section in it, and the sum of the notifications are displayed in the form of Badge Count on the app icon. When the user accesses the notifi
Run freshInstallationCheck function in didFinishLaunchingWithOptions section.
func freshInstallationCheck() {
let defaults = UserDefaults.standard
guard let currentAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String else { return }
guard let previousVersion = defaults.string(forKey: "appVersion") else {
// Key does not exist in UserDefaults, must be a fresh install
print("fresh install")
// Writing version to UserDefaults for the first time
defaults.set(currentAppVersion, forKey: "appVersion")
// reinstall application, force to set icon to zero
UIApplication.shared.applicationIconBadgeNumber = 0
return
}
let comparisonResult = currentAppVersion.compare(previousVersion, options: .numeric, range: nil, locale: nil)
switch comparisonResult {
case .orderedSame:
// nothing to do
break
case .orderedAscending, .orderedDescending:
// new version update or downgrade
break
}
// Updating new version to UserDefaults
defaults.set(currentAppVersion, forKey: "appVersion")
}
I have same issue before some days ago when I was tested app from testFlight.
Generally this problem might be occur when you deleted the app (while it was showing some badge number), and re-installed it again. But it difficult to says that where is actual problem.
Read what Apple's official documentation is saying.
Resetting the Push Notifications Permissions Alert on iOS The first time a push-enabled app registers for push notifications, iOS asks the user if they wish to receive notifications for that app. Once the user has responded to this alert it is not presented again unless the device is restored or the app has been uninstalled for at least a day.
If you want to simulate a first-time run of your app, you can leave the app uninstalled for a day. You can achieve the latter without actually waiting a day by setting the system clock forward a day or more, turning the device off completely, then turning the device back on.
There are some suggestion from my experience:
Not sure but might be this will working for you. :)
The badge count is maintained by the operating system, independent of the app. When an app is uninstalled (deleted), some values are retained by the operating system, including the badge count. When the app is uninstalled, no developer method or script is called. You will either have to accept this limitation, or change your app's design to rethink and overcome this problem.
Execute below code in didFinishLaunchingWithOptions
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"is_first_time"])
{
[application cancelAllLocalNotifications];
// Restart the Local Notifications list
application.applicationIconBadgeNumber = 0;
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:@"is_first_time"]; }