2016-07-08 11 views
3

Ich versuche, eine neue Benachrichtigungsinhaltserweiterung in iOS 10 für lokale Benachrichtigungen zu erstellen, wo der für die Inhaltserweiterung verantwortliche Benachrichtigungs-Controller ein Bild aus dem Netzwerk herunterlädt und es in einem UIImageView rendert. Ich habe die Benachrichtigung Inhalt Erweiterungsziel mit einem geeigneten Info.plist und der Inhalts Erweiterung funktioniert wunderbar für einfache Dinge wie Rendering ein Etikett mit einem gewissen Inhalt, zum Beispiel des Beispielcode einrichten, die in der Vorlage kommt:iOS 10 Benachrichtigung Inhalt Erweiterung: mit NSURLSession?

func didReceive(_ notification: UNNotification) { 
    self.label.text = notification.request.content.body 
} 

Allerdings, wenn ich versuche NSURLSession (oder URLSession in Swift 3) in die Mischung einzuführen, schlägt die Benachrichtigung Inhalt vollständig zu laden - nicht einmal das Etikett mehr gesetzt wird:

func didReceive(_ notification: UNNotification) { 

    self.label.text = notification.request.content.body 
    let session = URLSession.shared() 
    let url = URL(string: "https://chart.googleapis.com/chart?cht=p3&chs=250x100&chd=t:60,40&chl=Hello|World")! 

    let task = session.downloadTask(with: url) { (fileURL, response, error) in 
     if let path = fileURL?.path { 
      DispatchQueue.main.async { 
       self.imageView.image = UIImage(contentsOfFile:path) 
      } 
     } 
    } 
    task.resume() 
} 

ist die Verwendung von NSURLSession in der Mitteilung Inhaltsverlängerung nicht erlaubt? Wird meine Erweiterung möglicherweise vor dem Abschluss des Downloads beendet? Wenn ja, wie kann ich sicherstellen, dass es nicht getötet wird, damit ich das Bild herunterladen und rendern kann?

+0

Ich habe das gleiche Problem, Ändern der Transport-App-Sicherheit tut nichts, keine relevanten Protokolle entweder, und ich habe keine Dokumentation gesehen darüber bis jetzt zu sprechen ... –

Antwort

1

Zum Zeitpunkt, als in der Content-Erweiterung func didReceive(_ notification: UNNotification) aufgerufen wird, sollten alle Änderungen am Inhalt, wie das Herunterladen von Bildern, bereits stattgefunden haben.

Es scheint, dass Sie eine Benachrichtigung Service Extension verwenden, um den Download von zusätzlichen Inhalten zu tun. Die Benachrichtigung Inhalt Erweiterung ist nur verantwortlich für die Bereitstellung einer benutzerdefinierten Benutzeroberfläche, wenn Sie eine benötigen.

In Ihrer Service-Erweiterung laden Sie das Image mithilfe der URL in der Benachrichtigungsnutzlast herunter und legen es als Anhang für das Objekt UNNotification fest. Wenn Sie keine benutzerdefinierte Benutzeroberfläche benötigen, zeigt das System automatisch visuelle Medienanhänge wie ein Video oder ein Bild an. Wenn dies Ihren Anforderungen entspricht, benötigen Sie überhaupt keine Benachrichtigungsinhaltserweiterung.

Pusher bietet ein großartiges Tutorial zum Einrichten einer Notification Service Extension für den Umgang mit Medienanhängen in Push-Benachrichtigungen auf iOS 10 right here.

+0

das ist nicht die richtige Antwort lol . es endet bc die Netzwerkaufgabe ist async. – Gukki5

+0

@ Gukki5 erstellen Sie kein Semaphor und blockieren Sie in einer Inhaltserweiterung. In einer Serviceerweiterung möchten Sie Inhalte für Benachrichtigungen abrufen und anwenden. – imnk

+0

oh ich wusste nicht über die inhaltserweiterung, aber ya habe ich den semaphor mit einer service-extension verwendet – Gukki5

-1

Deaktivieren Sie die App-Transportsicherheit in der Erweiterung "Info.plist for you". Tipp: Datei aus dem Ordner tmp in den Cache zum Speichern verschieben

Verwandte Themen