带有 UIImage 或远程 URL 的 UNNotificationAttachment

2023-12-23

In my Notification Service Extension我正在从 URL 下载图像以显示为UNNotificationAttachment在通知中。

因此,我将此图像作为 UIImage,并且不需要将其写入光盘上的应用程序目录/组容器中以设置通知。

有没有好的方法创建一个UNNotificationAttachment与 UIImage ?(应该适用于本地和远程通知)


  1. 在tmp文件夹中创建目录
  2. 写下NSData的代表UIImage进入新创建的目录
  3. 使用 tmp 文件夹中文件的 url 创建 UNNotificationAttachment
  4. 清理tmp文件夹

我写了一个扩展UINotificationAttachment

extension UNNotificationAttachment {

    static func create(identifier: String, image: UIImage, options: [NSObject : AnyObject]?) -> UNNotificationAttachment? {
        let fileManager = FileManager.default
        let tmpSubFolderName = ProcessInfo.processInfo.globallyUniqueString
        let tmpSubFolderURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(tmpSubFolderName, isDirectory: true)
        do {
            try fileManager.createDirectory(at: tmpSubFolderURL, withIntermediateDirectories: true, attributes: nil)
            let imageFileIdentifier = identifier+".png"
            let fileURL = tmpSubFolderURL.appendingPathComponent(imageFileIdentifier)
            let imageData = UIImage.pngData(image)
            try imageData()?.write(to: fileURL)
            let imageAttachment = try UNNotificationAttachment.init(identifier: imageFileIdentifier, url: fileURL, options: options)
            return imageAttachment
        } catch {
            print("error " + error.localizedDescription)
        }
        return nil
    }
}

所以要创建UNUserNotificationRequest with UNUserNotificationAttachment from a UIImage你可以简单地这样做

let identifier = ProcessInfo.processInfo.globallyUniqueString
let content = UNMutableNotificationContent()
content.title = "Hello"
content.body = "World"
if let attachment = UNNotificationAttachment.create(identifier: identifier, image: myImage, options: nil) {
    // where myImage is any UIImage
    content.attachments = [attachment] 
}
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 120.0, repeats: false)
let request = UNNotificationRequest.init(identifier: identifier, content: content, trigger: trigger)
UNUserNotificationCenter.current().add(request) { (error) in
    // handle error
}

这应该有效,因为UNNotificationAttachment会将图像文件复制到自己的位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 UIImage 或远程 URL 的 UNNotificationAttachment 的相关文章

