Construirea unui App iOS SDK Poke cu APNS - Partea 1

Acest tutorial este primul dintr-o serie de trei părți în care se lucrează cu funcțiile de notificare push de iOS 3.0+. Acesta va acoperi tot ce trebuie să faceți pentru a obține notificări push în aplicația dvs.: înregistrare pentru notificări, configurarea aplicației dvs. în Portalul de furnizare iOS, trimiterea notificărilor către serviciul de notificare push Push (APNS) și tratarea acestora în aplicația dvs..

În acest tutorial, vom crea o aplicație demo numită Poke. Vă va permite să "atrageți" utilizatorii prin intermediul alertelor de notificare push. Deși nu este vorba despre o utilizare mare a serviciului, acest tutorial vă va învăța despre elementele de bază ale ceea ce trebuie să știți pentru a începe.

1. Prezentați prezentarea generală

Multe aplicații desktop utilizează procese de fundal pentru a oferi în mod constant utilizatorilor informații actualizate. Aceste aplicații de fundal implementează de obicei un design de tragere - aceștia sondaj activ unui server pentru modificări ale datelor. Nu este neobișnuit ca mai multe dintre aceste programe să ruleze pe computerul dvs., conectându-vă la mai multe servere de la terțe părți.

Deși acest lucru nu poate fi o problemă pe o masă desktop cu o mulțime de memorie disponibilă și o capacitate de procesare și o sursă de alimentare nesfârșită, această metodologie devine repede o problemă pe un dispozitiv mobil cu o cantitate mult mai limitată din toate cele trei.

Cu notificări push, introduse în versiunea iOS 3.0, Apple a lucrat în jurul acestor limitări printr-un design push-based. În loc să vă forțați aplicația să rămână deschisă și să se cerceteze constant pentru actualizări ca în modelul de tragere, iOS în schimb ascultă pentru actualizări și notifică aplicația dvs. atunci când sosesc. Rezultatul este scăderea procesorului, a memoriei și a utilizării bateriei. În plus, în loc de fiecare aplicație care se conectează la propriul server, se menține o singură conexiune persistentă între dispozitivul iOS și APNS.

După cum se menționează în diagrama de mai sus, prin notificări push serverul dvs. se conectează la APNS în locul dispozitivului utilizatorului final. Atunci când datele în care un utilizator dat este interesat de modificări, serverul dvs. trimite un mesaj la APNS, care va notifica apoi utilizatorului. Utilizatorul poate deci să decidă ce să facă cu acele informații (adică să acționeze acum sau să aștepte mai târziu).

Notă: Este posibil ca aplicația dvs. să fi descărcat unele sau chiar toate datele modificate de pe serverul dvs., dar diferența este că dispozitivul utilizatorului nu a pierdut ciclurile de procesare, durata de viață a bateriei și lățimea de bandă a rețelei cerând serverului dvs. la fiecare 15 minute dacă există ceva nou. Vom primi mai multe detalii despre acest lucru într-un segment mai târziu.

Notificările Push lucrează asupra oricărei conexiuni de rețea și nu există nici un cost suplimentar (perceput de Apple) pentru dvs. ca dezvoltator pentru a adăuga această facilitate extraordinară în aplicațiile dvs..

În recent lansate Ghidul Store App, Apple a stabilit o serie de reguli privind serviciul. Majoritatea sunt bun-simț, dar ați putea dori să le aruncați o privire dacă nu ați făcut-o deja.

2. Cerințe privind fluxul de lucru și solicitarea

Pe scurt, acesta este fluxul de lucru pentru aplicațiile de bază pentru notificările push:

  1. Aplicația dvs. trimite o solicitare sistemului de operare pentru a vă înregistra pentru notificări.
  2. Sistemul de operare realizează o conexiune securizată la APNS, returnează un jet de dispozitiv și îl transmite în aplicație. Rețineți că, din motive de securitate, acest jeton nu este la fel ca și identificatorul dispozitivului (așa cum a fost tras de la proprietatea dispozitivului Identificator al UIDevice). Dacă un utilizator de la distanță își șterge iPhone-ul pierdut, de exemplu, atunci când dispozitivul se înregistrează pentru notificări din nou, acesta va primi un jet de dispozitiv diferit.
  3. Aplicația dvs. trece acest token pe serverul dvs., unde este stocat.
  4. Atunci când doriți să trimiteți o notificare push către un anumit utilizator, serverul dvs. ia un token pentru dispozitiv și îl trimite într-o încărcătură utilă formatată special către APNS.
  5. APNS transmite mesajul pe dispozitivul utilizatorului respectiv.

Vom acoperi fiecare articol din listă pe măsură ce trecem prin această serie.

Există trei cerințe de bază pentru serviciul Apple Push Notification:

Un server

După cum am menționat mai devreme, Apple nu percepe dezvoltatorilor să utilizeze acest serviciu. Cu toate acestea, serviciul nu oferă niciun fel de interfață de la care să puteți trimite notificări - trebuie să aveți propriul server care se conectează la serverele Apple și trimite împingeri și pot exista taxe de găzduire și alte taxe asociate cu acel proces.

Pentru a soluționa această problemă, au apărut o serie de servicii ale unor terțe părți. Aceste servicii acționează ca un intermediar între dvs. și APNS - se ocupă de configurarea conexiunii SSL la APNS și, de obicei, expun un API pe care îl puteți utiliza pentru a trimite mai ușor împingeri. Unii au chiar și un interfață web pe care o puteți utiliza pentru a trimite rapid notificări fără a trebui să scrieți niciun cod. În această serie, vom folosi Urban Airship, în mare parte datorită ușurinței lor de folosire și a prețurilor excelente.

Un certificat SSL

Certificatul identifică aplicația dvs. pentru serviciu și se utilizează pentru stabilirea conexiunii securizate dintre server și APNS. Aceste certificate sunt generate (gratuit) în Portalul de furnizare iOS, iar instrucțiunile despre cum se procedează astfel sunt prezentate mai jos la pasul 5.

Un profil de configurare corect configurat

Acest lucru este, de asemenea, detaliat în etapa 5 de mai jos. Hai să intrăm.

3. Creați un nou proiect iPhone în Xcode

Deschideți Xcode și creați un nou proiect iPhone. Pentru acest tutorial, vom folosi modelul simplu pentru aplicația "View based Application" pentru iPhone și vom numi proiectul nostru "Poke".

4. Înregistrați-vă notificările push

Întrucât această parte a tutorialului se va concentra mai mult pe stabilirea notificărilor de tip push push, nu vom mai petrece nici o perioadă configurând punctul nostru de vedere pentru a arăta vreun fel de informații utile încă. O să luăm asta în cea de-a treia tranșă. În schimb, hai să mergem direct în înregistrarea aplicației noastre cu serviciul de notificare Apple Push.

Pentru ca aplicația dvs. să primească notificări push, trebuie mai întâi să informeze serviciul Apple Push Notification despre tipurile de notificări pe care dorește să le primească. Aplicația dvs. poate suporta orice combinație dintre următoarele trei tipuri (listate în ordinea celor mai puțin plictisitoare):

  • insignele - afișează un număr mic, într-un cerc roșu, în partea de sus a pictogramei aplicației dvs. (ca în aplicațiile Mail și App Store de mai jos):
  • Sunete - joacă fie sunetul implicit al sistemului (așa cum se aude când apare un SMS), fie propriul sunet de marcă. Dacă intenționați să utilizați propriul dvs. sunet, acesta trebuie să fie inclus în pachetul de aplicații și trebuie să fie în unul din următoarele formate:
    • Linear PCM
    • MA4
    • μLaw
    • o lege
  • Alerte - afișează un mesaj UIAlertView cu mesajul dvs.:

    Deoarece alertele forțează utilizatorul să oprească ceea ce face pentru a interacționa cu ele, Apple recomandă ca acestea să fie utilizate cu ușurință. Nu vă abuzați de utilizatori cu alerte (sau de orice fel de notificări push, de pildă) - fie vor opri notificările push în aplicația dvs., fie vor șterge aplicația în totalitate.

Pentru această parte a tutorialului, ne vom concentra pe alerte. În ultima tranșă, vom reveni și vom experimenta celelalte două.

Să mergem mai departe și să informăm iOS că aplicația noastră dorește să primească notificări de alertă.

Deschideți PokeAppDelegate.m (sau orice alți delegați ai aplicației dvs. se întâmplă să fie numiți) și actualizați aplicația: didFinishLaunchingWithOptions: apel invers pentru a arăta astfel:

- (BOOL): aplicație (UIApplication *) didFinishLaunchingWithOptions: (NSDictionary *) launchOptions // Înregistrare pentru notificări de alertă [application registerForRemoteNotificationTypes: UIRemoteNotificationTypeAlert]; // Adăugați vizualizarea controlerului de vedere la fereastră și afișaj. [fereastra addSubview: viewController.view]; [fereastra makeKeyAndVisible]; reveniți DA; 

Rețineți că trimitem numai UIRemoteNotificationTypeAlert, deoarece tot ceea ce dorim să primim acum este alertele. Dacă doriți să primiți alte notificări, continuați și adăugați-le cu un bitwise sau:

[...] Tipuri: UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge];

