高级
创建通知组¶
您可以在通知中心以组的形式显示通知。对应于同一事件的通知可以被分组并以折叠的形式显示。用户可以再次展开折叠的通知组,并且可以单独执行每个属于该组的个别通知。
通过将组键更改为启用并在控制台 > 通知 > 推送 v4 > 注册推送活动 > 活动注册 > 选项 > 组键中添加键值,可以创建通知组。在控制台中创建组后,您可以在发送本地推送和远程推送通知时使用groupId应用通知组。当组被应用时,通知将按组折叠显示,如下所示。
| | |
![]() | ![]() |
</tbody>
iOS 媒体通知¶
通过利用苹果的 UserNotifications 框架,您可以将媒体文件,如图像和视频,添加到通知中。
![]() | ![]() | ![]() |
操作过程¶
媒体通知功能使用 iOS 的 通知服务扩展(以下简称扩展)进行操作。
通知服务扩展是一种应用扩展,允许您在远程通知发送给用户之前修改有效负载,从而在不切换上下文的情况下使用其他应用的进程(UI或功能)。有关更多详细信息,请参阅 更多。
文件大小和类型限制¶
在附加媒体文件时有大小限制,详细信息可以在UNNotificationAttachment中找到。
Warning
我们发现,当 YouTube 或各类移动游戏(例如 서머너즈 워、별이되어라、체인스트라이크)等使用 AVAudioSession 的应用正在运行时,如果发送通过推送传递的音频,主屏幕(Springboard)会重启。该问题与 iOS 版本或设备类型无关,已确认是 Apple 系统内部发生冲突,与 Hive 平台无关。我们已于 2018 年 12 月 20 日向 Apple 方面咨询该现象,在其提供应对方案之前,请停止使用媒体推送的 音频传输功能。
| 类别 | 类型 | 大小限制 |
|---|---|---|
| 图片 | JPG, JPEG, PNG, GIF | 10MB |
| 视频 | MP4, AVI | 50MB |
- 如果由于网络条件差而发生超时,用户将收到没有媒体的常规通知。
- 在非常慢的网络上,下载可能需要长达10分钟,因此有必要考虑该地区的网络条件,并使用适当大小的媒体。
实施和利用¶
要下载媒体并重建通知对象以便交付给用户,需要一些设置和额外的源代码。
Note
Notification Service Extension 无法包含在库或框架中进行分发,因此要使用 Extension,必须基于 Hive 平台提供的指南进行配置。
添加扩展¶
要使用媒体通知功能,您需要向项目中添加一个通知服务扩展。不要直接添加或覆盖类,而是向项目添加一个新目标。
当您添加一个目标时,会自动创建一个模板。
在 Unity 项目中添加目标¶
Unity 编辑器中,Hive SDK 会通过 PostProcess 功能自动执行添加目标和编写 Info.plist 等一系列过程。只需勾选是否使用媒体推送,无需其他操作。
- 在 Unity 编辑器顶部菜单栏中进入 Hive > Build project post process settings > iOS 菜单
- 启用 Push Media Contents
在 Unity 以外的环境中添加目标¶
开始之前,请先确认以下事项。
- 要使用推送扩展目标,请确认配置文件中包含
aps-environment权限(entitlement)。如有需要,请重新签发配置文件和证书。 - 如果通过 Xcode GUI 手动添加了目标,扩展目标的最低支持目标版本默认值可能会被设置为最新 OS。请确认该值不超过主游戏应用目标的最低支持目标版本。
添加目标的方法如下。
- 在 Xcode 项目设置中点击 添加目标 按钮(左下角 + 按钮)

- 选择 Notification Service Extension 后,点击 Next
(从 Xcode 8 开始,可将 Notification Service Extension 作为目标添加到项目中)
- 输入 Product Name

- 出现如下弹窗时,点击 Activate
Extension 会自动包含(Embedded)到当前项目中,并添加用于构建的 Scheme
- 在 General 选项卡中,确认项目中已添加 Extension

- 确认项目中已添加 NotificationService 模板类

添加 HIVEExtensions.framework¶
您可以轻松地使用Hive提供的HIVEExtensions.framework下载媒体。
添加HIVEExtensions.framework*的方法如下:
如果您已经有一个 Podfile,请打开该文件并添加目标 'NotificationServiceExtension (示例目标名称)' do-end 语句。 
-
当你打开 NotificationSample (示例项目名称).xcworkspace 时,你会看到 Pods 项目已被添加,如下所示。现在你可以在 NotificationSample 和 NotificationServiceExtension 目标中导入 HIVEExtensions。

