Rich Notification是什么、多媒体内容与创建通知

作者: IT Sectr 发布日期: 2026-03-20 阅读时间: 8 分钟

Rich Notification是iOS推送通知的扩展格式,包含多媒体附件、交互式按钮和自定义界面,以改善用户体验。与标准文本通知不同,Rich Notification可以在横幅或锁屏上直接显示图片、视频和音频。根据Apple Developer Documentation, 2026UNNotificationAttachment支持在一条通知中最多包含10个文件,并自动缩放它们以在所有设备上优化显示。

要点

  • 多媒体附件 — Rich Notification通过UNNotificationAttachment支持图片(JPEG、PNG、GIF)、视频(MP4、MOV最长30秒)和音频(MP3、AAC、WAV)。
  • 交互性 — 按钮和文本输入通过UNNotificationAction和UNTextInputNotificationAction添加,绑定到通知类别。
  • Service Extension — 下载媒体的必需组件:它从payload中的URL下载附件并添加到内容中。
  • Content Extension — 创建完全自定义的通知界面,具有任意UI、动画和手势处理。
  • 限制 — 最大附件大小10 MB,扩展内存限制50 MB,处理时间最长30秒。

什么是Rich Notification

Rich Notification是一种iOS推送通知,不仅包含文本,还包含多媒体附件、交互式元素和自定义界面。术语“rich”(丰富)反映了在通知中包含图片、视频、音频、操作按钮和文本输入的能力,将简单的提醒转变为完整的交互式元素。

iOS中通知的演变

Apple在iOS 10中随UserNotifications框架引入了对Rich Notification的支持。在此之前,推送通知只能包含文本、声音和标记。iOS 10引入了UNNotificationServiceExtension和UNNotificationContentExtension,开启了修改内容和创建自定义界面的可能性。在后续版本中,添加了对Content Extension中SwiftUI的支持、动画GIF和改进的媒体缩放。

相比标准通知的优势

Rich Notification显著提高了用户参与度。Apple的研究表明,带图片的通知比纯文本通知获得30–40%更多的交互。产品图片、视频预览或快速回复按钮允许用户直接从通知中做出决定,而无需打开应用。这缩短了到达目标操作的路径,改善了用户体验。

多媒体附件类型及其格式

UNNotificationAttachment支持三类媒体:图片、视频和音频。每种类型在格式、大小和时长方面都有自己的限制。系统自动将图片缩放到通知大小,并将视频时长限制为30秒以优化性能。

媒体类型支持的格式最大大小
图片JPEG、PNG、GIF、TIFF每个文件10 MB
视频MPEG、MP4、MOV10 MB,最长30秒
音频MP3、AAC、WAV、CAF10 MB

图片和动画GIF

图片由系统自动裁剪和缩放,以便在通知的紧凑和扩展视图中显示。动画GIF从iOS 12开始支持,并在查看通知时自动播放。推荐图片大小为1024x1024像素,确保在所有设备上(包括大屏幕iPad)清晰显示。

视频和音频附件

Rich Notification中的视频默认静音播放—用户可以通过播放器中的按钮开启声音。最大视频时长为30秒,之后播放停止。音频附件可用于语音消息或声音预览,在扩展视图中点击通知时播放。

交互式按钮和操作

交互式操作允许用户直接从通知中执行操作,而无需打开应用。操作在应用启动时通过UNNotificationCategory和UNNotificationAction注册。每个操作可以是后台(不打开应用)或前台(打开应用以完成操作)。

UNNotificationAction和UNTextInputNotificationAction

UNNotificationAction是一个带有标题和可选修饰符的按钮,如requiresAuthentication(需要Face ID/Touch ID)或destructive(红色突出显示)。UNTextInputNotificationAction通过添加文本输入字段扩展了此功能—非常适合快速回复消息或评论。操作通过长按通知或向下滑动显示。

注册类别和操作

通知类别将内容类型与可用操作集关联起来。注册过程在应用启动时在AppDelegate中通过UNUserNotificationCenter.current().setNotificationCategories执行。类别在服务器上的JSON payload的category字段中指定,系统自动将相应的操作集应用于通知。

处理操作点击

当用户点击按钮或发送文本时,系统调用委托UNUserNotificationCenterDelegate的didReceive response方法。UNNotificationResponse包含操作标识符和输入的文本(对于UNTextInputNotificationAction)。基于这些信息,应用执行相应的业务逻辑:发送消息、确认操作或打开特定屏幕。

在Swift中实现Rich Notification

让我们看看创建Rich Notification的完整周期:从在AppDelegate中注册类别到在Service Extension中处理和显示。AppDelegate注册带有按钮的类别,服务器发送带有图片URL的通知,Service Extension下载媒体,Content Extension显示带有按钮的自定义界面。