Cu aceste modificări aduse delegatului nostru de aplicații, sistemul de operare va începe să se înregistreze la serviciul de notificare Apple Push. Dacă va reuși, va trimite o cerere: didRegisterForRemoteNotificationsWithDeviceToken: mesajul către delegatul aplicației dvs. cu jetonul dispozitivului; în cazul în care nu reușește, va trimite o cerere: didFailToRegisterForRemoteNotificationsWithError: mesaj. În mod ideal, ar trebui să implementați ambele.

Adăugați următoarele două metode la delegatul aplicației dvs. pentru a gestiona cele două rezultate posibile ale înregistrării:

- (void) aplicație: (UIApplication *) cerere didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken // TODO: Treceți tokenul către serverul NSLog (@ "Am înregistrat cu succes notificările push");  - (void) cerere: (UIApplication *) cererea didFailToRegisterForRemoteNotificationsWithError: (NSError *) eroare // Informați utilizatorul că înregistrarea a eșuat NSString * failureMessage = @ "A apărut o eroare în timp ce încercați să \ înregistrați pentru notificări push."; UIAlertView * failureAlert = [[UIAlertView alloc] initWithTitle: @ Mesajul "Error": failureMessage delegate: nil cancelButtonTitle: @ "OK" otherButtonTitles: nil]; [failureAlert show]; [failureAlert release]; 

Vom reveni la apelul de succes într-un segment mai târziu - deocamdată, doar loghează un mesaj rapid. Reluarea apelului nostru informează utilizatorul despre eșec. Rețineți că va fi înregistrată mereu eșuează pe iPhone Simulator, deoarece nu acceptă notificări push. Pentru a testa corect codul, trebuie să utilizați un dispozitiv real.

5. Configurați aplicația dvs. în Portalul de furnizare iOS

Acum că avem o aplicație de bază creată la sfârșitul nostru, hai să ne mutăm la partea Apple a lucrurilor și să obținem totul înființat în portalul Provisioning iOS.

Dacă sunteți deja membru plătitor al Programului pentru dezvoltatori iOS, conectați-vă la centrul de iOS Dev Center și faceți clic pe link-ul din partea dreaptă pentru a accesa portalul Provisioning iOS. Dacă nu sunteți încă membru, vă puteți înscrie pentru 99 USD aici.

Primul lucru pe care trebuie să-l faceți este să vă asigurați că ați creat deja contul dvs. cu certificatele de dezvoltator necesare și că ați adăugat dispozitivele. Instrucțiunile pentru acest lucru sunt în afara scopului acestui tutorial, dar Apple oferă un asistent de configurare, precum și videoclipuri și alte resurse, pentru a vă ajuta să parcurgeți procesul. Consultați secțiunea "Acasă" a portalului pentru mai multe informații.

Următorul pas este să creați un nou ID de aplicație. Pentru a asocia în mod corespunzător impulsurile trimise serviciului cu o aplicație specifică, Serviciul de notificare prin strike Apple face nu să sprijine aplicațiile cu un identificator de pachete "wildcard" (adică un identificator cu un asterisc de sfârșit, cum ar fi com.acme. *). Motivul este că serviciul push trebuie să fie capabil să identifice aplicația specifică căreia îi aparține împingerea, dar identificatorii cu metacaractere vă permit să creați mai multe aplicații cu același profil de provizionare. Deci, dacă aveți deja un identificator wildcard setat pentru dezvoltare, va trebui să creați unul nou pentru această aplicație pentru a permite activarea notificărilor push. Dacă ID-ul dvs. de aplicație nu utilizează un identificator al pachetului de machete, puteți trece peste acest pas.

Faceți clic pe butonul "Codul aplicației noi" din colțul din dreapta sus. Completați informațiile aplicației dvs. și faceți clic pe butonul "Trimiteți".

Găsiți ID-ul de aplicație nou creat (sau deja existent) din listă și faceți clic pe linkul "Configurare" din partea dreaptă. În pagina care apare, bifați opțiunea "Activați serviciul de notificare Apple Push".

Dacă serviciul "Enable for Apple Push Notification" nu se afișează, este posibil ca ID-ul dvs. de aplicație să nu fie configurat corect. Reveniți la pasul anterior și asigurați-vă că nu ați introdus un identificator al pachetului de coduri de tip wildcard.

Veți observa că există două certificate listate - una pentru dezvoltare și cealaltă pentru producție. APNS are servere de testare și servere de producție live. Fiecare utilizează și necesită un certificat SSL client diferit. Serverele de testare pot fi folosite pentru a trimite solicitări către aplicațiile construite cu profiluri de furnizare a dezvoltării; serverele de producție pot fi utilizate pentru a trimite împingături către aplicații construite cu profiluri de distribuție de distribuție (build-uri Ad Hoc, In House sau App Store).

Deocamdată, nu trebuie să ne îngrijorăm prea mult de această distincție, dar acest lucru va intra în joc în următoarea tranșă atunci când începem să ne înființăm contul la Urban Airship.

Întrucât vom lucra în prezent cu o dezvoltare a aplicației noastre, faceți clic pe butonul "Configure" pentru certificatul de dezvoltare Push SSL. Urmați instrucțiunile din caseta care apare pentru a crea o solicitare de semnare a certificatului, apoi faceți clic pe "Continuați".

Selectați nou CSR generat dând clic pe "Alegeți fișierul", apoi faceți clic pe "Generați" pentru a genera certificatul dvs. SSL.

Ar trebui să vedeți un contor de progres și apoi să confirmați următoarele:

Faceți clic pe "Continuați" și veți fi direcționați către pasul Descărcare și instalare. Vom afla ce să facem cu acest certificat în a doua tranșă a tutorialului, dar pentru moment continuați și faceți clic pe "Descărcați" pentru a descărca noul certificat SSL pentru clientul APNS.

Apoi, trebuie să creați un profil de provizionare pentru noul nostru ID de identificare a aplicației (sau existentă, non-wildcard).

Notă: în conformitate cu Ghidul de notificare locală și de notificare Apple, dacă ați creat deja un profil de provizionare pentru ID-ul de aplicație existent anterior pentru a permite notificările push pentru acel cod, va trebui să modificați profilul într-un anumit mod (adică să schimbați numele), astfel încât portalul să îl regenereze cu drepturile de împingere necesare.

Puteți verifica dacă un profil are drepturi corecte de împingere prin deschiderea acestuia într-un editor de text. Ar trebui să aibă o cheie de mediu aps:

Înapoi în Portalul de furnizare iOS, selectați "Provisioning" din meniul principal din stânga. Faceți clic pe fila "Dezvoltare" și selectați butonul "Profil nou". Introduceți un nume descriptiv în câmpul Nume profil și selectați certificatele pentru dezvoltatorii care pot utiliza acest profil pentru a crea aplicații. Dacă v-ați înscris ca persoană, va fi afișat un singur certificat (dvs.); dacă v-ați înscris ca o companie, s-ar putea să fie mai multe listate.

Alegeți ID-ul aplicației pe care l-ați creat în etapa anterioară (sau cea existentă) din lista de ID-uri de aplicații și selectați dispozitivele pe care doriți să le testați aplicația din lista din partea de jos. Apoi dați clic pe "Trimiteți" pentru a genera noul profil de provizionare.

După câteva minute, profilul tău va fi emis și un buton "Descărcare" va apărea în coloana Acțiuni de la dreapta (poate fi necesar să actualizezi browserul). Odată ce faceți acest lucru, faceți clic pe acesta pentru a descărca noul profil de provizionare pentru dezvoltare.

Pentru a instala profilul dvs., glisați fișierul .mobileprovision descărcat nou pe Xcode sau iTunes din doc.

6. Configurați aplicația pentru a utiliza noul profil de provizionare

Reveniți la proiectul dvs. în Xcode.

Selectați "Editați țintă activă" Poke "din meniul proiect. Navigați la fila Proprietăți și introduceți mai întâi identificatorul pachetului pe care l-ați configurat în Portalul de furnizare iOS (în cazul nostru, com.tutsplus.mobile.pushdemo).

Apoi treceți la fila Construiți. Asigurați-vă că configurația selectată în partea de sus este Debug. Găsiți secțiunea de semnare a codului în tabel. Cel de-al doilea element din listă trebuie să fie identitatea codului de semnare și ar trebui să aibă un element copil, orice dispozitiv iOS. Această setare indică Xcode care profil de provizionare să utilizeze pentru a semna aplicația atunci când a construit pentru un dispozitiv iOS. Valoarea pentru orice Dispozitiv iOS trebuie să fie "iPhone Developer (în prezent se potrivește cu" Developer de iPhone: [Numele tău] "[...])."

Această opțiune selectată în prezent este Selectorul automat de profil. Se analizează ID-ul pachetului de aplicații (pe care l-am setat în ultima etapă) și găsește profilul de provizionare cu un ID de identificare (sau cu un cod de identificare cu potrivire potrivită). În timp ce puteți să scăpați probabil, lăsând această opțiune așa cum este, de obicei, încerc să minimalizez sursele potențiale de erori de semnare a codului, selectând profilul pe care vreau să îl folosesc manual.

Si asta e! Ați creat cu succes un nou proiect iPhone și l-ați configurat pentru notificări push! În următoarea tranșă, vom începe să vorbim despre partea de server a lucrurilor și despre modul în care să trimiteți într-adevăr un impuls aplicației dvs. nou create.

Cod