iOS 10 Extensii de servicii de notificare

Introducere

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:

  • Acest articol va nu treceți prin procesul de configurare a aplicației pentru trimiterea / primirea de notificări locale sau prin împingere. 
  • Codul exemplu prezentat va fi prin utilizarea API-urilor introduse în cadrul UserNotifications, care este, de asemenea, nou în iOS 10. 
  • Dacă doriți să aflați cum să creați interfețe personalizate pentru notificările dvs., acestea se fac prin notificare conţinut extensiile.

Dacă doriți să aflați mai multe despre oricare dintre aceste subiecte, puteți citi aceste alte tutoriale:

1. Configurarea extensiei

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:

  • NotificationService.swift, care va conține tot codul și logica pentru extensia dvs..
  • Info.plist, care conține detalii de configurare pentru extensia dvs..

 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.

2. Extinderea ciclului de viață

După ce ați configurat aplicația cu o extensie a serviciului de notificare, următorul proces va avea loc pentru fiecare notificare:

  1. Aplicația primește notificarea.
  2. Sistemul creează o instanță a clasei de extensie și o lansează în fundal.
  3. Extensia dvs. efectuează modificări de conținut și / sau descărcări de conținut.
  4. Dacă extensia dvs. durează prea mult pentru a-și îndeplini activitatea, va fi anunțată și terminată imediat.
  5. Notificarea este afișată utilizatorului.

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. 

3. Codul extensiei

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)

4. Limitări de extindere

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.

Concluzie

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!

Cod