Назад к вопросам
Т-Банк
Junior — Middle
73
Каким образом можно реализовать отправку push-уведомлений, включающих изображение?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для отправки push-уведомлений с изображением на iOS используется расширение уведомлений (Notification Service Extension). Оно позволяет перехватывать входящее уведомление, загружать изображение по URL и добавлять его в контент уведомления.
Основные шаги:
- Создать Notification Service Extension в проекте.
- В методе
didReceive(_:withContentHandler:)расширения загрузить изображение из URL, переданного в payload уведомления. - Создать UNNotificationAttachment с загруженным изображением.
- Добавить attachment к уведомлению и вызвать contentHandler.
Пример кода в 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()
}
В payload push-уведомления нужно добавить ключ с URL изображения, например:
{
"aps": {
"alert": "Новое уведомление с изображением"
},
"image-url": "https://example.com/image.jpg"
}