Как отображать изображение в уведомлении ios push?

В iOS 10 введены обновления фреймворка уведомления,

UserNotificationsUI.framework

Как написано на яблочных документах, он позволяет настраивать внешний вид локальных и удаленных уведомлений, когда они появляются на пользовательском устройстве.

Итак, если у кого-нибудь есть идея, как отображать изображение в push-уведомлении, когда на экране блокировки. такие же, как andorid push-уведомление, делают.

Спасибо,

Ответ 1

Если вы хотите настроить внешний вид локальных и удаленных уведомлений, выполните следующие действия:

  • Создайте UNNotificationCategory и добавьте в категорию UNUserNotificationCenter:

    let newCategory = UNNotificationCategory(identifier: "newCategory",
                                             actions: [ action ],
                                             minimalActions: [ action ],
                                             intentIdentifiers: [],
                                             options: [])
    
    let center = UNUserNotificationCenter.current()
    
    center.setNotificationCategories([newCategory])
    
  • Создайте UNNotificationContentExtension:

введите описание изображения здесь

затем используйте код или раскадровку, чтобы настроить UIViewController.

  1. Добавить категорию в UNNotificationContentExtension plist:

введите описание изображения здесь

Уведомление 4.Push

Локальное уведомление

Создайте UNMutableNotificationContent и установите categoryIdentifier в "newCategory", который включает в себя категории UNUserNotificationCenter и UNNotificationContentExtension plist:

let content = UNMutableNotificationContent()
content.title = ...
content.body = ...
content.categoryIdentifier = "newCategory"

let request = UNNotificationRequest.init(identifier: "newNotificationRequest", content: content, trigger: nil)

let center = UNUserNotificationCenter.current()
center.add(request)

Удаленное уведомление

Установите "mutable-content : 1" и "category : newCategory". Обратите внимание, что для значения категории установлено значение "newCategory", которое соответствует тому, что вы ранее добавили в UNUserNotificationCenter и UNNotificationContentExtension plist.

Пример:

 {
    "aps" : {
        "alert" : {
        "title" : "title",
        "body" : "Your message Here"
        },
        "mutable-content" : "1",
        "category" : "newCategory"
    },
    "otherCustomURL" : "http://www.xxx.jpg"
 }
  1. Примечание: вам нужно устройство или симулятор, поддерживающий 3DTouch, в противном случае вы не сможете показать настраиваемый диспетчер UNNotificationContentExtension. (В iOS10 Beta1 это не работает. Но теперь эта работа без 3d touch)

И... если вы просто хотите показать изображение на уведомлении push, отображаемом на экране блокировки, вам нужно добавить UNNotificationAttachment:

let content = UNMutableNotificationContent()
content.title = ...
content.body = ...
content.categoryIdentifier = "newCategory"

let fileURL: URL = ... //  your disk file url, support image, audio, movie

let attachement = try? UNNotificationAttachment(identifier: "attachment", url: fileURL, options: nil)
content.attachments = [attachement!]

let request = UNNotificationRequest.init(identifier: "newNotificationRequest", content: content, trigger: nil)

let center = UNUserNotificationCenter.current()
center.add(request)

введите описание изображения здесь

Подробнее о функции Демо

Ответ 2

На самом деле, если вы настраиваете локальное уведомление, и вам просто интересно, чтобы изображение отображалось в самом уведомлении, вам вообще не нужно беспокоиться о NotificationsUI.framework или UNNotificationContentExtensions. Это полезно только в том случае, если вам нужен пользовательский интерфейс, когда пользовательский 3D затрагивает или расширяет уведомление.

Чтобы добавить изображение, уже находящееся на устройстве (либо поставляемое с приложением, либо сгенерированное/сохраненное приложением в какой-то момент до создания уведомления), тогда вам нужно только добавить UNNotificationAttachment с URL-адресом файла, где путь заканчивается на .png(или .jpg, вероятно, тоже будет работать?). Что-то вроде этого:

UNMutableNotificationContent *content = [UNMutableNotificationContent new];
content.title = @"Title";
content.body = @"Body";
content.sound = [UNNotificationSound defaultSound];
NSURL *imageURL = [NSURL URLWithString:@"file:/some/path/in/app/image.png"];
NSError *error;
UNNotificationAttachment *icon = [UNNotificationAttachment attachmentWithIdentifier:@"image" URL:imageURL options:nil error:&error];
if (error)
{
    NSLog(@"error while storing image attachment in notification: %@", error);
}
if (icon)
{
    content.attachments = @[icon];
}

Затем, когда появится уведомление, изображение появится в правой части баннера уведомлений, как это делается для уведомлений о сообщениях. И вам не нужно перескакивать через все обручи настройки расширения контента с помощью идентификатора категории и т.д.

EDIT: обновлено, чтобы добавить, что это только допустимое решение для локальных уведомлений.

Ответ 3

Вам необходимо выполнить некоторую работу по созданию push-уведомления, а также при обработке.

  • Когда вы создаете полезную нагрузку, вам нужно добавить дополнительное прикрепление атрибута, как показано ниже:

    {        
        aps : {
            alert: { },
            mutable-content:1
        }
        my-attachment = "url to resource"
    }
    
  • Когда вы получаете систему уведомлений, вызов метода didReceive расширения службы, переопределите расширение уведомлений didReceive, например,

    public func didReceive(_ request:UNNotificationRequest, withContentHandler contentHandler:(UNNotificatinContent) -> Void) {
        let fileUrl = //
        let attachment = UNNotificationAttachment(identifier : "image", url: fileUrl, options: nil)
        let content = request.content.mutableCopy as! UNMutableNotificationContent
        content.attachment = [attachment]
        contentHandler(content)
    }
    

Здесь находится видео-разговор WWDC по этой теме.