2016-06-15 78 views
29

iOS 10 introdotti aggiornamenti quadro notifica push,come visualizzare l'immagine in ios notifica push?

UserNotificationsUI.framework

Come scritto su documenti di mele, ci permette di personalizzare l'aspetto delle notifiche locali e remoti quando appaiono sul dispositivo dell'utente.

Quindi, se qualcuno ha idea di come visualizzare l'immagine nella notifica push quando sulla schermata di blocco. lo stesso tipo di notifica push di andorid.

Grazie,

+0

È possibile guardare i video degli sviluppatori di WWDC. Sta spiegando alla lezione "Rich Notifications". –

risposta

1

Dovete fare un certo lavoro sulla creazione di notifica push e anche quando si è manipolazione.

  1. Quando si crea payload è necessario aggiungere l'attaccamento attributo in più, qualcosa di simile di seguito:

    {   
        aps : { 
         alert: { }, 
         mutable-content:1 
        } 
        my-attachment = "url to resource" 
    } 
    
  2. Quando si riceve sistema di notifica chiamerà didReceive modalità di estensione del servizio, ignorare l'estensione notifica didReceive metodo come questo

    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 è un video di WWDC su questo argomento.

+0

mutable-content è la chiave che deve essere aggiunta al dizionario aps. – Luke

+1

Dovrai anche scaricare l'immagine – Luke

62

Se si desidera personalizzare l'aspetto delle notifiche locali e remoti, effettuare le seguenti operazioni:

  1. Creare un UNNotificationCategory e aggiungere alla categoria UNUserNotificationCenter:

    let newCategory = UNNotificationCategory(identifier: "newCategory", 
                 actions: [ action ], 
                 minimalActions: [ action ], 
                 intentIdentifiers: [], 
                 options: []) 
    
    let center = UNUserNotificationCenter.current() 
    
    center.setNotificationCategories([newCategory]) 
    
  2. Creare un UNNotificationContentExtension :

enter image description here

quindi utilizzare il codice o lo storyboard per personalizzare lo UIViewController.

  1. Aggiungi categoria ai UNNotificationContentExtension s' plist:

enter image description here

4.Push di notifica

notifica locale

Creare un UNMutableNotificationContent e impostare il categoryIdentifier a "Newcategory", che comprende 'categorie s e UNNotificationContentExtension' UNUserNotificationCenter plist s:

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) 

remoto Notifica

Set "mutable-content : 1" e "category : newCategory". Si noti che il valore della categoria è impostato su "newCategory" che corrisponde a quanto precedentemente aggiunto a UNUserNotificationCenter e UNNotificationContentExtension s plist.

Esempio:

{ 
    "aps" : { 
     "alert" : { 
     "title" : "title", 
     "body" : "Your message Here" 
     }, 
     "mutable-content" : "1", 
     "category" : "newCategory" 
    }, 
    "otherCustomURL" : "http://www.xxx.jpg" 
} 
  1. . Nota: è necessario un dispositivo o un simulatore che supporta 3DTouch, altrimenti non è possibile mostrare un costume UNNotificationContentExtension viewcontroller (In iOS10 Beta1, non funziona. Ma ora questo lavoro senza tocco 3d)

E ... se si vuole solo mostrare un'immagine su una notifica push visualizzata sullo schermo di blocco, è necessario aggiungere 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) 

enter image description here

Per ulteriori dettagli funzione, Demo

+0

correggimi se sbaglio. al punto # 5 stai dicendo che nulla di tutto ciò può essere realizzato in un dispositivo che non ha un tocco 3D? –

+1

@JesusAdolfoRodriguez funziona senza il tocco 3D – BigRon

+1

@maquannene Sono abbastanza sicuro che devi impostare "contenuto mutabile": 1'; cioè, '1' il numero intero, non' "1" 'la stringa, o sono errato? – BigRon

5

in realtà se si sta configurando una notifica locale e siete solo interessati ad avere un'immagine rivela i n la notifica stessa, non devi preoccuparti di NotificationsUI.framework o UNNotificationContentExtensions. Ciò è utile solo se desideri un'interfaccia utente personalizzata quando l'utente 3D tocca o espande la notifica.

Per aggiungere un'immagine già presente sul dispositivo (fornita con l'app o generata/archiviata dall'app in un determinato momento prima della creazione della notifica), è sufficiente aggiungere un UNNotificationAttachment con un URL file dove il percorso termina con .png (o .jpg probabilmente funzionerà anche?). Qualcosa di simile a questo:

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]; 
} 

Poi, quando appare la notifica, l'immagine apparirà sul lato destro del banner di notifica, come invece accade per i messaggi di notifiche. E non devi saltare tutti i cerchi di un'estensione di contenuto con un identificatore di categoria, ecc.

MODIFICA: aggiornato per aggiungere che questa è solo una soluzione valida per le notifiche locali.