Erlang rusă dp_push - erlang bibliotecă pentru a lucra cu serviciul de notificare push Apple

dp_push - bibliotecă Erlang pentru colaborarea cu serviciul de notificare Apple Push

O bibliotecă pentru colaborarea cu APN-urile de la dieselpuppet.com.

APN - ce este și de ce?

Să presupunem că aveți un proiect cu o arhitectură client-server, în care aplicația de pe dispozitivul iOS acționează ca client. Serverul dvs. minunat comunică perfect cu aplicația dvs. minunată în timp ce este activă.

Dar aici utilizatorul a lansat o altă aplicație sau a pus dispozitivul în buzunar sau a fost undeva unde nu există WiFi. Și, din păcate, conexiunea dintre server și aplicația dvs. nu mai există. Iar serverul trebuie să furnizeze date sau să notifice despre un eveniment.

În loc să trimiteți un mesaj către o aplicație client, serverul dvs. poate trimite un mesaj APN-urilor. APN-urile îl vor livra dispozitivului iOS, dacă este disponibil. Aparatul va afișa mesajul utilizatorului și, la cererea acestuia, va activa aplicația dorită.

Cum funcționează

APN-urile au o documentație bună. unde sunt descrise toate detaliile.

Recomand, de asemenea, un tutore minunat. care oferă un început bun. Și, în special, dezvăluie un subiect dificil de certificate :)

dp_push - ce este și de ce?

Deoarece avem nevoie să lucrăm cu APN în aproape fiecare proiect, sa decis să o unificăm și să o transformăm într-o bibliotecă separată Diesel Puppet push. Nu există secrete secrete în această funcție funcțională, trebuie doar să o implementați cu exactitate. Prin urmare, am pus cu îndrăzneală modulul în open source, sub licența MIT.

Implementarea este destul de simplă și este o aplicație OTP de 4 module.

dp_push.erl Modulul principal, rulează aplicația și este front-end la funcțiile bibliotecii.

dp_push_sup.erl Supervizor, rulează dp_push_sender și asigură că nu se încadrează :)

dp_push_sender.erl gen_server, execută cereri de trimitere și funcționează cu serviciul de feedback (despre care mai jos).

dp_push_apns.erl Conține un set de funcții de nivel scăzut pentru generarea de pachete, configurarea unei conexiuni SSL, trimiterea de date.

Aplicația necesită câteva setări. Ele sunt, totuși, destul de evidente - unde merge, ce certificat de utilizat și setări pentru serviciul de feedback (despre care mai jos).

jet de dispozitiv

Simbolul are o dimensiune de 32 de octeți și arată astfel:

Lucrul cu el în Erlang, trebuie să rețineți că nu este vorba de un șir și nu de un binar. Nu este corect:

Acesta este un număr de 16 biți. Așa este:

serviciul de feedback

Totul este mai complicat decât părea la început :) Se întâmplă că aplicația dvs. a fost eliminată de pe dispozitiv și veți continua să îi trimiteți mesaje. Apple nu doreste cu adevarat ca APN-urile sa fie incarcate cu mesaje inutile, asa ca sunt solicitate sa acceseze periodic serviciul de feedback. primiți o listă de astfel de dispozitive de acolo, păstrați lista la domiciliu și nu le trimiteți mesaje.

Această funcție este, de asemenea, implementată în dp_push_sender.erl. Modulul analizează serviciul de feedback la o anumită frecvență și stochează jetoanele în DETS.

Dacă credeți că un pic, este încă un pic mai complicat decât primul gând :) Se întâmplă că după ce aplicația a fost scoasă din dispozitiv, acesta a fost găsit-l din nou :) Deci, trebuie să existe o modalitate de a elimina un jeton din dets. Metoda corespunzătoare este furnizată în biblioteca API.

Încă mai am mock_feedback_service.erl. Acesta este un stub care a fost folosit pentru depanarea lucrului cu serviciul de feedback. Pentru o astfel de depanare, instalarea și eliminarea constantă a aplicației de pe dispozitiv este foarte incomodă.

Cum să conectați dp_push la un proiect și cum să îl folosiți

Ne conectăm ca o dependență în rebar.config:

Și noi numim metode API:

Cum se poate dezvolta dp_push mai departe

Cererile pentru APN pot fi de două tipuri: simple și integrate. În cazul unor solicitări simple, serviciul nu răspunde, ci răspunsuri complexe. Puteți lua aceste răspunsuri și, de exemplu, rezolvați cumva erori.

Puteți face dp_push nu o bibliotecă de conectare, ci un server separat (TCP și / sau Web). În acest caz, poate servi mai multe aplicații simultan. Cu toate acestea, va trebui să aibă certificate pentru fiecare aplicație și să selecteze certificatul cerut atunci când trimite un mesaj.

Puteți adăuga o colecție de statistici și instrumente de monitorizare.