应用框架¶
在 NotificationService.swift 文件中导入框架,如示例所示。 实现模板中提供的方法,以调用 HIVEExtensions.framework 提供的方法,并删除方法内部的原始模板代码。
import HIVEExtensions
func didReceiveNotificationRequest(request: UNNotificationRequest, with contentHandler: (UNNotificationContent) -> Void) {
HIVENotificationService.didReceive(request) { content in
guard let content else { return }
contentHandler(content)
}
}
func serviceExtensionTimeWillExpire() {
HIVENotificationService.serviceExtensionTimeWillExpire()
}
#import <HIVEExtensions/HIVEExtensions.h>
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
[HIVENotificationService didReceiveNotificationRequest:request withContentHandler:contentHandler];
}
- (void)serviceExtensionTimeWillExpire {
[HIVENotificationService serviceExtensionTimeWillExpire];
}
申请注意事项¶
发送和接收时间的差异¶
在扩展中的所有任务完成后,通知将发送给用户,这可能导致发送时间和接收时间之间的差异,客户端将根据服务器发送的时间进行显示。
例如,如果在15:00发送通知,而下载在15:05完成,则通知将显示为在15:00到达。
设备容量¶
通过推送通知接收的媒体存储在用户的设备上,然后通过推送进行展示,接收到的媒体存储在设备的内部缓存数据空间中,占用用户设备的内部容量。如果用户设备的内部存储容量不足,操作系统会自动清除缓存数据空间。
用户的移动数据使用情况¶
通过推送通知接收到的媒体将使用用户的移动数据进行下载,下载将在未经用户同意的情况下进行,这可能会在下载过程中产生数据使用费用。
在通过推送交付音频/视频文件的情况下,在下载之前检查用户的网络连接状态。如果用户未连接到 Wi-Fi,请不要继续下载,而是显示没有媒体的推送通知。
此时,通过推送接收到的媒体类型由媒体 URL 末尾指定的扩展名确认,只有在 [文件大小和类型限制] 部分指定的扩展名才会正确显示。
| 接收的 URL | wifi | LTE / 3G |
| http://xxx/notimovie.mp4 | 媒体在下载后始终可见 | 由于它具有与视频文件(mp4)对应的扩展名,因此在没有媒体下载的情况下可见 |
| http://xxx/notimovie | 媒体在下载后始终可见 | 它不是音频/媒体文件,因此媒体在下载后可见 |
| http://xxx/notisound.wav | 媒体在下载后始终可见 | 由于它具有与音频文件(wav)对应的扩展名,因此在没有媒体下载的情况下可见 |
| http://xxx/notiimage.jpg | 媒体在下载后始终可见 | 它不是音频/媒体文件,因此媒体在下载后可见 |
应用传输安全设置¶
苹果的默认政策允许所有应用程序进行的服务器通信使用 https,并且通过通知接收的 URL 也受到此政策的影响。如果您想使用 Http 域进行通信,则需要设置应用程序传输安全性 (ATS) 例外。
即使应用程序具有 ATS 例外处理,您也必须在扩展中设置 ATS 例外,以便对通过推送通知传输的 URL 使用 http 域。
当媒体未在Unity中交付时¶
Hub connection error Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.NotificationServiceExtension" UserInfo={NSDebugDescription=connection to service named com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.NotificationServiceExtension}
在Unity中,可能会出现媒体未传送的情况,同时显示如上所示的错误日志。在这种情况下,请检查创建的扩展目标的架构中是否包含armv7和arm64值。

推送操作按钮¶
推送操作按钮是系统按钮,当您长按推送通知时会出现,如下所示。通过在推送通知中显示这些额外的按钮,您可以鼓励用户互动。
使用 Hive SDK,您可以通过简单的配置轻松实现推送操作按钮。
| 安卓 | iOS |
|---|---|
![]() | ![]() |
Note
Android SDK 中的推送操作按钮无需额外设置。有关使用操作按钮功能的详细信息,请参阅 单推送 API - ActionPayload 指南。对于 iOS SDK,您可以使用基本或高级实现方法来实现推送操作按钮。
Warning
在 iOS SDK 中将推送操作按钮与 iOS 媒体通知 一起使用时,媒体通知功能可能无法正常工作。发送推送时,每次只能使用一个功能——要么是“媒体 URL”,要么是“操作推送”。如果同时使用这两者,接收时只会显示媒体缩略图,长按时不会出现扩展查看器。
Warning
在 Unreal Engine 中使用 iOS 推送操作时,必须使用 Unreal Engine 5.3.2 起提供的 Modern Build 构建 iOS 应用(已在 Unreal Engine 5.6.0 / Xcode 16.1 / macOS 15.5 环境下测试完成)。
基本实现 (iOS)¶
Hive SDK 提供了一组基于常用模式的默认推送操作按钮,例如“确认”、“拒绝”等。这些内置按钮组合可以快速应用,您还可以根据需要定义和扩展自定义操作按钮集。默认的推送操作按钮集如下所示。
- 确认
- 关闭
- 确认,关闭
- 执行,取消
- 接受所有,关闭
- 立即索赔,关闭
- 购买,拒绝
- 出售,拒绝
- 接受,拒绝,保持
| 类别(类别标识符) | 按钮名称(操作标识符) |
|---|---|
| 确认(INFO_CATEGORY) | 确认(CONFIRM_ID) |
| 关闭(CLOSE_CATEGORY) | 关闭(CLOSE_ID) |
| 确认选择(CONFIRM_CATEGORY) | 确认(CONFIRM_ID), 关闭(CLOSE_ID) |
| 执行(EXECUTE_CATEGORY) | 执行(EXECUTE_ID), 取消(CANCEL_ID) |
| 批量接受(ACCEPT_ALL_CATEGORY) | 接受全部(ACCEPT_ALL_ID), 关闭(CLOSE_ID) |
| 立即索赔(ACCEPT_NOW_CATEGORY) | 立即索赔(ACCEPT_NOW_ID), 关闭(CLOSE_ID) |
| 购买决定(PURCHASE_CATEGORY) | 购买(PURCHASE_ID), 拒绝(DECLINE_ID) |
| 销售请求(SALE_CATEGORY) | 出售(SALE_ID), 拒绝(DECLINE_ID) |
| 决策(ACCEPT_DECISION_CATEGORY) | 接受(ACCEPT_ID), 拒绝(REJECT_ID), 保留(HOLDING_ID) |
不需要额外的代码来应用这些推送操作按钮集,但您必须向您的项目添加一个 Notification Content Extension 目标。请参阅下面的“推送操作按钮集应用指南”,以便在您的开发环境中添加目标并激活推送操作按钮。
在 Unity 中应用推送操作按钮集¶
Unity 编辑器中,Hive SDK 的 PostProcess 功能会自动执行添加目标和编写 Info.plist 等一系列过程。只需勾选是否使用推送操作按钮,无需其他操作。
- 在 Unity 编辑器顶部菜单栏中进入 Hive > Build project post process settings > iOS 菜单。
- 启用 Push Action Buttons。
按钮启用时显示的列表是下方 高级实现方法 中使用的 hive_push_actions.json 文件内 categories 字段列表的预览。若不使用该文件而按默认实现进行,则显示为 'none'。
在 Unity 以外的环境中应用推送操作按钮集¶
开始之前,请先确认以下事项。
- 要使用推送扩展目标,请确认配置文件中包含
aps-environment权限(entitlement)。如有需要,请重新签发配置文件和证书。 - 如果通过 Xcode GUI 手动添加了目标,扩展目标的最低支持目标版本默认值可能会被设置为最新 OS。请确认该值不超过主游戏应用目标的最低支持目标版本。
接下来,生成 Xcode 项目(.xcodeproj)后,请按以下顺序进行。
第 1 步. 添加推送扩展目标¶
按以下顺序新建扩展目标并连接到应用目标。
- 在 Xcode 项目设置中,点击左下角的 + 按钮添加目标。

- 选择 Notification Content Extension 后,点击 Next。

- 输入 Product Name,并在 Embed in Application 中分配主游戏应用目标。

- 出现如下弹窗时,点击 Activate。Extension 会自动包含(Embedded)到当前项目中,并添加用于构建的 Scheme。

- 在主游戏应用目标的 General > Frameworks, Libraries, and Embedded Content 中,确认已添加上一步输入的 Product Name。

第 2 步. 自定义自动生成文件¶
请对 Product Name 组中自动生成的以下 3 个文件分别执行下列操作。
删除 MainInterface.storyboard¶
删除 Product Name/MainInterface.storyboard。
修改 NotificationViewController.swift¶
修改 Product Name/NotificationViewController.swift。
按上图所示,将自动生成的模板类文件正文修改如下。可以复制并使用下面的代码块,或添加图片中橙色高亮的行。
import UIKit
import HIVEExtensions
import UserNotifications
import UserNotificationsUI
class NotificationViewController: UIViewController, UNNotificationContentExtension {
func didReceive(_ notification: UNNotification) {
HiveNotificationContent.didReceive(notification)
}
func didReceive(_ response: UNNotificationResponse) async -> UNNotificationContentExtensionResponseOption {
await HiveNotificationContent.didReceive(response)
}
}
修改 Info.plist¶
修改 Product Name/Info.plist。
按以下顺序,将下面的代码粘贴到最上层 Information Property List 行(根字典,图片中橙色高亮的行)下方。
- 展开最上层
Information Property List行,删除其下级项NSExtension。 - 折叠同一行后右键单击,选择 Paste(粘贴)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>UNNotificationExtensionInitialContentSizeRatio</key>
<integer>0</integer>
<key>UNNotificationExtensionCategory</key>
<array>
<string>INFO_CATEGORY</string>
<string>CLOSE_CATEGORY</string>
<string>CONFIRM_CATEGORY</string>
<string>EXECUTE_CATEGORY</string>
<string>ACCEPT_ALL_CATEGORY</string>
<string>ACCEPT_NOW_CATEGORY</string>
<string>PURCHASE_CATEGORY</string>
<string>SALE_CATEGORY</string>
<string>ACCEPT_DECISION_CATEGORY</string>
</array>
</dict>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_NAME).NotificationViewController</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.usernotifications.content-extension</string>
</dict>
</dict>
</plist>
第 3 步. 填写自定义类别¶
在上一步修改的 Info.plist 中,UNNotificationExtensionCategory 的值是前文介绍的 Hive SDK 预置类别。若按照下方 高级实现方法 在 hive_push_actions.json 中编写了自定义类别,请一并作为数组元素添加。
第 4 步. 添加依赖项¶
为推送扩展目标连接所需依赖项。如果在生成项目后已通过 CocoaPods 等方式添加,可跳过此步骤。
- 使用依赖管理工具添加
- 手动添加
- 在 Xcode GUI 中手动添加,或编写构建流水线脚本进行连接
- Unreal Engine 不支持单独的依赖管理工具,因此请使用此方法
- 在扩展目标设置的 General > Frameworks and Libraries 中添加
HIVEExtensions.framework
一旦您在开发环境中应用了设置的推送操作按钮,请在控制台发送推送时指定操作。
在指定操作时,请使用上面详细列表中的类别和操作标识符。
有关控制台设置的更多详细信息,请参阅控制台指南。
高级实现 (iOS)¶
在 hive_push_actions.json 文件中定义 actions 和 categories 的值。定义后,将 hive_push_actions.json 文件包含在您的目标中并构建应用程序。当应用程序运行时,Hive SDK 会自动解析该文件并在通知中心注册操作和类别。
下面显示了hive_push_actions.json文件的示例。
hive_push_actions.json 示例
{
"actions": {
"ACCEPT_ALL_ID": { ... },
"ACCEPT_ID": { ... },
"ACCEPT_NOW_ID": { ... },
"CANCEL_ID": { ... },
"CLOSE_ID": { ... },
"CONFIRM_ID": { ... },
"DECLINE_ID": { ... },
"EXECUTE_ID": { ... },
"HOLDING_ID": { ... },
"PURCHASE_ID": { ... },
"REJECT_ID": { ... },
"SALE_ID": { ... }
},
"categories": {
"INFO_CATEGORY": ["CONFIRM_ID"],
"CLOSE_CATEGORY": ["CLOSE_ID"],
"CONFIRM_CATEGORY": ["CONFIRM_ID", "CLOSE_ID"],
"EXECUTE_CATEGORY": ["EXECUTE_ID", "CANCEL_ID"],
"ACCEPT_ALL_CATEGORY": ["ACCEPT_ALL_ID", "CLOSE_ID"],
"ACCEPT_NOW_CATEGORY": ["ACCEPT_NOW_ID", "CLOSE_ID"],
"PURCHASE_CATEGORY": ["PURCHASE_ID", "DECLINE_ID"],
"SALE_CATEGORY": ["SALE_ID", "DECLINE_ID"]
}
}
写文件的注意事项:
- 每个类别(集合)最多可以有 3 个按钮。
- 上面的示例定义了默认按钮集合。对于自定义操作按钮,请勿使用重复的标识符;使用唯一且可区分的字符串。
- 多语言支持遵循 游戏语言,您可以输入最多 16 种由 Hive SDK 支持的语言。英语(
"en")是多语言字符串的默认值。
Note
Unity PostProcess 是支持的。如果您将 hive_push_actions.json 文件添加到 Unity 项目中与 hive_config.xml 相同的路径,它将在构建 Xcode 项目时自动添加到应用目标中。
Warning
写入文件后,将文件中“categories”字段的键添加到Notification Content Extension的Info.plist中的UNNotificationExtensionCategory。
在Unity中,这通过分析文件自动完成。
















