Push Notificări Tutorial: Noțiuni de bază

actualizare notă: Chuck Krutsinger actualizat acest tutorial pentru Xcode 11 și Swift 5. Jack Wu a scris tutorialul original, iar Keegan Rush a scris o actualizare anterioară.

dezvoltatorilor iOS le place să-și imagineze oamenii folosind aplicația lor minunată în mod constant. Dar, desigur, utilizatorii vor trebui uneori să închidă aplicația și să efectueze alte activități. Rufele nu se pliază singure, știi! Din fericire, notificările push permit dezvoltatorilor să ajungă la utilizatori și să efectueze sarcini mici — chiar și atunci când utilizatorii nu utilizează în mod activ o aplicație! În acest tutorial, veți învăța cum să:

  • configurați aplicația pentru a primi notificări push.
  • afișați-le utilizatorilor dvs. sau efectuați alte sarcini.

Noțiuni de bază

Ce sunt notificările push? Acestea sunt mesaje trimise către aplicația dvs. prin intermediul serviciului de notificare Push Apple (APN), chiar dacă aplicația dvs. nu rulează sau telefonul este în repaus. Pentru ce puteți utiliza notificările push?

  • Afișați un mesaj text scurt, numit alertă, care atrage atenția asupra a ceva nou în aplicația dvs.
  • reda un sunet de notificare.
  • Setați un număr de insignă pe pictograma aplicației pentru a anunța utilizatorul că există elemente noi.
  • furnizați acțiuni pe care utilizatorul le poate întreprinde fără a deschide aplicația.
  • afișează un atașament media.
  • fii tăcut, permițând aplicației să efectueze o sarcină în fundal.
  • notificări de grup în fire.
  • editați sau eliminați notificările livrate.
  • rulați codul pentru a modifica notificarea înainte de a o afișa.
  • afișați o interfață personalizată, interactivă pentru notificarea dvs.
  • și probabil mai mult.

acest tutorial acoperă multe dintre aceste utilizări pentru a vă ajuta să începeți să creați notificări push în aplicațiile dvs. Pentru a finaliza acest tutorial, veți avea nevoie de următoarele:

  • Xcode 11.4 sau o versiune ulterioară. Versiunile anterioare ale Xcode nu acceptă notificări push folosind simulatorul.
  • un membru al programului Apple Developer pentru a putea compila aplicația cu dreptul de Notificări Push.
notă: mai târziu în tutorial, veți învăța cum să trimiteți notificări push către un dispozitiv real în trimiterea către un dispozitiv Real.

pentru a trimite și primi notificări push, trebuie să efectuați trei sarcini principale:

  1. configurați aplicația și înregistrați-o la APN-uri.
  2. trimite o notificare împinge de la un server la anumite dispozitive prin APN-uri. Veți simula asta cu Xcode.
  3. utilizați callback-uri în aplicație pentru a primi și gestiona notificările push.

trimiterea notificărilor push este o responsabilitate a componentei serverului aplicației dvs. Multe aplicații folosesc terțe părți pentru a trimite notificări push. Alții folosesc soluții personalizate sau biblioteci populare (cum ar fi Houston). Veți atinge doar trimiterea de mesaje push în acest tutorial, așa că asigurați-vă că verificați unde să mergeți de aici? secțiune pentru a vă baza pe cunoștințele despre notificările push.

pentru a începe, descărcați proiectul de pornire WenderCast folosind butonul Descărcare materiale din partea de sus sau de jos a acestui tutorial. WenderCast este sursa tuturor pentru raywenderlich.com podcast-uri și știri de ultimă oră.

în folderul starter, deschideți WenderCast.xcodeproj. Selectați WenderCast în navigatorul de proiect, apoi selectați ținta WenderCast. În fila General& capabilități, selectați echipa de dezvoltare. Construiți și rulați într-un simulator.

Construiți și rulați proiectul de pornire

wendercast afișează o listă de raywenderlich.com podcast-uri și permite utilizatorilor să le joace. Dar nu permite utilizatorilor să știe când este disponibil un nou podcast și fila știri este goală! În curând veți rezolva aceste probleme cu puterea notificărilor push.

