应用打开时更新徽章而不发出警报

Posted

技术标签:

【中文标题】应用打开时更新徽章而不发出警报【英文标题】:Update badge without alert when app is open 【发布时间】:2017-01-23 19:47:14 【问题描述】:

我正在尝试通过推送通知远程更新徽章值。 一切正常,但是当应用程序打开时,我收到一个空警报(包含我的应用程序名称和关闭按钮)。

我在苹果的文档中读到了silent notifications,但似乎即使在通知有效负载中指定了 content-available : 1 ,有效负载也不能包含徽章以使通知静音。

是否可以在不收到警报的情况下更新徽章?

【问题讨论】:

【参考方案1】:

如果您使用的是静默推送通知,则您不能在 aps 字典中包含 badge 键,因此您无法使用静默推送直接更新徽章。

可以aps 字典中包含自己的键和值,并且此字典可在didReceiveRemoteNotification:fetchCompletionHandler UIApplicationDelegate 函数中使用。

在此函数中,您可以从 aps 字典中提取您自己的“徽章”键,并使用它直接使用 UIApplication 属性 [applicationIconBadgeNumber][1] 更新徽章编号

UIApplication.shared.applicationIconBadgeNumber = someValue

类似:

 func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) 
    if let badgeNumberStr = userInfo["myBadge"] as? String 
        if let badgeNumber = Int(badgeNumberStr) 
            application.applicationIconBadgeNumber = badgeNumber
        
    

【讨论】:

是的,但我还希望徽章在执行服务器端操作时更新其值。 谢谢,我理解这个解决方案,并且最终会使用它。只是为了澄清默认的 ios 行为,如果在 aps 字典中设置了徽章值,则无论何时打开应用程序都会显示警报? 我认为当你的应用在前台时不应该显示任何东西;检查您的应用委托中是否有代码来显示本地通知 谢谢,您为我指明了正确的方向。我没有提到我使用 OneSignal 作为推送通知提供程序,而他们的 sdk 导致了不受欢迎的行为。感谢您的宝贵时间。

以上是关于应用打开时更新徽章而不发出警报的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iPhone 应用程序中更新应用程序徽章图标?

每天更新一次申请徽章

VBA:打开,编辑,保存...在 VBA 编辑器打开时工作,而不是在关闭时工作?

包含 C++ 项目的 TFS 2010 源代码控制下的 VS2010 解决方案在打开时会发出警告

小记: idea刚打开时疯狂报错

小记: idea刚打开时疯狂报错