跳转至

高级

创建通知组

您可以将通知中心显示的通知进行分组。来自同一事件的通知可以被分组并折叠。折叠的通知组可以由用户再次展开,并且可以单独访问通知组的每个成员。

通知组可以在 the Hive 控制台 > 通知 > 注册 推送 活动 > 活动 注册 > 选项 > 密钥中创建。将组密钥更改为使用并添加组密钥值。在 Hive 控制台中创建组后,您可以在发送 本地推送 或远程推送时使用 groupId 应用通知组。如果应用了通知组,通知将按组显示并折叠,如下所示。

Android
iOS

iOS 10 高级通知

随着苹果在iOS 10中添加了UserNotifications.framework,您可以在通知中附加图像或视频剪辑。

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

系统要求

  • 它需要 Xcode 8.0 和可用的 MacOS 版本,以及能够安装 iOS 10 的设备。
  • 在低版本的 OS 中,即使应用了扩展,仍然会收到相同的通知。

  • iOS 10 支持的设备

Note

iOS 10.1及更低版本可能会由于操作系统缺陷而在运行扩展时遇到问题。如果是这样,请将扩展的部署目标设置为10.2,并为10.1及更低版本的操作系统实现以接收一般通知类型。

运行过程

此功能通过利用 通知服务扩展 ("扩展") 的 iOS 运行。

通知服务扩展是应用扩展之一,允许您在远程通知发送给用户之前修改有效负载。这是一种技术,可以在不改变上下文的情况下使用其他应用程序(UI或功能)的过程。

有关更多信息,请参见 更多

  • 远程通知应用扩展的传输过程

文件容量和类型限制

容量限制用于附加媒体文件。有关更多信息,请参见 UNNotificationAttachment.

Warning

如果用户在使用AVAudioSession运行Youtube或各种类型的手机游戏(例如,召唤师战争、龙之怒吼、链式打击)时传输推送服务发送的音频,将会发生主屏幕(Springboard)重启。无论iOS版本、设备类型和Hive SDK如何,显示出Apple的内部系统崩溃。
2018年12月20日已向Apple请求此错误,因此请确保停止通过媒体通知使用音频传输功能

类型 格式 容量
音频 WAV, MP3, MP4(音频) 5MB
图片 JPG, JPEG, PNG, GIF 10MB
视频 MP4, AVI 50MB
  • 如果由于网络问题发生超时,用户将收到没有媒体的常规通知。
  • 在低速网络上,下载可能需要长达10分钟,因此请确保根据当地网络条件使用合理容量的媒体。

实现

下载媒体、重新配置通知对象并将其传递给用户需要一些设置和源代码的添加。

Note

通知服务扩展不能包含在库或框架中。因此,您必须根据 Hive SDK 提供的指南进行设置以使用扩展。

添加扩展

要使用此功能,您需要将通知服务扩展添加到您的项目中,并向项目添加一个新目标,而无需手动添加或覆盖该类。

当您向项目添加目标时,系统会自动生成一个模板。

1. 在项目设置中,点击加号按钮(下面的红色方块)以添加目标。

2. 选择通知服务扩展,然后点击下一步
(通知服务扩展可以作为目标添加到使用Xcode 8及更高版本的项目中)

3. 输入 产品名称.

4. 当页面弹出如下时,点击 激活 按钮。
扩展将自动嵌入当前项目,并将添加构建方案。

5. 确认在常规选项卡上添加的扩展

6. 一个名为NotificationService的新模板类已添加到项目中。

7. 将添加的扩展部署目标设置为10.2及更高版本。

添加Hiveextensions框架

HIVEExtension.framework,由Hive SDK提供,便于下载媒体。
要添加HIVEExtensionFramework:

1. 手动添加框架。

  • 在项目中添加 HIVEExtension.framework。

  • 当页面弹出如下时,请检查已添加扩展的目标,然后点击 完成 按钮。

2. 配置框架搜索路径。

将 HIVEExtension.framework 的保存路径添加到 Xcodeproj > 选择生成的扩展目标 > 构建设置 > 框架搜索路径

3. 配置框架状态。

对于支持 iOS 10.2 及更低版本的游戏,将 HIVEExtensions.framework 设置为可选。

  • Xcodeproj > 选择生成的扩展目标 > 常规 > 链接的框架和库

应用框架

将框架导入到 NotificationService.m,如以下示例代码所示。

实现从模板中的方法调用HIVEExtensions.framework提供的方法,然后删除方法中的初始模板代码

#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。

设备容量

通过推送服务传递的媒体存储在用户设备中,并通过推送通知进行展示。接收到的媒体存储在内部缓存内存中,并占用用户设备的内部容量。

当用户设备的内部存储容量不足时,OS会从缓存数据空间删除一些数据。

使用用户的移动数据

媒体下载会使用用户的移动数据。媒体通过推送通知发送,下载将在未经用户同意的情况下进行,因此可能会产生下载的数据使用费用。

当用户通过推送服务接收音频或视频文件时,在下载之前检查每个用户的网络连接状态。如果用户没有启用Wi-Fi,则暴露没有媒体的推送以防止下载。

通过推送通知传递的媒体类型会根据媒体URL末尾指定的扩展名进行检查,仅暴露[文件容量和类型限制]项目中指定的扩展名。

转移的 URL Wi-Fi LTE/3G
http://xxx/notimovie.mp4 下载后始终在推送通知中显示媒体 由于视频文件的扩展名已指定(.mp4),因此在推送通知中显示媒体而无需下载
http://xxx/notimovie 下载后始终在推送通知中显示媒体 由于它不是音频或媒体文件,因此在下载后在推送通知中显示媒体
http://xxx/notisound.wav 下载后始终在推送通知中显示媒体 由于音频文件的扩展名已指定(.wav),因此在推送通知中显示媒体而无需下载
http://xxx/notiimage.jpg 下载后始终在推送通知中显示媒体 由于它不是音频或媒体文件,因此在下载后在推送通知中显示媒体

应用传输安全设置

一般来说,苹果的政策是允许所有应用中的服务器通信使用 https。该政策影响通过通知接收的 URL。如果您想使用 http,则需要设置 应用传输安全 ("ATS") 例外。 在扩展中配置 ATS 例外,以便在接收的 URL 中通过推送通知使用 http,即使应用程序已经处理了 ATS 例外。

如何排除 bitcode 错误

如果在添加的扩展的设置中激活了位码,则可能会出现如下错误。当错误发生时,set Xcodeproj > Select the generated Extension Target > Build Settings > Enable Bitcode 设置为 No

在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中会发生错误,导致上述错误日志。在这种情况下,请检查生成的Extension Target的架构是否包含armv7arm64的值。