trimiterea și primirea notificărilor Push

configurarea aplicației

Securitatea este foarte importantă pentru notificările push. Nu doriți ca altcineva să trimită notificări push utilizatorilor dvs. prin intermediul aplicației. Va trebui să efectuați mai multe sarcini pentru a configura aplicația pentru a primi în siguranță notificări push.

activarea serviciului de notificare Push

În primul rând, trebuie să modificați identificatorul pachetului. În Xcode, evidențiați WenderCast în navigatorul de proiect, apoi selectați ținta WenderCast. Selectați General, apoi schimbați identificatorul pachetului în ceva unic, astfel încât serverul de notificări push al Apple să poată direcționa împingeri către această aplicație.

schimbați identificatorul pachetului

apoi, trebuie să creați un ID de aplicație în contul dvs. de dezvoltator și să activați dreptul de notificare push. Xcode are o modalitate simplă de a face acest lucru: cu ținta WenderCast încă selectată, faceți clic pe fila semnare & capabilități și apoi faceți clic pe butonul + capabilitate. Tastați” push ” în câmpul Filtru și apăsați Enter.

adăugați capacitatea de notificări push

după adăugarea dreptului de notificări push, proiectul dvs. ar trebui să arate astfel:

proiect cu notificări push dreptul

Notă: Dacă apar probleme, vizitați Centrul pentru dezvoltatori Apple. Este posibil să fie nevoie să fiți de acord cu o nouă licență pentru dezvoltatori, pe care Apple îi place să o actualizeze și să încercați din nou.

în spatele scenei, acest lucru creează ID-ul aplicației și apoi adaugă dreptul la notificări push. Vă puteți conecta la Apple Developer Center pentru a verifica acest lucru:

configurarea ID-ului aplicației care arată dreptul la notificări push

asta este tot ce trebuie să configurați pentru moment. Sunteți gata pentru a începe consolidarea app.

solicitarea permisiunii de notificare a utilizatorului

există doi pași pe care îi faceți pentru a vă înregistra pentru notificări push. În primul rând, trebuie să obțineți permisiunea utilizatorului de a afișa notificări. Apoi, puteți înregistra dispozitivul pentru a primi notificări la distanță (push). Dacă totul merge bine, sistemul vă va oferi apoi un jeton de dispozitiv, pe care îl puteți gândi ca o „adresă” a acestui dispozitiv.

în WenderCast, vă veți înregistra pentru notificări push imediat după lansarea aplicației. Cereți mai întâi permisiunile utilizatorului.

deschideți AppDelegate.swift și adăugați următoarele în partea de sus a fișierului:

import UserNotifications

apoi, adăugați următoarea metodă la sfârșitulAppDelegate:

