0

我有一个非常简单的任务。我已经实现了一个通知服务扩展以及一个通知内容扩展来实现丰富的通知。现在在扩展视图(通知内容扩展)中,我需要展示一张图片。为了使 UX 更流畅,我想在 Notifications Service 扩展中预加载它,然后将它呈现在 Notifications Content 扩展中(我相信 Notifications Service 扩展是为它设计的)。

现在我知道UNNotificationAttachment并且可以使用它来下载图像并将其添加到通知中。但是在通知的简短预览中会显示图像附件。我需要简短的预览以保持“干净”并且不显示此图像。

我知道我可以尝试使用 Core Data(SO question)或其他一些共享存储(UserDefaults)。但是使用它,我必须在处理通知后管理删除资源。这意味着我必须以某种方式找到一种方法来检测特定通知何时已被处理(解除/处理),这不是一件容易的事(例如,如果用户不会展开简短预览而是直接解除它,我需要删除资源 - 我如何检测到它?)。

有没有解决这个问题的标准方法?系统根据需要清理一些临时存储吗?或者有没有办法添加 aUNNotificationAttachment并将其配置为不在预览中显示?我更喜欢第一种方式,因为附件只支持媒体类型,而且通常我们可能需要预加载不同类型的资源(我知道这是一种极端情况,但它可能会发生)。

4

1 回答 1

0

我找到了解决我当前问题的解决方法。如果附件链接了一个有效的图像文件,但使用了没有文件扩展名的标识符(因此没有“.png”、“.jpg”或“.gif”),则短预览不会显示图像的预览:

let imageFileIdentifier = "image" // instead of "image.png"
let imageAttachment = try UNNotificationAttachment.init(identifier: imageFileIdentifier, url: fileURL!, options: options)

这可能不是通用解决方案,因为正如文档所述:

如果附加文件损坏、无效或文件类型不受支持,则不会安排发送通知请求。

所以我希望如果文件不是媒体文件,而是例如 JSON 中的序列化对象,则不会发送通知。

于 2018-03-29T09:51:06.007 回答