随机推荐

  • Google Drive InputStreamContent 需要设置长度

    将文件上传到 Google Drive 的示例通常使用 FileContent 类 这很容易理解并且可以按预期工作 在我当前的情况下 我只公开了一个 InputStream 因为输入不一定来自文件 我尝试使用 InputStreamCont
  • 等待所有任务完成

    我有一系列不同的 任务 需要使用相同的线程池来完成 我想测量执行每个任务所需的时间 但为此我需要等待 任务 中的每个任务 抱歉含糊不清 完成 当只有一项任务时 我通常会这样做 ExecutorService e Executors newC
  • 如何在 Blazor 服务器应用程序中停止事件传播

    我在用着网格 Blazor https github com gustavnavar Grid Blazor blob master docs blazor server Render button checkbox etc in a gr
  • urllib2.HTTPError:HTTP 错误 403:禁止

    我正在尝试使用 python 自动下载历史股票数据 我尝试打开的 URL 以 CSV 文件响应 但我无法使用 urllib2 打开 我曾尝试按照之前几个问题中指定的方式更改用户代理 我什至尝试接受响应 cookie 但没有成功 你能帮忙吗
  • Nuxt.js Hackernews API 更新帖子,每分钟无需加载页面

    我有一个 nuxt js 项目 https github com AzizxonZufarov newsnuxt2 https github com AzizxonZufarov newsnuxt2我需要每分钟更新 API 的帖子而不加载页
  • pandaboard 上静态链接的 OpenCV 编译问题

    我使用 BUILD SHARED LIBS 0 选项在 pandaboard 上安装了带有静态链接的 opencv 我使用的是ubuntu 11 10 我还构建了第 3 方库 png jpeg jasper 和 zlib cmake 选项
  • `std::make_pair` 中的 c++11 右值引用

    对于 C 98 template
  • SolrJ 线程安全

    我在 Web 应用程序中使用 CommonsHttpSolrServer 在多个请求中重用 CommonsHttpSolrServer 是否安全 还是应该为每个请求实例化一个新对象 无法在 API 文档中找到答案 根据文档 http wik
  • 从用户输入中读取整数

    我正在寻找的是如何读取用户从命令行 控制台项目 给出的整数 我主要了解 C 并开始走 C 道路 我知道 Console ReadLine 只需要一个字符 字符串 简而言之 我正在寻找它的整数版本 只是为了让您了解我正在做什么 Console
  • Google Calendar API 阻止 Django 启动

    我有一个 Django 1 9 1 项目 它工作得很好 直到我添加了提供的代码Google 日历 API 文档 https developers google com google apps calendar quickstart pyth
  • C++ 中未评估的上下文是什么?

    我经常想到的一个例子是 sizeof表达式 它不计算表达式 而是通过静态类型确定大小 例如 int func sizeof func 这是我的思维极限 所以如果还有其他未评估的上下文 那么它们是什么呢 幸运的是 该标准有一个方便的列表 5
  • 在 ASP.Net 中为不同的会话变量设置不同的超时

    是否可以为 ASP Net 中的不同会话设置不同的超时 Edited我的意思是 在同一页面中我有 2 个会话变量 Session ss1 和 Session ss2 是否可以为每个会话设置超时 或者是否有做同样的事情 比如将会话保存到 co
  • 将int所有字节设置为(unsigned char)0,保证代表零?

    This is not a matter of recommended practise nor undefined behavior but about what the c standard actually guarantees in
  • 如何添加一个范围内的数字

    嘿 所以我想做一个挑战 将 1000 以内 3 或 5 的倍数的每个数字相加 当我输入以下代码时 for x in xrange 1000 if x 3 0 or x 5 0 place list x sum place 它只是列出了所有
  • 是否可以解析整个字符串?

    如你所知 JavaScript 的parseFloat函数仅在遇到无效字符之前起作用 例如 parseFloat 10 123 10 123 parseFloat 12 zzzz 12 parseFloat z12 NaN 有没有一种方法或
  • ngx-bootstrap typeahead 不显示下拉菜单

    我正在将一个应用程序从 AngularJS 迁移到 Angular 但我在新的 typeahead 实现上遇到了障碍 已经过去一天了 我尝试了几个 API 最后决定采用最相似的 API我在 AngularJS 版本中使用的是什么 this
  • 英特尔处理器:“如果 CPUID.06H:EAX.[7] = 1”是什么意思?

    英特尔处理器数据表中的以下注释是什么意思 如何在 Linux 中的驱动程序代码中检查这一点 如果CPUID 06H EAX 7 1 我在英特尔处理器的软件开发人员手册的寄存器描述表的注释栏中遇到了这种类型的语句 Ref https soft
  • 如何在 Go 中管理 Windows 用户帐户?

    我需要能够从 Go 应用程序管理 Windows 本地用户帐户 并且似乎如果不使用 CGo 就没有本机绑定 我最初的搜索让我发现人们说最好使用 exec Command 来运行 net user 命令 但在解析响应代码时这似乎很混乱且不可靠
  • 实体框架 - MySQL - 日期时间格式问题

    我有一个简单的表格 其中有几个日期字段 每当我运行以下查询时 var docs from d in base EntityDataContext document reviews select d ToList 我收到以下异常 Unable
  • 带有 UIImage 或远程 URL 的 UNNotificationAttachment

    In my Notification Service Extension我正在从 URL 下载图像以显示为UNNotificationAttachment在通知中 因此 我将此图像作为 UIImage 并且不需要将其写入光盘上的应用程序目录