func registerForPushNotifications() { //1 UNUserNotificationCenter.current() //2 .requestAuthorization(options: ) { granted, _ in //3 print("Permission granted: \(granted)") }}

ce face acest cod:

  1. UNUserNotificationCenter gestionează toate activitățile legate de notificări din aplicație, inclusiv notificările push.
  2. invocați requestAuthorization(options:completionHandler:) pentru a solicita (ați ghicit) autorizarea pentru a afișa notificări. ID-ul trecutoptions indică tipurile de notificări pe care doriți să le utilizeze aplicația dvs. — aici solicitați alertă, sunet și insignă.
  3. handler-ul de finalizare primește un Bool care indică dacă autorizarea a avut succes. În acest caz, pur și simplu imprimați rezultatul.
notă: opțiunile pe care le treceți larequestAuthorization(options:completionHandler:) pot include orice combinație deUNAuthorizationOptions:

  • .insignă: Afișați un număr în colțul pictogramei aplicației.
  • .sunet: redați un sunet.
  • .alertă: afișați o notificare text.
  • .carPlay: afișează notificări în CarPlay.
  • .provizoriu: Postează notificări care nu întrerup. Utilizatorul nu va primi o cerere de permisiune dacă utilizați numai această opțiune, dar notificările dvs. vor apărea doar în tăcere în Centrul de notificări.
  • .providesAppNotificationSettings: indică faptul că aplicația are propria UI pentru setările de notificare.
  • .criticalAlert: ignorați comutatorul mut și nu deranjați. Veți avea nevoie de un drept special de la Apple pentru a utiliza această opțiune, deoarece este destinată numai cazurilor de utilizare foarte speciale.

adăugați următoarele aproape de sfârșitulapplication(_:didFinishLaunchingWithOptions:), chiar înainte dereturn:

registerForPushNotifications()

CallingregisterForPushNotifications() aici asigură aplicația va încerca să se înregistreze pentru notificări împinge în orice moment este lansat.

Construiți și rulați. Când se lansează aplicația, ar trebui să primiți un prompt care vă solicită permisiunea de a vă trimite notificări.

Prompt pentru notificări

apăsați permite, și poof! Aplicația poate afișa acum notificări. Grozav! Dar dacă utilizatorul refuză permisiunile? Adăugați această metodă în interiorulAppDelegate:

func getNotificationSettings() { UNUserNotificationCenter.current().getNotificationSettings { settings in print("Notification settings: \(settings)") }}

În primul rând, ați specificat setările dorite. Această metodă returnează setările pe care utilizatorul le-a acordat. Deocamdată, le tipăriți, dar vă veți întoarce aici în scurt timp pentru a face mai multe cu asta.

înregisterForPushNotifications(), înlocuiți apelul larequestAuthorization(options:completionHandler:) cu următoarele:

UNUserNotificationCenter.current() .requestAuthorization( options: ) { granted, _ in print("Permission granted: \(granted)") guard granted else { return } self?.getNotificationSettings() }

ați adăugat un apel lagetNotificationSettings() în handler-ul de finalizare. Acest lucru este important, deoarece utilizatorul poate, în orice moment, să intre în aplicația Setări și să își schimbe permisiunile de notificare. guard evită efectuarea acestui apel în cazurile în care permisiunea nu a fost acordată.

înregistrarea cu APN

acum, că aveți permisiuni, vă veți înregistra pentru notificări de la distanță!

în getNotificationSettings(), adăugați următoarele sub print în interiorul închiderii:

guard settings.authorizationStatus == .authorized else { return }DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications()}

aici, verificați authorizationStatus este .authorized: utilizatorul a acordat permisiuni de notificare. Dacă da, apelați UIApplication.shared.registerForRemoteNotifications() pentru a începe înregistrarea la Serviciul de notificare Push Apple. Trebuie să apelați acest lucru pe firul principal sau veți primi un avertisment de rulare.

adăugați următoarele la sfârșitulAppDelegate:

func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) } let token = tokenParts.joined() print("Device Token: \(token)")}

această metodă este apelată de iOS ori de câte ori un apel cătreregisterForRemoteNotifications() reușește. Codul poate părea criptic, dar pur și simplu ia un primit deviceToken și îl transformă într-un șir. Jetonul dispozitivului este rodul acestui proces. Este furnizat de APN-uri și identifică în mod unic această aplicație pe acest dispozitiv special.

când trimiteți o notificare push, serverul folosește jetoane ca „adrese” pentru a livra dispozitivelor corecte. În aplicația dvs., veți trimite acum acest jeton pe serverul dvs. pentru a salva și utiliza ulterior pentru trimiterea notificărilor.

Acum adăugați următoarele:

func application( _ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { print("Failed to register: \(error)")}

această metodă este apelată de iOS dacăregisterForRemoteNotifications() eșuează. Doar imprimați eroarea pentru moment.

asta e! Construiți și rulați. Pentru că sunteți pe un simulator, veți vedea o Failed to register eroare. Poți ignora asta deocamdată. Mai târziu, când rulați pe un dispozitiv real, ar trebui să primiți un jeton în ieșirea consolei. Iată un exemplu:

exemplu de jeton de dispozitiv

Notă: există mai multe motive pentru care înregistrarea ar putea eșua. Cel mai adesea, se datorează faptului că ID-ul aplicației nu a fost configurat corect. Mesajul de eroare oferă, în general, un indiciu bun pentru ceea ce nu este în regulă.

trimiterea unei notificări Push simulate

utilizați un editor de text pentru a crea mai întâi un fișier apelat.apn, care va trece la simctl utilitate Xcode lui. Lipiți următorul text JSON și salvați fișierul.

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

structura acestui JSON va fi explicată în secțiunea următoare. Răbdare, lăcustă.

Construiți și rulați aplicația din nou pe simulator, apoi fundalul aplicației sau blocați dispozitivul. Aplicația nu este încă capabilă să proceseze notificările push în timp ce se află în prim-plan.

pentru a utiliza simctl, va trebui să cunoașteți identificatorul dispozitivului pentru simulatorul în care rulați aplicația. Dacă există un singur dispozitiv care rulează în simulator, puteți utiliza boot-ul în locul unui identificator. Pentru a obține identificatorul, în Xcode, selectați Dispozitive și simulatoare Windows XV, apoi selectați fila simulatoare din partea de sus și selectați simulatorul pe care îl utilizați din lista din stânga. Utilizați mouse-ul pentru a copia identificatorul. Poate fi necesar să lărgiți caseta de dialog pentru a o vedea pe deplin.

găsirea identificatorului dispozitivului în Xcode

deschideți aplicația Terminal și treceți la directorul în care ați salvat mai întâi.apn. Apoi tastați următoarea comandă folosind fie booted, fie identificatorul dispozitivului din Xcode în locul device_identifier: xcrun simctl push device_identifier bundle_identifier first.apn. Înlocuiți device_identifier cu identificatorul dispozitivului pe care l — ați copiat din Xcode și înlocuiți bundle_identifier cu identificatorul pachetului aplicației-Cel pe care l-ați folosit la prima configurare a proiectului. Iată un exemplu:

folosind xcrun simctl pentru a trimite o notificare push de la terminal

rulați comanda și veți vedea că notificarea push apare pe simulator!

Notificarea Push apare pe simulator

apăsați pe notificare pentru a lansa aplicația.

aplicația lansată din Notificarea push

nu este cool? :]

privind o notificare Push de bază

înainte de a trece la gestionarea notificărilor push, aruncați o privire la corpul notificării pe care ați trimis-o:

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

sarcina utilă este un dicționar JSON care conține cel puțin un element, aps, care este și un dicționar. În acest exemplu,aps conține câmpurilealertsound șilink_url. Când dispozitivul primește această notificare push, acesta afișează o vizualizare alertă cu textul ” știri de ultimă oră!”și joacă efectul de sunet standard.

link_url este de fapt un câmp personalizat. Puteți adăuga câmpuri personalizate la sarcina utilă astfel, iar acestea vor fi livrate aplicației dvs. Deoarece nu o gestionați încă în aplicație, această pereche cheie/valoare nu face nimic în prezent.

corecție: Un cititor inteligent a subliniat că documentația Apple afirmă că conținutul personalizat ,cum ar filink_url ar trebui să fie la nivel de egal laaps intrarea în dicționar, mai degrabă decât în interiorul acestuia. Încă funcționează dacă îl plasați în interior, dar vă sugerăm întotdeauna să respectați documentația Apple și să corectați acest lucru în următoarea noastră actualizare a acestui tutorial.

există opt chei încorporate pe care le puteți adăuga laaps dicționar (consultați referința oficială a cheii de încărcare utilă pentru mai multe informații):

  • alertă: Acesta poate fi un șir, ca în exemplul anterior, sau un dicționar. Ca dicționar, poate localiza textul sau poate modifica alte aspecte ale notificării.
  • insignă: acesta este un număr care se va afișa în colțul pictogramei aplicației. Puteți elimina insigna setând acest lucru la 0.
  • sunet: numele fișierului unui sunet de notificare personalizat situat în aplicație. Acestea trebuie să fie mai scurte de 30 de secunde.
  • thread-id: utilizați această cheie pentru a grupa notificările.
  • Categorie: aceasta definește categoria notificării, care este utilizată pentru a afișa acțiuni personalizate asupra notificării. Veți explora acest lucru în scurt timp.
  • content-available: prin setarea acestei taste la 1, Notificarea push devine silențioasă. Veți afla despre acest lucru în secțiunea Notificări Push silențioase de mai jos.
  • mutable-content: prin setarea acestei taste la 1, aplicația dvs. poate modifica notificarea înainte de a o afișa.
  • target-content-id: acesta este identificatorul ferestrei înaintate.

