iOS 10 introduit les mises à jour du cadre de notification Push,
UserNotificationsUI.framework
Comme indiqué sur Apple docs, il nous permet de personnaliser l’apparence des notifications locales et distantes lorsqu'elles apparaissent sur le périphérique de l’utilisateur.
Donc, si quelqu'un a une idée sur la façon d'afficher une image dans la notification Push lorsque l'écran est verrouillé. comme le font les notifications andorid.
Merci,
Si vous souhaitez personnaliser l'apparence des notifications locales et distantes, procédez comme suit:
Créez un UNNotificationCategory
et ajoutez-le à la catégorie UNUserNotificationCenter
:
let newCategory = UNNotificationCategory(identifier: "newCategory",
actions: [ action ],
minimalActions: [ action ],
intentIdentifiers: [],
options: [])
let center = UNUserNotificationCenter.current()
center.setNotificationCategories([newCategory])
Créez une UNNotificationContentExtension:
utilisez ensuite du code ou un scénario pour personnaliser votre UIViewController
.
UNNotificationContentExtension
:4. Notification Push
Notification locale
Créez un UNMutableNotificationContent
et réglez le categoryIdentifier
sur "newCategory" qui inclut les catégories de UNUserNotificationCenter
et le plist de UNNotificationContentExtension
:
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)
Notification à distance
Ensemble "mutable-content : 1"
et "category : newCategory"
. Notez que la valeur de la catégorie est définie sur "newCategory", ce qui correspond à ce que vous avez précédemment ajouté à la pliste UNUserNotificationCenter
et UNNotificationContentExtension
s.
Exemple:
{
"aps" : {
"alert" : {
"title" : "title",
"body" : "Your message Here"
},
"mutable-content" : "1",
"category" : "newCategory"
},
"otherCustomURL" : "http://www.xxx.jpg"
}
UNNotificationContentExtension
. (Sous iOS10 Bêta1, cela ne fonctionne pas. Mais maintenant, ce travail sans contact 3DEt ... si vous souhaitez simplement afficher une image dans une notification Push affichée sur l'écran de verrouillage, vous devez ajouter 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)
Pour plus de détails, Demo
En fait, si vous configurez une notification locale et que vous souhaitez simplement qu'une image apparaisse dans la notification elle-même, vous n'avez pas à vous soucier de NotificationsUI.framework ou UNNotificationContentExtensions. Cela n’est utile que si vous souhaitez une interface utilisateur personnalisée lorsque l’utilisateur 3D touche ou développe la notification.
Pour ajouter une image déjà présente sur le périphérique (soit livrée avec l'application, soit générée/stockée par l'application à un moment donné avant la création de la notification), il vous suffit d'ajouter un UNNotificationAttachment avec une URL de fichier où le chemin se termine. dans .png (ou .jpg fonctionnera probablement aussi?). Quelque chose comme ça:
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];
}
Ensuite, lorsque la notification apparaît, l'image apparaîtra à droite de la bannière de notification, comme pour les notifications de messages. Et vous n'avez pas besoin de parcourir toutes les étapes de la configuration d'une extension de contenu avec un identifiant de catégorie, etc.
EDIT: mise à jour pour ajouter qu'il ne s'agit que d'une solution valide pour les notifications locales.
Vous devez travailler sur la création de notifications Push et également lorsque vous les manipulez.
Lorsque vous créez une charge, vous devez ajouter une pièce jointe à un attribut, comme ci-dessous:
{
aps : {
alert: { },
mutable-content:1
}
my-attachment = "url to resource"
}
Lorsque vous recevez notification, le système appelle la méthode didReceive
de l'extension de service, remplacez l'extension de notification didReceive
comme ceci
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)
}
Here est le vidéoconférence WWDC sur ce sujet.