swift
// AppDelegate — 注册分类和操作
func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions:
    [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {

    let replyAction = UNTextInputNotificationAction(
        identifier: "reply",
        title: "回复",
        options: [.authenticationRequired])

    let likeAction = UNNotificationAction(
        identifier: "like",
        title: "喜欢",
        options: [])

    let category = UNNotificationCategory(
        identifier: "social_post",
        actions: [replyAction, likeAction],
        intentIdentifiers: [],
        options: [])

    UNUserNotificationCenter.current()
        .setNotificationCategories([category])
    return true
}

用于下载图片的Service Extension

接收到带有类别“social_post”和自定义字段中图片URL的推送通知后,Service Extension被激活。扩展通过网络下载图片,创建具有唯一标识符的UNNotificationAttachment并将其添加到内容中。检查下载文件的大小很重要—如果超过10 MB,附件将无法创建,系统将显示没有媒体的通知。

swift
class NotificationService: UNNotificationServiceExtension {

    override func didReceive(
        _ request: UNNotificationRequest,
        withContentHandler contentHandler:
        @escaping (UNNotificationContent) -> Void
    ) {
        let content = (request.content.mutableCopy()
            as! UNMutableNotificationContent)
        guard let urlString = content.userInfo["media-url"]
            as? String,
            let url = URL(string: urlString)
        else { contentHandler(request.content); return }

        URLSession.shared.downloadTask(with: url) {
            location, _, _ in
            guard let location = location else {
                contentHandler(content); return }
            let attachment = try! UNNotificationAttachment(
                identifier: "media", url: location,
                options: [UNNotificationAttachmentOptionsTypeHintKey:
                    "jpg"])
            content.attachments = [attachment]
            contentHandler(content)
        }.resume()
    }
}

测试Rich Notification

要在没有服务器的情况下测试Rich Notification,请使用iOS模拟器并通过终端使用xcrun simctl push发送推送。在payload中必须指定mutable-content: 1以激活Service Extension,以及category以显示操作。该命令从JSON文件直接向选定的模拟器发送推送,无需设置服务器基础设施即可快速迭代。

Content Extension和自定义界面

UNNotificationContentExtension允许用任意UIKit或SwiftUI视图完全替换标准通知界面。扩展在用户展开通知时激活(force touch或向下滑动),可以包含按钮、滑块、动画和其他UI组件。界面大小通过Auto Layout适应内容。

Content Extension中的Storyboard和SwiftUI

Content Extension基于storyboard,使用继承自UIViewController的视图。SwiftUI View从iOS 16开始通过UIHostingController集成,允许使用现代方法来构建界面。为了向后兼容iOS 14–15,建议使用带有xib文件的UIKit。界面通过UNNotificationContent从Service Extension接收修改后的内容。

处理用户操作

Content Extension实现UNNotificationContentExtension协议,包含didReceive response方法。UNNotificationResponse包含有关按下的按钮或输入的文本的信息。扩展可以更新界面而不关闭通知,或调用completion handler来关闭它。这允许创建快速交互场景,例如在通知中直接带有视觉反馈的“点赞”。

设计建议

Apple建议Content Extension简洁且功能性强,避免多余元素。展开通知的最大高度约为400点,之后内容滚动。使用系统字体和间距以与其他通知保持一致性。在不同屏幕尺寸上测试,以确保界面在iPhone和iPad上都能正确显示。

常见问题解答

Rich Notification中图片的最大大小是多少?

一个多媒体附件的最大大小为10 MB。超出限制时,UNNotificationAttachment不会被创建,通知将无媒体显示。建议将图片优化到1–3 MB,以便在Service Extension中快速下载。

Rich Notification在所有iPhone型号上都能工作吗?

Rich Notification在所有运行iOS 10及以上的设备上支持,包括iPhone 5s及更新机型。带有自定义UI的Content Extension从iOS 12开始可用。Content Extension中的SwiftUI—从iOS 16开始。在较旧版本上,通知以标准形式显示。

可以在Rich Notification中使用GIF吗?

可以,动画GIF从iOS 12开始支持。GIF通过UNNotificationAttachment作为普通图片下载,并在查看通知时自动播放。GIF的大小与其他格式一样限制在10 MB。

一条通知可以添加多少个按钮?

注册类别时每条通知最多4个操作。如果更多,系统显示前4个,忽略其余。建议使用2–3个按钮以获得最佳用户体验—选项太多会使界面过载。

发送Rich Notification需要服务器吗?

是的,服务器需要通过APNS(Apple Push Notification service)发送推送,payload中包含自定义字段中的媒体文件URL和标志mutable-content: 1。服务器还指定category以激活Content Extension和操作。

总结

  • Rich Notification — 带有多媒体附件、交互式按钮和自定义UI的iOS推送通知,提高用户参与度。
  • 支持的媒体 — JPEG/PNG/GIF图片、MP4/MOV视频(最长30秒)、MP3/AAC/WAV音频,每文件限制10 MB。
  • Service Extension从payload中的URL下载媒体并将UNNotificationAttachment添加到通知内容。
  • 交互式操作 — 每个类别最多4个按钮,包括通过UNTextInputNotificationAction的文本输入。
  • Content Extension用带有任意元素的自定义UIKit/SwiftUI视图替换标准界面。
  • Content Extension实现UNNotificationContentExtension协议,包含didReceive方法用于处理点击和实时UI更新。
  • Rich Notification需要在所有层级进行配置:服务器(APNS)、Service Extension(媒体下载)和AppDelegate(类别注册)。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读