în afara acestora, puteți adăuga cât mai multe date personalizate doriți, atâta timp cât sarcina utilă nu depășește 4.096 octeți.

după ce v-ați distrat suficient încercând aceste opțiuni și trimițând notificări push către simulatorul dvs., treceți la secțiunea următoare!

gestionarea notificărilor Push

În această secțiune, veți afla cum să efectuați acțiuni atunci când aplicația dvs. primește notificări și când utilizatorii le ating.

înțelegerea a ceea ce se întâmplă când primiți o notificare Push

când aplicația dvs. primește o notificare push, iOS apelează o metodă înUIApplicationDelegate.

va trebui să gestionați o notificare diferit, în funcție de starea în care se află aplicația dvs. la primirea notificării:

  • dacă aplicația dvs. nu funcționa și utilizatorul o lansează atingând notificarea push, iOS transmite notificarea aplicației dvs. în launchOptions din application(_:didFinishLaunchingWithOptions:).
  • dacă aplicația rulează fie în prim plan, fie în fundal, sistemul notifică aplicația apelândapplication(_:didReceiveRemoteNotification:fetchCompletionHandler:). Când utilizatorul deschide aplicația atingând notificarea push, iOS poate apela din nou această metodă, astfel încât să puteți actualiza interfața de utilizare și să afișați informații relevante.

în primul caz, WenderCast va crea știrea și se va deschide direct la fila știri. În AppDelegate.swift, adăugați următorul cod la sfârșitul application(_:didFinishLaunchingWithOptions:), chiar înainte de declarația de returnare:

aceasta este ceea ce faci:

  1. verificați dacă valoarea pentru UIApplication.LaunchOptionsKey.remoteNotification există în launchOptions. Dacă da, atunci aplicația dvs. a fost lansată dintr-o notificare. Aceasta va conține sarcina utilă de notificare push pe care ați trimis-o.
  2. deoarece dicționarulaps există, creați unNewsItem cu acesta.
  3. schimbați fila selectată a controlerului tab în secțiunea știri.

pentru a testa acest lucru, trebuie să editați schema WenderCast. Mai întâi, construiți și rulați pentru a instala cel mai recent cod pe simulator. Apoi, faceți clic pe schema WenderCast și selectați Editare schemă…:

Editați schema

selectați Run din bara laterală, apoi în fila Info selectați așteptați lansarea executabilului:

alegeți așteptați lansarea executabilului

această opțiune va face depanatorul să aștepte lansarea aplicației pentru prima dată după instalare pentru a atașați-l.

Construiți și rulați. Odată ce ați terminat instalarea, trimiteți mai multe știri de ultimă oră folosind xcrun simctl ca înainte. Atingeți notificarea, iar aplicația se va deschide la știri:

App deschis la fila știri

să se ocupe de situația în care aplicația se execută atunci când o notificare push este primit, adăugați următoarele laAppDelegate:

func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}

Acest lucru încearcă să extragă AP-urile dinuserInfo obiect și, dacă are succes, creează un nou NewsItem din acesta.

deoarece iOS apelează această metodă atunci când aplicația rulează, trebuie să schimbați schema înapoi la lansarea automată a aplicației pentru a o testa. În Editorul de Scheme, sub lansare, selectați Automat.

Construiți și rulați. Păstrați aplicația care rulează în prim-plan și în fila știri. Trimiteți o altă notificare push news și urmăriți cum apare în feed:

a doua notificare push afișată în fila news

asta este! Aplicația dvs. acum poate primi Magic știri de ultimă oră așa cum se întâmplă. :]

notă: notificările Push nu sunt garantate pentru a ajunge. Acest lucru este OK pentru WenderCast, deoarece având lista completă de știri nu este prea important pentru această aplicație. În general, însă, nu ar trebui să utilizați notificările push ca singura modalitate de livrare a conținutului. În schimb, notificările push ar trebui să semnaleze că există conținut nou disponibil și să lase aplicația să descarce conținutul de la sursă (de exemplu, dintr-un API REST).

