Junior — Middle
Каким образом можно реализовать отправку push-уведомлений, включающих изображение?
sobes.tech AI
Answer from AI
To send push notifications with images on iOS, a Notification Service Extension is used. It allows intercepting incoming notifications, downloading an image via URL, and adding it to the notification content.
Main steps:
- Create a Notification Service Extension in the project.
- In the
didReceive(_:withContentHandler:)method of the extension, download the image from the URL provided in the notification payload. - Create a UNNotificationAttachment with the downloaded image.
- Add the attachment to the notification and call the contentHandler.
Example code in Notification Service Extension:
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
guard let bestAttemptContent = bestAttemptContent,
let urlString = bestAttemptContent.userInfo["image-url"] as? String,
let url = URL(string: urlString) else {
contentHandler(request.content)
return
}
URLSession.shared.downloadTask(with: url) { (location, response, error) in
if let location = location {
let tmpDir = FileManager.default.temporaryDirectory
let tmpFile = tmpDir.appendingPathComponent(url.lastPathComponent)
try? FileManager.default.moveItem(at: location, to: tmpFile)
if let attachment = try? UNNotificationAttachment(identifier: "image", url: tmpFile, options: nil) {
bestAttemptContent.attachments = [attachment]
}
}
contentHandler(bestAttemptContent)
}.resume()
}
In the push notification payload, add a key with the image URL, for example:
{
"aps": {
"alert": "New notification with image"
},
"image-url": "https://example.com/image.jpg"
}