我的应用程序中有一个通知部分,通知的总和以徽标计数的形式显示在应用程序图标上。当用户访问通知时,徽章计数减少。 假设用户现在卸载构建并重新安装它,即使用户没有打开应用程序,徽章计数也会直接显示在应用程序图标上。显示的徽章计数与卸载应用程序时的徽章计数相同。一旦用户打开应用程序并访问通知部分,就应该显示徽章计数。
答案 0 :(得分:9)
几天前,当我从testFlight测试应用程序时,我遇到了同样的问题。
通常,当您删除应用(当它显示一些徽章编号)并再次重新安装时,可能会出现此问题。但很难说实际问题在哪里。
阅读Apple's official documentation is saying.
重置iOS上的推送通知权限警报第一个 时间推送启用的应用程序注册推送通知,iOS询问 用户是否希望收到该应用的通知。一旦用户 已响应此警报,除非是,否则不再显示 设备已恢复或应用程序已卸载至少一天。
如果您想模拟首次运行的应用,可以离开 该应用程序已卸载一天。没有你可以实现后者 实际上等一天通过设置系统时钟一天或 更多,完全关闭设备,然后关闭设备 上。
根据我的经验,有一些建议:
不确定,但可能会对你有用。 :)
答案 1 :(得分:8)
徽章计数由操作系统维护,与应用程序无关。卸载(删除)应用程序时,操作系统会保留一些值,包括徽章计数。卸载应用程序时,不会调用任何开发人员方法或脚本。您要么必须接受此限制,要么更改应用程序的设计以重新思考并克服此问题。
答案 2 :(得分:4)
在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"]; }
答案 3 :(得分:0)
在didFinishLaunchingWithOptions部分中运行freshInstallationCheck函数。
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")
}