lucrul cu notificări acționabile

notificările acționabile vă permit să adăugați butoane personalizate la notificarea în sine. S-ar putea să fi observat acest lucru în notificările prin e-mail sau tweet-uri care vă permit să „răspundeți” sau să „preferați” la fața locului.

aplicația dvs. poate defini notificări acționabile atunci când vă înregistrați pentru notificări utilizând categorii. Fiecare categorie de notificare poate avea câteva acțiuni personalizate presetate.

Odată înregistrat, serverul dvs. poate seta categoria unei notificări push. Acțiunile corespunzătoare vor fi disponibile utilizatorului atunci când sunt primite.

pentru WenderCast, veți defini o categorie de știri cu o acțiune personalizată numită vizualizare. Această acțiune va permite utilizatorilor să vizualizeze articolul de știri din aplicație dacă aleg.

înregisterForPushNotifications(), introduceți următoarele chiar sub gardă și deasupra apelului la getNotificationSettings():

// 1let viewAction = UNNotificationAction( identifier: Identifiers.viewAction, title: "View", options: )// 2let newsCategory = UNNotificationCategory( identifier: Identifiers.newsCategory, actions: , intentIdentifiers: , options: )// 3UNUserNotificationCenter.current().setNotificationCategories()

trecând prin aceasta, pas cu pas:

  1. creați o nouă acțiune de notificare, cu vizualizarea titlului pe buton, care deschide aplicația în prim-plan atunci când este declanșată. Acțiunea are un identificator distinct, pe care iOS îl folosește pentru a face diferența între alte acțiuni din aceeași notificare.
  2. definiți Categoria știri, care va conține acțiunea vizualizare. Aceasta are, de asemenea, un identificator distinct pe care va trebui să îl conțină sarcina dvs. utilă pentru a specifica faptul că notificarea push aparține acestei categorii.
  3. înregistrați noua notificare acționabilă apelândsetNotificationCategories.

Construiți și rulați aplicația pentru a înregistra noile setări de notificare.

fundal app și apoi trimite următoarea sarcină utilă prinxcrun simctl utilitate:

