跳轉至

高级

创建通知组

您可以在通知中心以组的形式显示通知。对应于同一事件的通知可以被分组并以折叠的形式显示。折叠的通知组可以由用户再次展开,单个通知(每个属于该组的通知)可以单独执行。

通过将组键更改为启用并在控制台 > 通知 > 推送 v4 > 注册推送活动 > 活动注册 > 选项 > 组键中添加键值,可以创建通知组。在控制台中创建组后,您可以在发送本地推送和远程推送通知时使用groupId应用通知组。当组被应用时,通知将按组折叠显示,如下所示。

安卓
iOS
</tbody>

iOS 媒体通知

通过利用苹果的 UserNotifications 框架,您可以将媒体文件如图像和视频添加到通知中。

JPG(图片)
GIF(图片)
MP4(视频)

操作过程

此功能使用 iOS 中的 通知服务扩展(以下简称扩展)进行操作。通知服务扩展是一种应用扩展,允许您在远程通知发送给用户之前修改有效负载,从而在不切换上下文的情况下使用其他应用的进程(UI 或功能)。有关更多详细信息,请参阅 更多

  • 申请扩展后发送远程通知的过程

文件大小和类型限制

在附加媒体文件时有大小限制,详细信息可以在UNNotificationAttachment中找到。

Warning

我们发现,当使用AVAudioSession的应用程序运行时,例如Youtube和各种移动游戏(例如,召唤师战争,成为明星,链式打击),通过推送通知发送接收到的音频可能会导致主屏幕(Springboard)重启。此问题发生在所有iOS版本或设备类型中,并且已确认在Apple系统内部发生冲突,与Hive无关。

2018年12月20日,我们向Apple询问了此问题,在准备好回复之前,请停止使用使用媒体推送的音频传输功能

类别 类型 大小限制
音频 WAV, MP3, MP4(音频) 5MB
图片 JPG, JPEG, PNG, GIF 10MB
视频 MP4, AVI 50MB
  • 如果由于网络条件差而发生超时,用户将收到没有媒体的常规通知。
  • 在非常慢的网络上,下载可能需要长达 10 分钟,因此有必要考虑该地区的网络条件,并使用适当大小的媒体。

实施和利用

要下载媒体并重建通知对象以便交付给用户,需要一些设置和额外的源代码。

Note

通知服务扩展不能作为库或框架的一部分进行包含和分发,因此要使用该扩展,您必须根据Hive提供的指南进行设置。

添加扩展

要使用此功能,您需要向您的项目添加一个通知服务扩展,您应该通过向项目添加新目标来完成此操作,而不是直接添加或覆盖类。

当您向项目添加目标时,会自动创建一个模板。

1. 点击项目设置中的目标添加按钮(底部的红色方块) noti_adv_1_plus-button

选择通知服务扩展并点击下一步
(自 Xcode 8 起,可以将通知服务扩展添加为项目中的目标) noti_adv_1_plus-button

3. 输入产品名称 noti_adv_1_plus-button

4. 当弹出窗口出现时,点击激活
扩展将自动包含(嵌入)在当前项目中,并将添加构建方案。 noti_adv_1_plus-button

5. 检查扩展是否已在常规选项卡中添加到项目 noti_adv_1_plus-button

6. 一个名为 NotificationService 的模板类已添加到项目中 noti_adv_1_plus-button

添加 HIVEExtensions.framework

您可以轻松地使用Hive提供的**HIVEExtensions.framework**下载媒体。

添加 HIVEExtensions.framework 的方法如下。

  1. Hive SDK 支持 CocoaPods。如果项目路径中没有 Podfile,请运行 pod init。 noti_adv_7-2_pod-init-terminal

    如果您有一个 Podfile,请打开该文件并编写目标 'NotificationServiceExtension (示例目标名称)' do-end 语句。 noti_adv_7-2_pod-init-terminal

  2. 请参考截图来编写 pod 语法。 noti_adv_7-2_pod-init-terminal

  3. 关闭 Podfile 并在项目目录中运行 pod install。 noti_adv_7-2_pod-init-terminal

  4. 当你打开 NotificationSample (示例项目名称).xcworkspace 时,你会看到 Pods 项目已添加,如下所示。你现在可以在 NotificationSample 和 NotificationServiceExtension 目标中导入 HIVEExtensions。 noti_adv_7-2_pod-init-terminal

应用框架

在NotificationService.m文件中导入框架,如示例所示。 实现模板中提供的方法,以调用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域进行通信,则需要设置App Transport Security (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值。
noti_adv_7-2_pod-init-terminal