Acest tutorial este al doilea dintr-o serie de trei părți în care se lucrează cu funcțiile de notificare prin push a iOS 3.0+. Se concentrează pe modul de trimitere a notificărilor către Serviciul de notificare prin strike (APNS) de la Apple prin Airbird Urban. Această tranșă se bazează pe lucrurile pe care le-am înființat în ultima, așa că veți dori să mergeți și să citiți prima dată pentru a obține viteza dacă nu ați făcut-o deja.
Fișierul de certificat SSL pe care l-ați descărcat de pe Portalul de furnizare iOS din prima parte a acestei serii este în format DER și conține doar certificatul - nu conține cheia dvs. privată. Urban Airship, totuși, are nevoie atât de certificatul SSL, cât și de cheia privată încărcat într-un singur fișier PKCS # 12, pentru a comunica în mod corespunzător cu serviciul de notificare Apple Push. Deci, avem ceva de făcut. Lucky pentru noi, utilitarul Keychain Access face de fapt totul pentru noi cu doar câteva clicuri de mouse.
Primul lucru pe care trebuie să-l faceți, dacă nu ați făcut-o deja, este să faceți dublu clic pe certificatul descărcat (acesta ar trebui să fie numit aps_developer_identity.cer) în Finder și să faceți clic pe "Add" pentru ao adăuga în lanțul de chei. Notă: Trebuie să adăugați certificatul la la fel cheie de chei care conține cheile publice și private generate de cererea de semnare a certificatului în tranșa anterioară.
După ce certificatul a fost adăugat în lanțul dvs. de chei, selectați "Certificatele mele" din lista de categorii din partea stângă și găsiți certificatul nou adăugat. Verificați dacă are un triunghi de dezvăluire lângă el. Dacă nu, înseamnă că accesul la cheie nu poate găsi cheia privată care se potrivește cu certificatul din actualul breloc - asigurați-vă că ați adăugat certificatul la cheia de breloc corectă.
Faceți clic dreapta pe certificat și selectați "Export" Apple Services Push Services [identificator] "..." Când apare foaia de export, verificați dacă este selectat "Exchange Personal Information (.p12)" din meniul pop-up Format fișier. numele și apăsați pe "Salvați".
Apare un prompt, cerând o parolă pentru fișier. Deși Urban Airship acceptă fișierele PKCS # 12 protejate prin parolă, recomandă să lăsați necompletat - doar apăsați pe "OK".
Vezi, nu era prea dificil! Acum suntem gata să mergem la Urban Airship și să punem totul în mișcare.
După cum sa menționat în tranșele anterioare, vom utiliza serviciul Urban Airship pentru a comunica cu serviciul de notificare Apple Push și pentru a trimite împinge la aplicația noastră demo.
Pentru a începe să utilizați serviciul Urban Airship, va trebui să creați un cont cu aceștia. Planul lor indie vă oferă un milion de mesaje / lună gratuit (din această scriere). Completați formularul și faceți clic pe "Înscrieți-vă". Apoi faceți clic pe adresa URL din e-mailul de confirmare trimis pentru a vă activa contul.
După ce v-ați conectat, accesați formularul "Adăugați o aplicație nouă" și introduceți numele aplicației. După cum am menționat anterior, Apple utilizează două grupuri separate de servere push pentru dezvoltare și producție - fiecare necesită să generați un certificat SSL separat în portalul de furnizare. Din acest motiv, Urban Airship vă recomandă să creați aplicații separate pentru dezvoltarea și producția lor - astfel puteți continua să testați notificările în curs de dezvoltare fără a întrerupe serviciile push către utilizatorii care au descărcat aplicația dvs. din App Store.
Deoarece lucrăm cu o aplicație de dezvoltare a aplicației noastre, vom folosi certificatul de dezvoltare SSL. Modul de aplicare trebuie să fie setat la "Dezvoltare - conectare la servere de testare". în consecinţă.
Bifați caseta care afișează "Sprijin notificări de notificare" și un număr de câmpuri noi ar trebui adăugate la formular. Singurele domenii pe care le vom face griji sunt cele trei sub titlul "Apple". Faceți clic pe butonul "Alegeți fișierul" și găsiți fișierul PKCS # 12 pe care l-ați exportat anterior din Access Keychain. Dacă ați decis să introduceți o parolă pentru fișier, scrieți-o în caseta "Parola certificatului". De asemenea, trebuie să bifăm caseta "Modul de depanare prin depanare" pentru a ne ajuta să depanem orice problemă. (Cei curiosi pot face clic pe link pentru a afla mai multe despre ceea ce este si ce face).
Cu toate informațiile introduse, faceți clic pe "Creați aplicația".
După ce ați creat aplicația, ar trebui să fiți redirecționat (ă) la pagina cu detalii a aplicației.
Cele două lucruri pe care vreau să le spun înainte de a trece la API sunt cheia de aplicație și secretul aplicației. Pentru o explicație amândouă, vă refer la documentația Urban Airship:
Fiecare aplicație are o cheie de aplicație și un secret de aplicație și un secret de aplicație (cunoscut anterior ca aplicația Push Secret). Informațiile sunt furnizate în Authentication HTTP Basic (cu cheia ca nume de utilizator și secret ca parolă), întotdeauna peste conexiunea noastră HTTPS. Secretul aplicației trebuie să fie inclus în aplicația de efectuare a înregistrării, iar secretul principal ar trebui să fie folosit numai pe un server la distanță și nu este inclus în aplicație.
Practic, vom folosi cheia aplicației și secretul ca nume de utilizator și parolă, atunci când comunicăm cu API-ul Urban Airship din aplicația noastră. Având în vedere acest lucru, să acoperim rapid apelul de înregistrare a dispozitivului API.
Dacă derulați în jos pagina de documentație API pe care tocmai o priveam, primul element pe care l-ați întâlnit este secțiunea Înregistrare. Citiți rapid primele patru paragrafe și veți vedea că trebuie să trimitem o solicitare HTTP PUT către https://go.urbanairship.com/api/device_tokens/
Să ne întoarcem la proiectul nostru Xcode și să adăugăm un cod pentru ca aplicația noastră să facă exact asta!
Dacă nu este deja deschis, deschideți proiectul Xcode pe care l-am creat în prima parte a acestei serii.
Primul lucru pe care trebuie să-l facem este ca aplicația noastră să treacă simbolul pe care l-am primit de la APNS înapoi la Urban Airship. Dacă vă reamintim din prima parte, am adăugat o metodă de apel invocare a notificării push către delegatul nostru de aplicații care arată astfel:
- (void) aplicație: (UIApplication *) cerere didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken // TODO: Treceți tokenul către serverul NSLog (@ "Am înregistrat cu succes notificările push");
Acum, vom implementa elementul TODO.
Dacă vă uitați la metoda de returnare a apelurilor de mai sus, veți observa că jetonul dispozitivului revine ca o instanță a NSData și nu NSString. Dacă vedeți metoda de apel invers în documentația Apple, veți vedea de ce:
Tokenul este un tip de date opac, deoarece aceasta este forma pe care furnizorul trebuie să o supună serverelor APS atunci când trimite o notificare către un dispozitiv. Serverele APS necesită un format binar din motive de performanță.
Ce înseamnă toate acestea? Urban Airship are nevoie de token ca un șir hexazecimal, dar sistemul de operare îl distribuie ca date brute, așa că trebuie să facem niște conversii. Deși nu este cel mai bun mod de a face acest lucru, vom folosi metoda NSData -description pentru a converti datele într-un șir hexazecimal:
// Convertiți tokenul la un șir hexagonal și asigurați-vă că toate capacele sunt NSMutableString * tokenString = [NSMutableString stringWithString: [[deviceToken description] uppercaseString]]; [tokenString replaceOccurrencesOfString: @ "<" withString:@"" options:0 range:NSMakeRange(0, tokenString.length)]; [tokenString replaceOccurrencesOfString:@">"cu opțiunea String: @" ": intervalul 0: NSMakeRange (0, tokenString.length)]; [tokenString replaceOccurrencesOfString: @" "cuString: @" "opțiuni: 0 interval: NSMakeRange (0, tokenString.length)];
Apoi, trebuie să construim adresa URL, așa cum este descrisă în documentația API:
// Creați NSURL pentru cererea NSString * urlFormat = @ "https://go.urbanairship.com/api/device_tokens/%@"; NSURL * registrationURL = [NSURL URLWithString: [NSString șirWithFormat: urlFormat, tokenString]];
Apoi trebuie să instanțiăm un NSMutableURLRequest. Noi folosim a mutabil deoarece trebuie să modificăm metoda PTP a cererii la PUT.
// Creați cererea de înregistrare NSMutableURLRequest * registrationRequest = [[NSMutableURLRequest alocare] initWithURL: registrationURL]; [registrationRequest setHTTPMethod: @ "PUT"];
În cele din urmă, trebuie să creați o instanță a NSURLConnection pentru a trimite efectiv datele către server:
// Și declanșați conexiunea NSURLConnection * connection = [NSURLConnection connectionWithRequest: registrationRequest delegate: self]; [start conexiune];
Veți observa că noi stabilim delegatul conexiunii la sine. Deoarece NSURLRequest nu are suport integrat pentru furnizarea de acreditări de bază de autentificare HTTP (fără a cădea în codare de bază 64), dorim să știm când conexiunea primește o provocare de autentificare, astfel încât să putem furniza numele de utilizator și parola. NSURLConnection are o metodă delegată -connection: didReceiveAuthenticationChallenge: pe care acum trebuie să o implementăm și.
- (void) conexiune: (NSURLConnection *) conexiune didReceiveAuthenticationChallenge: (NSURLAuthenticationChallenge *) provocare // Verificați pentru eșecurile anterioare dacă ([provocare previousFailureCount]> 0) // Am încercat deja - ceva nu este în neregulă cu NSLog @ "Certificatele Urban Airship invalide"); întoarcere; // Trimiteți acreditările Urban Airship NSURLCredential * airshipCredentials = [NSURL CredentialCredentialWithUser: @ "" parola:@" "persistență: NSURLCredentialPersistenceNone]; [[expeditor provocare] useCredential: airshipCredentials forAuthenticationChallenge: provocare];
Nu uitați să introduceți cheia aplicației Urban Airship și secretul acolo unde este indicat. Le puteți prelua din pagina cu detalii a aplicației.
De asemenea, ar trebui să implementați alte metode delegate NSURLConnection, cum ar fi -connection: didFailWithError: și -connection: didReceiveResponse :, al doilea din care puteți utiliza pentru a verifica codul de răspuns față de cel așteptat din documentația Urban Airship. Dar voi lăsa asta ca un exercițiu pentru cititor.
Uau! OK, deci avem acum aplicația noastră care transmite mesajul push primit de la APNS pe serverele Urban Airship. Acum suntem pregătiți să instalați aplicația pe dispozitivul nostru și încercați să trimiteți câteva notificări!
Dacă ați trecut deja prin întreaga primă parte a seriei, totul ar trebui să fie deja configurat în mod corect în Xcode pentru a construi aplicația și ao instala pe iPhone.
Conectați-vă iPhone-ul la computer. Dacă aceasta este prima dată când ați făcut acest lucru cu Xcode deschis, ar trebui să solicitați dacă doriți să utilizați dispozitivul pentru dezvoltare - dacă da, faceți clic pe "Da". Dați-i câteva secunde după ce conectați-l pentru a fi recunoscut în mod corespunzător de către Xcode.
Verificați dacă SDK-ul activ este setat la "Dispozitiv" în fereastra de meniu Prezentare generală și că Configurația activă este setată la "Debug". Apoi apăsați butonul verde "Build and Run" din bara de instrumente.
În câteva minute, Xcode ar trebui să construiască aplicația și să o instaleze pe iPhone. Asigurați-vă că sunteți conectat (ă) la o rețea de un anumit fel și lăsați aplicația să ruleze câteva minute, astfel încât să aibă timp să se înregistreze la APNS și să trimită tokenul dispozitivului la Urban Airship.
După două tutoriale, suntem in cele din urma gata să trimită o notificare push către aplicația noastră!
Du-te înapoi la site-ul Urban Airship și conectați-vă (dacă nu sunteți încă logat). Navigați la pagina aplicației dvs. și selectați "Statistici" din meniul din partea stângă.
Lângă butonul "Device Tokens" din dreapta, ar trebui să existe un număr 1. Dacă nu există, reveniți și verificați dacă ați introdus corect datele dvs. de acreditare. De asemenea, ați putea dori să implementați mai multe metode delegate NSURLConnection pentru a verifica dacă cererea este primită în mod corespunzător de serverele Urban Airship.
După verificarea faptului că dispozitivul nostru sa înregistrat corect, vom trimite acum un impuls. Selectați "Push Notifications" din meniul din stânga și apoi selectați "Device Tokens" din submeniul său. În dreapta, un șir lung hexazecimal ar trebui să apară sub "Device Token". Copiați acest șir în clipboard și apoi selectați "Test Push Notifications" din stânga.
Asigurați-vă că vă aflați în fila iOS și inserați jetonul dispozitivului în câmpul "Jet de dispozitiv". În câmpul "Alertă", introduceți un text. După ce verificați dacă aplicația dvs. nu rulează pe telefon, apăsați pe butonul "Trimiteți-l!"
În câteva minute, alerta ar trebui să apară pe telefon. Felicitări! Tocmai ai trimis prima notificare de împingere! Dați-mi voie să știu în comentariile dvs. dacă aveți probleme cu funcționarea.
În ultima parte a acestei serii, vom explora unele dintre celelalte funcții de împingere afișate aici, cum ar fi insigne și sunete, precum și unele dintre cele mai avansate funcții API Urban Airship.