7.3 在通知中显示图片或视频(UNNotificationAttachment)

在iOS通知中显示富媒体内容可以显著提升用户体验。通过UNNotificationAttachment,我们可以为本地和远程通知添加图片、音频、视频等内容。

基本实现方法

1. 创建带附件的通知

func scheduleNotificationWithImage() {
   
   
    // 1. 创建通知内容
    let content = UNMutableNotificationContent()
    content.title = "图片通知"
    content.body = "这是一条带图片的推送通知"
    content.sound = UNNotificationSound.default
    
    // 2. 准备图片附件
    guard let imageURL = Bundle.main.url(forResource: "notification_image", withExtension: "jpg"),
          let attachment = try? UNNotificationAttachment(
              identifier: "imageAttachment",
              url: imageURL,
              options: nil
          ) else {
   
   
        print("无法创建图片附件")
        return
    }
    
    content.attachments = [attachment]
    
    // 3. 设置触发器(5秒后)
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
    
    // 4. 创建请求
    let request = UNNotificationRequest(
        identifier: "imageNotification",
        content: content,
        trigger: trigger
    )
    
    // 5. 添加到通知中心
    UNUserNotificationCenter.current().add(request) {
   
    error in
        if let error = error {
   
   
            print("添加图片通知失败: \(error.localizedDescription)")
        } else {
   
   
            print("图片通知已安排")
        }
    }
}

2. 支持的文件类型

iOS通知附件支持以下类型:

文件类型 扩展名 限制
图片 .jpg, .png, .gif 最大10MB
音频 .mp3, .aiff, .wav 最大5MB
视频 .mp4, .mov 最大50MB
其他 官方文档 需符合UTI规范

高级用法

1. 动态下载网络图片

func scheduleNotificationWithRemoteImage(imageURLString: String) {
   
   
    // 1. 下载图片
    guard let url = URL(string: imageURLString) else {
   
    return }
    
    URLSession.shared.downloadTask(with: url) {
   
    tempURL, response, error in
        guard let tempURL = tempURL, error == nil else {
   
   
            print("图片下载失败: \(error?.localizedDescription ?? "未知错误")")
            return
        }
        
        // 2. 保存到临时目录
        let fileManager = FileManager.default
        let filename = url.lastPathComponent
        let tempDirectory = URL(fileURLWithPath: NSTemporaryDirectory())
        let localURL = tempDirectory.appendingPathComponent(filename)
        
        do {
   
   
            // 移除已存在的文件
            if fileManager.fileExists(atPath: localURL.path) {
   
   
                try fileManager.removeItem(at
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值