当前位置: 首页 > 面试题库 >

具有UIImage或远程URL的UNNotificationAttachment

谷永贞
2023-03-14
问题内容

在我的Notification Service Extension我从一个URL下载的图像显示为UNNotificationAttachment一个通知。

因此,我将此图像作为UIImage,没有看到仅在设置通知时将其写入磁盘上的应用程序目录/组容器中的需要。

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


问题答案:
  1. 在tmp文件夹中创建目录
  2. 将的NSData表示形式写入UIImage新创建的目录
  3. 使用URL到tmp文件夹中的文件创建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使用UNUserNotificationAttachmenta
进行创建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会将图像文件复制到自己的位置。



 类似资料:
  • 问题内容: 我无法使用新的Twitter Bootstrap版本:Bootstrap 4 alpha在远程模式下使用Modal。它在Bootstrap 3上运行良好。在Bootstrap 4下,我正在弹出窗口,但是没有加载模型主体。没有进行远程调用来加载模型主体。 码: 问题答案: 发现了问题:他们在引导程序4中删除了远程选项 remote :自v3.3.0起不推荐使用此选项,并将在v4中将其删除

  • 问题内容: 我试图获取从Swift中的Library导入的图像的URL,以将其发送到Apple Watch,但出现两个错误。 这是我的代码: 我在 imageName和 localPath上遇到错误,因为它说: “ lastPathComponent”不可用:在NSURL上使用lastPathComponent。’stringByAppendingPathComponent’不可用:在NSURL上

  • 我在Jboss AS 7.1.1和PostgreSQL上运行Liferay,我将使用我的Portlet到其他PC中的EJB进行远程处理。我连接到Web应用程序(没有Liferay portlet),我的Web应用程序连接到EJB远程处理,我在将portlet部署到Liferay后出现此错误 我将standalon.xml配置为: 我的代码是: 帮助我。

  • 问题内容: 我正在尝试为用户提供照片库中图像的选择。因此,我用于选择。但是在文件系统中获取其初始URL会带来一个问题(我需要)。 我的代码。 imageURL 有点神秘。它描述了资产URL,但没有描述文件系统中的一个。它看起来像:。 根据该逻辑 路径 是其中是所述图像的名称。 然后,我访问我的Documents文件夹并尝试在其中找到带有路径的文件: /Users/Eugene/Library/De

  • 我创建了一个新的存储库: 然后我想将我的提交推送到github上创建的空远程存储库,因此我必须设置远程。 使用以下命令之间有什么区别 最后我执行推送: 当我在之后调用时会发生什么?是否创建来源?如果origin在之后已经存在,那么在我的场景中使用这些命令没有区别,对吧?

  • 我想使用绑定文件将 Java 应用程序配置为使用 JMS IBM MQ 队列。我正在使用由 IBM 提供的 JMSDEMO 应用程序。它适用于本地MQ管理器,但我无法将其连接到远程管理器。我已经在远程计算机上生成了绑定文件,并将其复制到我的计算机上。 我已将绑定文件中的“本地主机”更改为远程计算机名称。但是,该应用程序仍然认为它应该连接到本地QM。(实际上它忽略了主机名设置)。 下面是IBM演示代