跳转到主要内容
徽章是出现在您的移动应用图标上的小数字点。它们有助于吸引用户注意力并可以影响参与行为。特别是在 iOS 上,徽章需要额外的设置并提供灵活的控制,如下所述。
对于 Android Web 推送通知,徽章是指显示在通知上的小图标——而不是应用图标——并且可以自定义。请参阅 Web 推送徽章

Android 徽章

Android 应用图标徽章行为可以通过 Android 通知类别 来管理。您可以控制某个类别(通道)是否显示徽章,并在每个类别的基础上设置徽章行为。

iOS 徽章

要确保徽章计数在 iOS 上正确递增,您必须配置:
  • OneSignalNotificationServiceExtension
  • 应用组(App Groups)
请参阅 移动 SDK 设置 获取完整说明。 默认情况下,OneSignal SDK 将:
  1. 在应用打开时清除应用图标徽章。
  2. 从通知中心移除通知。
如果您想保留通知并手动管理徽章逻辑(例如,使用您自己的计数器或在设备间同步状态),您可以禁用此自动行为。 手动徽章控制的常见用例
  • 在应用启动或恢复时重置徽章
  • 在前台接收通知时递增徽章
  • 在消息被阅读或关闭时递减
  • 通过应用组或您的后端在设备或应用扩展间同步徽章状态

禁用自动通知和徽章清除

在您的应用的 info.plist 中,添加键:OneSignal_disable_badge_clearing,布尔类型,值为 YES

关闭 `OneSignal_disable_badge_clearing`(设置为 `YES`)的示例 info.plist。

<key>OneSignal_disable_badge_clearing</key>
<true/>
这可以防止 SDK 在应用打开时自动移除通知或重置徽章。

iOS 原生徽章管理

如果您禁用 OneSignal 的自动徽章清除,您可以使用 Apple 的原生 API 来控制徽章行为。
Apple 在 iOS 17 中弃用了 UIApplication.shared.applicationIconBadgeNumber。您现在应该使用来自 UserNotifications 框架 的以下方法:
设置徽章计数 要将应用图标上的徽章设置为特定值:
Swift
import UserNotifications
import UIKit

if #available(iOS 17.0, *) {
  UNUserNotificationCenter.current().setBadgeCount(5) { error in
    if let error = error {
      print("Failed to set badge count: \(error.localizedDescription)")
    } else {
      print("Badge count updated successfully.")
    }
  }
} else {
  UIApplication.shared.applicationIconBadgeNumber = 5
}
获取当前徽章计数 iOS 不提供从系统检索当前徽章计数的方法。您必须在应用的状态中跟踪徽章计数(例如,使用 UserDefaults、应用的数据模型或与后端同步)。
Swift
// Example: Store and retrieve badge count using UserDefaults
let badgeCount = UserDefaults.standard.integer(forKey: "badgeCount")
// Update badge count as needed
UserDefaults.standard.set(badgeCount, forKey: "badgeCount")
递增或递减徽章 您必须手动管理徽章逻辑,因为载荷中不支持相对变化(如 +1 或 -1)。更新您存储的徽章计数然后设置它:
Swift
// Example: Increment badge count and update system badge
let currentCount = UserDefaults.standard.integer(forKey: "badgeCount")
let updatedCount = max(0, currentCount + 1)
UserDefaults.standard.set(updatedCount, forKey: "badgeCount")

if #available(iOS 17.0, *) {
  UNUserNotificationCenter.current().setBadgeCount(updatedCount)
} else {
  UIApplication.shared.applicationIconBadgeNumber = updatedCount
}
清除徽章 要完全移除徽章:
Swift

if #available(iOS 17.0, *) {
  UNUserNotificationCenter.current().setBadgeCount(0)
} else {
  UIApplication.shared.applicationIconBadgeNumber = 0
}

发送带有徽章的 iOS 推送

您可以在 OneSignal 控制面板中或使用 API 设置徽章计数。
  • 控制面板
  • API
  1. 转到 消息 > 推送模板
  2. 平台设置 > 发送到 Apple iOS > 徽章
  3. 选择任一选项:
    • 设置为特定数字
    • 按相对数量增加

在 OneSignal 控制面板消息表单中设置徽章。

发送 iOS 推送通知时,徽章计数将根据这些选项进行更改。 如果应用是打开的,除非您按照上述说明 禁用自动徽章清除,否则徽章计数将重置。
徽章教程完成! 下一步:

I