{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

când apare notificarea, trageți în jos pe ea pentru a descoperi acțiunea vedere:

notificare Push cu acțiunea vedere dezvăluit

frumos! Atingerea vizualizării va lansa WenderCast, dar încă nu face nimic interesant. Pentru a-l face să afișeze știrea, trebuie să faceți mai multă manipulare a evenimentelor în delegat.

Gestionarea acțiunilor de notificare

ori de câte ori se declanșează o acțiune de notificare,UNUserNotificationCenter își informează delegatul. Înapoi în AppDelegate.swift, adăugați următoarea extensie de clasă în partea de jos a fișierului:

// MARK: - UNUserNotificationCenterDelegateextension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter( _ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void ) { // 1 let userInfo = response.notification.request.content.userInfo // 2 if let aps = userInfo as? , let newsItem = NewsItem.makeNewsItem(aps) { (window?.rootViewController as? UITabBarController)?.selectedIndex = 1 // 3 if response.actionIdentifier == Identifiers.viewAction, let url = URL(string: newsItem.link) { let safari = SFSafariViewController(url: url) window?.rootViewController? .present(safari, animated: true, completion: nil) } } // 4 completionHandler() }}

acesta este apelul invers pe care îl primiți atunci când aplicația se deschide din cauza unei acțiuni personalizate. S-ar putea să pară că se întâmplă multe, dar nu sunt prea multe noutăți aici:

  1. Obțineți userInfo dicționar.
  2. creați unNewsItem dinaps dicționar și navigați la fila știri.
  3. verificațiactionIdentifier. Dacă este acțiunea „vizualizare”și linkul este un URL valid, acesta afișează linkul într-un SFSafariViewController.
  4. apelați handler-ul de finalizare pe care sistemul vi-l transmite.

există un ultim bit: trebuie să setați delegatul peUNUserNotificationCenter. Adăugați această linie în partea de sus a application(_:didFinishLaunchingWithOptions:):

UNUserNotificationCenter.current().delegate = self

Construiți și rulați. Închideți din nou aplicația, apoi trimiteți o altă notificare de știri cu următoarea sarcină utilă:

{ "aps": { "alert": "New Posts!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}

trageți în jos notificarea și atingeți acțiunea de vizualizare și veți vedea că WenderCast prezintă un controler de vizualizare Safari imediat după lansare:

URL-ul link-ului de notificare deschis într-o vizualizare Safari

Felicitări, ați implementat o notificare! Trimiteți încă câteva și încercați să deschideți notificarea în moduri diferite pentru a vedea cum se comportă.

trimiterea către un dispozitiv Real

dacă nu doriți să trimiteți notificări push către un dispozitiv real sau nu aveți nevoie încă de notificări push silențioase, puteți sări peste această secțiune și puteți merge de unde să mergeți de aici?

cu toate acestea, dacă doriți să obțineți o idee despre cum să trimiteți notificări push către un dispozitiv real și să încercați silent push, atunci trebuie să faceți o configurare suplimentară. Descărcați utilitarul PushNotifications. Veți utiliza această aplicație utilitară pentru a trimite notificări către un dispozitiv real. Pentru a-l instala, Urmați instrucțiunile de sub Cum se instalează. Acordați o atenție deosebită modului de deschidere a aplicației, deoarece va trebui să modificați unele setări pentru a rula acest utilitar.

mergeți la Apple Developer Member Center și conectați-vă.

trimiterea notificărilor push necesită o cheie de autentificare. În centrul de membri, selectați Certificate, identificatori & profiluri, apoi găsiți tastele din panoul din stânga. În dreapta titlului tastelor este un buton+. Faceți clic pe acesta pentru a crea o cheie nouă.

dați cheii un nume, cum ar fi tasta de notificare Push. Sub Servicii cheie, Selectați serviciul Apple Push Notifications (APN).

exemplu apăsați tasta de notificare

Faceți clic pe Continuare și apoi înregistrați-vă pe ecranul următor pentru a crea noua cheie. Atingeți Descărcare. Fișierul descărcat va avea un nume de genul AuthKey_4SVKWF966R.p8. Urmăriți acest fișier — veți avea nevoie de el pentru a trimite notificările! Partea 4svkwf966r a numelui fișierului este ID-ul cheie. Veți avea nevoie și de asta.

piesa finală de care ai nevoie este ID-ul echipei tale. Navigați la pagina Detalii de membru a Centrului de membru pentru a o găsi.

ai reușit! Cu noua cheie, acum sunteți gata să trimiteți prima notificare push! Mai ai nevoie de un singur lucru.

rulați aplicația pe dispozitivul dvs. real și copiați jetonul dispozitivului din consola debugger și pregătiți-l.

lansați PushNotifications și parcurgeți următorii pași:

  1. sub autentificare, selectați Token.
  2. Faceți clic pe butonul Selectare P8 și selectați .fișier p8 din secțiunea anterioară.
  3. introduceți ID-ul cheie și ID-ul echipei în câmpurile relevante.
  4. sub corp, introduceți ID-ul pachetului aplicației și jetonul dispozitivului.
  5. schimbați corpul cererii pentru a arăta astfel:
{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}

Faceți clic pe butonul Trimitere din PushNotifications.

Tester de Notificări Push

ar trebui să primiți notificarea push:

prima dvs. notificare Push

Depanarea problemelor comune

iată câteva probleme pe care le-ați putea întâmpina:

  • sosesc unele notificări, dar nu toate: dacă trimiteți multe notificări push simultan, dar primiți doar câteva, nu vă temeți! Aceasta este prin design. APN menține un QoS (calitatea serviciului) coadă pentru fiecare dispozitiv. Dimensiunea acestei cozi este 1, deci dacă trimiteți mai multe notificări, ultima notificare este anulată.
  • problema conectării la Serviciul de notificare Push: o posibilitate ar putea fi că există un firewall care blochează porturile utilizate de APN-uri. Asigurați-vă că deblocați aceste porturi.

utilizarea notificărilor Push silențioase

notificările push silențioase vă pot trezi aplicația în tăcere pentru a efectua unele sarcini în fundal. WenderCast poate utiliza această caracteristică pentru a reîmprospăta în liniște lista podcast.

cu o componentă de server adecvată, acest lucru poate fi foarte eficient. Aplicația dvs. nu va trebui să facă sondaje în mod constant pentru date. Puteți să-i trimiteți o notificare push silențioasă ori de câte ori sunt disponibile date noi.

pentru a începe, selectați din nou ținta WenderCast. Acum faceți clic pe fila semnare & capabilități și adăugați capacitatea modurilor de fundal. Apoi bifați opțiunea Notificări la distanță:

verificați opțiunea Notificări la distanță pentru modurile de fundal dreptul

acum, aplicația dvs. se va trezi în fundal atunci când primește una dintre aceste notificări push.

în AppDelegate.swift, găsiți application(_:didReceiveRemoteNotification:fetchCompletionHandler:). Înlocuiți apelul laNewsItem.makeNewsItem() cu următorul text:

// 1if aps as? Int == 1 { let podcastStore = PodcastStore.sharedStore // 2 podcastStore.refreshItems { didLoadNewItems in // 3 completionHandler(didLoadNewItems ? .newData : .noData) }} else { // 4 NewsItem.makeNewsItem(aps) completionHandler(.newData)}

trecând peste codul:

  1. verificați dacăcontent-available este setat la 1. Dacă da, aceasta este o notificare silențioasă.
  2. reîmprospătați lista podcast, care este un apel de rețea asincron.
  3. când reîmprospătarea este completă, apelați handler-ul de finalizare pentru a anunța sistemul dacă aplicația a încărcat date noi.
  4. dacă nu este o notificare silențioasă, atunci este o știre, deci faceți o știre.

asigurați-vă că apelați handler-ul de finalizare cu rezultatul cinstit. Sistemul măsoară consumul bateriei și timpul pe care aplicația dvs. îl utilizează în fundal și poate accelera aplicația, dacă este necesar.

asta e tot. Pentru a testa, construi și rula, prim-plan aplicația și împingeți următoarea sarcină utilă prin utilitarul PushNotifications:

{ "aps": { "content-available": 1 }}

dacă totul merge bine, nu ar trebui să se întâmple nimic, cu excepția cazului în care un nou podcast a fost adăugat la baza de date la distanță. Pentru a confirma codul rulat conform așteptărilor, setați un punct de întrerupere în application(_:didReceiveRemoteNotification:fetchCompletionHandler:) și parcurgeți-l după trimiterea notificării.

unde să mergem de aici?

Felicitări! Ați finalizat acest tutorial și a făcut WenderCast o aplicație complet echipat cu notificări împinge!

puteți descărca proiectul finalizat folosind butonul Descărcare materiale din partea de sus sau de jos a acestui tutorial.

doriți să vă scufundați mai adânc în tot ceea ce puteți face cu notificările push, cum ar fi construirea de UIs personalizate și trimiterea de alerte critice? Notificările noastre Push prin Cartea Tutoriale vă vor învăța caracteristicile avansate ale notificărilor push.

o altă resursă este tutorialul Push Notifications pentru iOS: Rich push Notifications tutorial.

chiar dacă notificările push sunt o parte importantă a aplicațiilor moderne, este, de asemenea, foarte frecvent ca utilizatorii să refuze permisiunile pentru aplicația dvs. dacă exagerați notificările. Dar, cu un design atent, notificările push pot menține utilizatorii să revină la aplicația dvs. din nou și din nou!

clopot de notificare pentru pisici drăguțe

această pisică a primit o notificare push că cina lui era gata!

sper că v-a plăcut acest tutorial de notificări push. Dacă aveți întrebări, nu ezitați să le lăsați în forumul de discuții de mai jos.

raywenderlich.com săptămânal

raywenderlich.com buletinul informativ este cel mai simplu mod de a fi la curent cu tot ceea ce trebuie să știți ca dezvoltator mobil.

obțineți un rezumat săptămânal al tutorialelor și cursurilor noastre și primiți un curs gratuit de e-mail aprofundat ca bonus!

evaluare medie

4.9/5

adăugați o evaluare pentru acest conținut

Conectați-vă pentru a adăuga o evaluare

17 evaluări

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *