Când primiți o notificare într-o aplicație iOS, este posibil să doriți să descărcați conținut ca răspuns la aceasta sau să editați conținutul înainte de a fi afișat utilizatorului. În iOS 10, Apple permite acum aplicațiilor să facă acest lucru printr-un nou Serviciul de notificare Extensie.
Un exemplu de moment în care acest lucru ar putea fi util este dacă aveți o aplicație de mesagerie în care serverul dvs. de back-end a identificat numai utilizatorii printr-un anumit cod și nu prin nume. Pentru un utilizator al aplicației, numele și alte detalii ale contactelor pot fi stocate local pe dispozitiv. Când trimiteți o notificare unui utilizator atunci când primesc un mesaj, încărcătura utilă inițială ar putea include identificatorul expeditorului pe care extensia dvs. de servicii le-ar putea înlocui cu numele contactului.
Pentru a utiliza acest nou tip de extensie, va trebui să vă dezvoltați aplicația cu Xcode 8 sau o versiune ulterioară și cu SDK-ul iOS 10.
Rețineți următoarele înainte de a continua cu acest sfat rapid:
Dacă doriți să aflați mai multe despre oricare dintre aceste subiecte, puteți citi aceste alte tutoriale:
Procesul de adăugare a unei extensii a serviciului de notificare într-o aplicație iOS este identică cu cea a altor extensii. În bara de meniu Xcode, accesați Fișier> Nou> Țintă ... și selectați Serviciul de notificare Extensie șablon din meniul care apare:
În meniul următor, puteți completa informații specifice aplicației.
Odată ce ați creat extensia, veți vedea două fișiere (sau trei dacă utilizați obiectivul C) în folderul de extensie din Xcode Navigator de proiect:
Info.plist fișierul conține toate informațiile necesare pentru extensia dvs., astfel încât singurul fișier pe care trebuie să îl modificați este NotificationService.swift fişier.
După ce ați configurat aplicația cu o extensie a serviciului de notificare, următorul proces va avea loc pentru fiecare notificare:
După cum puteți vedea, atunci când utilizați o extensie a serviciului de notificare, aveți doar o perioadă limitată de timp pentru a efectua munca necesară. Dacă extensia dvs. durează prea mult, sistemul va fi oprit și notificarea va fi livrată ca și cum nu ați avea nici o extensie.
Extensia serviciului dvs. de notificare există ca un singur obiect care este o subclasă a UNNotificationServiceExtension
clasă. Această clasă definește următoarele metode:
didReceive (_: withContentHandler :)
care vă oferă extensia originală UNNotificationRequest
obiect. În această metodă, creați un nou UNNotificationContent
obiect și treceți acest lucru ca un parametru pentru agentul de completare atunci când ați terminat. Acest conținut de notificare poate fi creat fie de la zero, fie dintr-o copie mutable a conținutului original. Următorul cod arată un exemplu de implementare a acestei metode:override func didReceive (_ cerere: UNNotificationRequest, cu contentContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) dacă permite copy = request.content.mutableCopy () ca? UNMutableNotificationContent // Editați proprietățile conținutului copieiHandler (copie)
serviceExtensionTimeWillExpire
care se execută atunci când extensia dvs. urmează să fie terminată de sistem. Această metodă nu conține parametri, deci dacă doriți ca extensia dvs. să furnizeze un In progres versiunea conținutului dvs. modificat, va trebui să păstrați o referință la agentul de completare de la didReceive (_: withContentHandler :)
metodă. Următorul cod arată cum s-ar putea obține acest lucru în subclasa de extensie:// Setați această proprietate din metoda didReceive (_: withContentHandler :) var contentHandler: ((UNNotificationContent) -> Void)? // Modificați această proprietate pe măsură ce manipulați conținutul var bestAttemptContent: UNMutableNotificationContent? suprascrie func serviceExtensionTimeWillExpire () dacă permite contentsHandler = contentHandler, lasă bestAttemptContent = bestAttemptContent contentHandler (bestAttemptContent)
Ultimul lucru important care trebuie luat în considerare atunci când se utilizează o extensie a serviciului de notificare este condițiile în care va funcționa extensia.
În primul rând, extensia dvs. va fi lansată numai pentru notificările configurate pentru a afișa alerte pe ecran către utilizator. Aceasta înseamnă că orice notificări silențioase (precum cele utilizate pentru a actualiza insignele aplicațiilor) nu vor declanșa extensia dvs..
În al doilea rând, notificările primite aps
Dicționarul în volumul său util trebuie să includă mutabil conținut
cheie cu o valoare de 1
.
Configurarea corectă a notificărilor va depinde, în cele din urmă, de setările proprii ale aplicației. Pentru a îndeplini cea de-a doua condiție, în special, este posibil să fie necesară o anumită modificare a implementării notificării push push-server. Dacă nu utilizați un server personalizat și utilizați în schimb un serviciu terță parte pentru implementarea anunțului de notificare prin push, atunci vă sugerăm să cercetați și să citiți documentația de asistență dacă nu puteți obține extensia dvs. la serviciu.
Prin noul UNNotificationServiceExtension
class în iOS 10, este foarte simplu pentru dvs. să implementați o extensie a serviciului de notificare pentru propriile aplicații. Indiferent de cazul dvs. de utilizare, aceste API vă permit să modificați cu ușurință conținutul unei notificări înainte de a fi afișat utilizatorului.
Ca întotdeauna, vă rugăm să aveți grijă să lăsați comentariile și feedback-ul dvs. în secțiunea de comentarii de mai jos. Și verificați câteva dintre celelalte postări ale dezvoltatorilor de aplicații iOS 10 și Swift!