Богатое уведомление с расширенным изображением в трее уведомлений
Я пытаюсь отобразить расширенные уведомления в моем приложении с таким расширенным изображением. Я использовал расширение службы уведомлений для реализации этого в приложении.
Но я получаю миниатюру, только когда получаю уведомление, которое выглядит примерно так. Расширенное изображение появляется, когда я долго нажимаю на телефон с поддержкой 3D-Touch, в противном случае оно просто отображает миниатюру на телефонах, которые не имеют 3D-Touch.
Я не смог найти какую-либо документацию или какие-либо вопросы по SO, которые объясняют, как это сделать, если это возможно. Я хотел бы знать, возможно ли сделать это на iOS, если нет, то есть ли какой-нибудь возможный обходной путь для достижения этой цели? Вот мой NotificationSerivce
расширение. Любая помощь высоко ценится! Спасибо!
class NotificationService: UNNotificationServiceExtension {
let fileManager = FileManager()
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
// Modify the notification content here...
guard let content = (request.content.mutableCopy() as? UNMutableNotificationContent) else {
return self.contentHandler = contentHandler
}
bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"
guard let attachmentURL = content.userInfo["attachment-url"] as? String else {
return self.contentHandler = contentHandler
}
guard let fileName = attachmentURL.components(separatedBy: "/").last else {
return self.contentHandler = contentHandler
}
guard let imageData = try? Data(contentsOf: URL(string: attachmentURL)!) else {
return self.contentHandler = contentHandler
}
if let thumbnailAttachment = UNNotificationAttachment.create(imageFileIdentifier: fileName, data: imageData, options: nil) {
bestAttemptContent.attachments = [thumbnailAttachment]
}
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}
extension UNNotificationAttachment {
/// Save the image to disk
static func create(imageFileIdentifier: String, data: Data, options: [AnyHashable: Any]?) -> UNNotificationAttachment? {
let fileManager = FileManager.default
let tmpSubFolderName = ProcessInfo.processInfo.globallyUniqueString
let tmpSubFolderURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(tmpSubFolderName, isDirectory: true)
do {
try fileManager.createDirectory(at: tmpSubFolderURL!, withIntermediateDirectories: true, attributes: nil)
let fileURL = tmpSubFolderURL?.appendingPathComponent(imageFileIdentifier)
try data.write(to: fileURL!, options: [])
let imageAttachment = try UNNotificationAttachment(identifier: imageFileIdentifier, url: fileURL!, options: options)
return imageAttachment
} catch let error {
print("error \(error)")
}
return nil
}
}
0 ответов
Это очень старый вопрос, и я думаю, вы бы уже поняли, что то, чего вы пытаетесь достичь, технически невозможно. Уведомления появляются в свернутой форме, и только если пользователь нажимает (или долго нажимает в случае устройств без 3D-Touch) на уведомление, они будут показаны в развернутой форме.