Cu iOS 10, Apple permite acum dezvoltatorilor de aplicații să creeze interfețe personalizate pentru notificările livrate utilizatorilor lor. Posibilitățile acestui cadru sunt afișate în aplicația Mesaje, unde puteți vedea interfața de conversație ca și cum ați fi în aplicația în sine.
Cadrul care face posibilă această posibilitate este noul UserNotificationsUI cadru. Prin utilizarea acestui cadru, puteți adapta orice UIViewController
pentru a vă prezenta conținutul de notificare.
În acest tutorial, vă vom arăta cum să utilizați acest nou cadru pentru a crea o interfață personalizată la notificările aplicației proprii.
Acest tutorial necesită să executați Xcode 8 cu SDK-ul iOS 10. De asemenea, va trebui să descărcați proiectul Starter de la GitHub.
Rețineți că proiectul de pornire utilizează noul cadru UserNotification în iOS 10 pentru a programa notificările locale pentru testare. Vom folosi acel cadru în întreg tutorialul, deci dacă nu sunteți familiarizat cu acesta, verificați-mi postarea care îl acoperă aici:
Ca și multe alte tipuri de funcții suplimentare pentru aplicații iOS, cum ar fi partajarea și tastatura personalizată, interfețele de notificare încep cu o extensie.
Cu proiectul de pornire deschis în Xcode, navigați la Fișier> Nou> Țintă ... în bara de meniu. În dialogul care apare, selectați iOS> Extensie aplicație> Conținut notificare tipul extensiei:
Denumiți extensia indiferent de ce doriți și dați clic pe finalizarea:
Dacă apare un pop-up care vă cere să activați noua dvs. schemă, faceți clic pe Activati butonul pentru setarea pentru depanare:
Veți vedea acum un nou dosar cu numele extensiei dvs. în Xcode File Navigator pentru proiectul dvs. Acest dosar conține următoarele fișiere:
NotificationViewController
clasa a UIViewController
subclasă) pentru interfața personalizată. În mod implicit, Xcode face de asemenea automat această clasă în conformitate cu protocolul necesar din cadrul UserNotificationUI. Vom analiza acest protocol mai detaliat mai târziu în tutorial.NotificationViewController
clasa, astfel încât nu trebuie să fie făcută manual.Veți vedea că Xcode leagă automat extensia de conținut de notificare la punctul de extensie corect, com.apple.usernotifications.content-extensie, și fișier interfață storyboard, MainInterface. În cadrul NSExtensionAttributes sub-dicționar, există două atribute pe care trebuie să le definiți:
În plus, puteți defini și UNNotificationExtensionDefaultContentHidden atributul în acest sens NSExtensionAttributes dicţionar. Acest atribut necesită o valoare booleană care îi spune sistemului să afișeze sau nu afișarea implicită a notificării împreună cu interfața dvs. Bara de titlu din partea de sus conținând pictograma și numele aplicației, precum și un buton de concediere mereu fi afișat. Pentru orice acțiune personalizată pe care ați definit-o pentru categoria dvs. de notificări, va fi afișat de asemenea un buton pentru ca utilizatorul să efectueze această acțiune. Definirea unei valori Adevărat pentru acest atribut va rezulta ca sistemul să afișeze numai interfața personalizată și nu afișarea implicită a notificării. Dacă nu definiți acest atribut sau nu furnizați o valoare fals, atunci afișarea implicită a notificării va fi afișată sub interfața dvs..
Crearea interfeței pentru conținutul dvs. de notificare personalizată este identică cu cea când creați o interfață pentru orice controler obișnuit de vizualizare pentru iOS.
Un lucru foarte important de ținut minte la proiectarea interfeței dvs. este totuși faptul că controlerul de vizualizare nu va primi niciun eveniment tactil când este afișat utilizatorului. Aceasta înseamnă că controlerul dvs. de vizualizare nu trebuie să includă elementele de interfață pe care utilizatorul ar putea să le interacționeze, inclusiv butoanele, comutatoarele, glisoarele etc. Vă rugăm să rețineți că puteți include în continuare elemente cum ar fi UITableView
și UIScrollView
s în interfața dvs. și le defilați programatic dacă conținutul dvs. nu se încadrează în întreaga interfață.
Singura excepție este că, dacă interfața dvs. conține un fel de suport media asociat notificării, puteți cere sistemului să afișeze un buton de redare / pauză.
Pentru a crea interfața pentru acest tutorial, deschideți-vă MainInterface.storyboard fişier. Mai întâi, selectați controlerul de vizualizare și în Atribuții inspector, modificați înălțimea sa pentru a fi egală cu lățimea sa:
Apoi, modificați culoarea de fundal a vederii principale la alb. În cele din urmă, modificați proprietatea de culoare a etichetei existente la negru, iar dimensiunea textului la 96. Când ați terminat, interfața dvs. ar trebui să arate similară cu următoarea:
În timp ce am modificat doar ușor interfața prestabilită furnizată de Xcode, în funcție de conținutul pe care îl conține, puteți crea cu ușurință orice interfață bazată pe UIKit pentru a vă prezenta notificările.
Acum, cu interfața noastră completă, deschideți-vă NotificationViewController.swift fișier pentru a începe implementarea funcționalității în cadrul controlerului de vizualizare.
Ce determină controlerul de vizualizare a conținutului de notificare, în afară de orice alt regulat UIViewController
subclasa este conformitatea cu UNNotificationContentExtension
protocol. Acest protocol face parte din cadrul UserNotificationsUI și definește următoarele metode:
didReceive (_ :)
care se numește ori de câte ori aplicația primește o notificare nouă. Acesta conține un singur UNNotification
obiect ca parametru pe care îl puteți utiliza pentru a accesa întregul conținut al notificării primite. Este important să rețineți că această metodă poate fi apelată de mai multe ori dacă aplicația dvs. continuă să primească notificări când interfața dvs. este deschisă, astfel încât aplicația dvs. să poată gestiona acest lucru.didReceive (_: completionHandler :)
care se numește atunci când utilizatorul întrerupe unul dintre butoanele de acțiune personalizate ale notificării. Această metodă conține a UNNotificationResponse
obiect pe care îl puteți utiliza pentru a determina ce acțiune a selectat utilizatorul. După ce ați terminat procesarea acțiunii de notificare, trebuie să apelați un handler de completare cu un a UNNotificationContentExtensionResponseOption
valoare. UNNotificationContentExtensionResponseOption
enumerarea definește următoarele opțiuni:
doNotDismiss
pe care ar trebui să o utilizați atunci când controlerul vizualizării notificărilor gestionează toată logica acelei acțiuni și doriți ca interfața dvs. să rămână pe ecran.destitui
pe care ar trebui să o utilizați atunci când controlerul de vizualizare a notificărilor gestionează toată logica acelei acțiuni și doriți ca interfața dvs. să fie închisă.dismissAndForwardAction
pe care ar trebui să o utilizați atunci când doriți să închideți interfața și să permiteți delegarea aplicației (sau oricare ar fi cea a dvs.) UNUserNotificationCenterDelegate
obiect este) să se ocupe de acțiunea personalizată.O altă parte a funcționalității oferită de protocolul UNNotificationContentExtension este capacitatea de a adăuga la interfața dvs. un buton de redare media generat de sistem. Acesta este numai excepție de la limitările de design ale interfeței pe care le-am menționat mai devreme. Prin suprascrierea următoarelor proprietăți și metode, puteți adăuga acest buton la interfața dvs. și puteți detecta când este apăsat de către utilizator:
mediaPlayPauseButtonType
: A UNNotificationContentExtensionMediaPlayPauseButtonType
valoaremediaPlayPauseButtonFrame
: A CGRect
valoaremediaPlayPauseButtonTintColor
: A UIColor
valoaremediaPlay
: apelat când interfața dvs. ar trebui să-și redea mediamediaPause
: apelat atunci când interfața dvs. ar trebui să întrerupă mass-mediaNotificarea locală pe care proiectul inițiator o creează include un număr personalizat în notificare userinfo
proprietate, iar asta este ceea ce vom afișa în interfața personalizată. Pentru a face acest lucru, înlocuiți-vă NotificationViewController
clasa lui didReceive (_ :)
cu următoarele metode:
func didReceive (notificare: UNNotificare) dacă numărul = notification.request.content.userInfo ["customNumber"] ca? Int etichetă? .Text = "\ (număr)"
Acum este momentul ca noi să încercăm interfața personalizată. În primul rând, asigurați-vă că țintă aplicației iOS este în prezent selectată de Xcode în colțul din stânga sus:
Când aplicația dvs. a fost selectată, apăsați Command-R sau butonul de redare din colțul din stânga sus pentru a rula aplicația. La prima rulare a aplicației, veți vedea următoarea alertă pentru a permite notificările:
Clic Permite apoi apăsați butonul de pornire de pe dispozitiv (sau Command-Shift-H dacă utilizați simulatorul) pentru a închide aplicația. Așteptați aproximativ 30 de secunde și pe dispozitivul dvs. va apărea următoarea notificare:
Pentru a vizualiza interfața personalizată, puteți să dați clic și să trageți în jos această notificare sau să utilizați funcția 3D Touch pe ea dacă utilizați un dispozitiv sau simulator iPhone 6s sau 7. Dacă utilizați simulatorul, puteți simula funcțiile de atingere 3D utilizând opțiunile din Sunteți aici: Hardware> Presiune Touch meniul:
Odată ce interfața de notificare se încarcă, ar trebui să pară următoarea captură de ecran:
Veți vedea că titlul, subtitrarea și corpul de notificare sunt afișate sub interfața personalizată și acest lucru se datorează faptului că nu am specificat o valoare a Adevărat pentru UNNotificationExtensionDefaultContentHidden cheie.
De asemenea, veți observa că interfața de notificare începe ca un pătrat, datorită UNNotificationExtensionInitialContentSizeRatio valoarea pe care am setat-o mai devreme și apoi animăm în jos pentru a se potrivi cu eticheta care arată 100. Modificarea dimensiunii interfeței de notificare este rezolvată de sistemul iOS Auto-layout astfel încât, de exemplu, dacă doriți ca interfața dvs. să rămână pătrată, puteți restrânge o vedere în interfața dvs. pentru a avea un raport de aspect de 1: 1.
În general, cadrul UserNotificationsUI vă permite să creați cu ușurință interfețe bogate în funcții pentru notificările dvs., care permit utilizatorilor să interacționeze cu aplicația dvs. fără a închide ceea ce lucrează în prezent. În timp ce am creat doar un exemplu foarte simplu în acest tutorial, tot ce puteți pune într-un controler regulat de vizualizare a aplicațiilor iOS pe care îl puteți pune în interfața dvs. de notificare, inclusiv elemente detaliate și complexe, cum ar fi vizionările SceneKit și SpriteKit.
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 articole și tutoriale despre noile caracteristici din iOS 10 și watchOS 3!