Как отображать изображение в уведомлении 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
.
- Добавить категорию в
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"
}
- Примечание: вам нужно устройство или симулятор, поддерживающий 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 по этой теме.
Ответ 4
Внедрите свой пользовательский вид уведомления с помощью UIViewController, который соответствует UNNotificationContentExtension.
См. https://developer.apple.com/reference/usernotificationsui/unnotificationcontentextension