高级
创建通知组¶
您可以将通知中心显示的通知进行分组。来自同一事件的通知可以被分组并折叠。折叠的通知组可以由用户再次展开,并且可以单独访问通知组的每个成员。
通知组可以在 the Hive 控制台 > 通知 > 注册 推送 活动 > 活动 注册 > 选项 > 组 密钥中创建。将组密钥更改为使用并添加组密钥值。在 Hive 控制台中创建组后,您可以在发送 本地推送 或远程推送时使用 groupId
应用通知组。如果应用了通知组,通知将按组显示并折叠,如下所示。
| |
iOS 10 高级通知¶
随着苹果在iOS 10中添加了UserNotifications.framework,您可以在通知中附加图像或视频剪辑。
系统要求¶
Note
iOS 10.1及更低版本可能会由于操作系统缺陷而在运行扩展时遇到问题。如果是这样,请将扩展的部署目标设置为10.2,并为10.1及更低版本的操作系统实现以接收一般通知类型。
运行过程¶
此功能通过利用 通知服务扩展 ("扩展") 的 iOS 运行。
通知服务扩展是应用扩展之一,允许您在远程通知发送给用户之前修改有效负载。这是一种技术,可以在不改变上下文的情况下使用其他应用程序(UI或功能)的过程。
有关更多信息,请参见 更多。
文件容量和类型限制¶
容量限制用于附加媒体文件。有关更多信息,请参见 UNNotificationAttachment.
Warning
如果用户在使用AVAudioSession运行Youtube或各种类型的手机游戏(例如,召唤师战争、龙之怒吼、链式打击)时传输推送服务发送的音频,将会发生主屏幕(Springboard)重启。无论iOS版本、设备类型和Hive SDK如何,显示出Apple的内部系统崩溃。
2018年12月20日已向Apple请求此错误,因此请确保停止通过媒体通知使用音频传输功能。
类型 | 格式 | 容量 |
---|---|---|
图片 | JPG, JPEG, PNG, GIF | 10MB |
视频 | MP4, AVI | 50MB |
- 如果由于网络问题发生超时,用户将收到没有媒体的常规通知。
- 在低速网络上,下载可能需要长达10分钟,因此请确保根据当地网络条件使用合理容量的媒体。
实现¶
下载媒体、重新配置通知对象并将其传递给用户需要一些设置和源代码的添加。
Note
通知服务扩展不能包含在库或框架中。因此,您必须根据 Hive SDK 提供的指南进行设置以使用扩展。
添加扩展¶
要使用此功能,您需要将通知服务扩展添加到您的项目中,并向项目添加一个新目标,而无需手动添加或覆盖该类。
当您向项目添加目标时,系统会自动生成一个模板。
1. 在项目设置中,点击加号按钮(下面的红色方块)以添加目标。
2. 选择通知服务扩展,然后点击下一步。
(通知服务扩展可以作为目标添加到使用Xcode 8及更高版本的项目中)
4. 当页面弹出如下时,点击 激活 按钮。
扩展将自动嵌入当前项目,并将添加构建方案。
6. 一个名为NotificationService的新模板类已添加到项目中。
添加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的架构是否包含armv7和arm64的值。