有没有办法在不使用通知服务扩展的情况下将图像附加到推送通知?

Posted

技术标签:

【中文标题】有没有办法在不使用通知服务扩展的情况下将图像附加到推送通知?【英文标题】:Is there a way to attach an image to a push notification without using the Notification Service Extension? 【发布时间】:2018-03-16 06:45:27 【问题描述】:

我目前在一个项目中工作,我们已经在应用程序的主要目标中设置了推送通知,现在我们想要添加丰富的推送功能。我在互联网上进行了大量研究,没有在项目中添加新目标(通知服务扩展)的情况下找不到实现丰富推送通知的方法。

正如我在标题中所说,是否可以在不使用这个新目标的情况下将图像添加到推送通知中?

【问题讨论】:

【参考方案1】:

技术上是的,但实际上不是。只要您的图像足够小,对图像进行 base64 编码之类的操作仍然可以使其适合有效负载,您就可以这样做。

但是,考虑到添加通知服务扩展是多么简单,您为什么要避免它呢?您的扩展程序看起来像这样:

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

  self.contentHandler = contentHandler
  bestAttemptContent = request.content.mutableCopy() as? UNMutableNotificationContent

  defer  contentHandler(bestAttemptContent!) 

  let destination = URL(fileURLWithPath: NSTemporaryDirectory())
      .appendingPathComponent(url.lastPathComponent)

  do 
    let data = try Data(contentsOf: url)
    try data.write(to: destination)

    let attachment = try UNNotificationAttachment(identifier: "",
                                                  url: destination)
    bestAttemptContent!.attachments = [attachment]
   catch 
  

明确注意,您需要在此方法中进行同步下载。

【讨论】:

以上是关于有没有办法在不使用通知服务扩展的情况下将图像附加到推送通知?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不将 dtype 更改为对象的情况下将 NaT 附加到带有时区的 pandas 日期时间?

有没有办法在不将完整文件加载到内存的情况下将 tiff 图像转换为 Base64

如何在不导致复制的情况下将 char 数据附加到 std::vector

有没有办法在不构建的情况下将 docker-compose 容器无缝传输到另一台主机? [复制]

在不使用字符串的情况下将图像上传到android中的服务器

如何在不使用画布的情况下将整个 div 数据转换为图像并将其保存到目录中?