Corona SDK Lucrul cu graficul Facebook API - Partea 2

Bine ați venit înapoi la cea de-a doua serie de tutoriale din două părți despre construirea aplicațiilor sociale native pentru dispozitive mobile. În partea a 1-a, am creat o aplicație de bază care a folosit biblioteca de autentificare Facebook pentru a permite unui utilizator să se conecteze cu acreditările făcute pe Facebook. Rezultatul a fost accesul la datele utilizatorului de pe Facebook printr-un jeton de sesiune pe care l-am primit când sa conectat utilizatorul.

Odată ce avem acest jeton, API-ul Facebook Graph poate fi folosit pentru a crea o varietate de aplicații. Când un utilizator final se conectează, aplicația este responsabilă pentru transmiterea permisiunilor necesare care sunt necesare pentru ca acesta să ruleze. Utilizatorul poate fie să permită sau să nu permită aplicației să acceseze datele sale din cadrul Facebook. Acest lucru încearcă cel puțin să notifice utilizatorul final ce ar putea face o aplicație cu datele sale în speranța de a crea mai multă transparență.

Pentru partea a 2-a din acest tutorial, vom modifica aplicația noastră mobilă Facebook originală (care, desigur, nu a făcut prea multe), pentru a crea un colaj pur al imaginilor de profil ale prietenilor unui utilizator. API-ul FB Graph se bazează în primul rând pe obiecte JSON, astfel încât vom face uz de o bibliotecă de împachetare Lua JSON care poate fi găsită pe schimbul de coduri Ansca Mobile.

Pentru a începe, trebuie să adăugăm următoarea includere a bibliotecii în partea de sus a fișierului principal.lua:

 necesită ( "Json")

Din nou, această bibliotecă poate fi găsită în schimbul de coduri de pe anscamobile.com. Odată inclus, avem acces la metodele bibliotecii printr-o variabilă intitulată Json. Mai multe despre asta mai târziu.

Înainte de metoda ascultătorilor, ascultam evenimente care au fost concediate din caseta de conectare Facebook care se afișa la apăsarea butonului din ecranul central. După o conectare reușită, am accesat un obiect de date personale prin API pentru a dovedi că conexiunea a avut succes. Acest cod poate fi văzut aici:

 dacă ("login" == event.phase) apoi facebook.request ("me") sfârșitul

Întrucât aplicația noastră este în primul rând preocupată de accesarea imaginilor profilului prietenului nostru, vom modifica codul pentru a extrage obiectul de date "Prieteni" din API în același mod. Vom înlocui fragmentul de cod de mai sus cu următoarele:

 dacă ("login" == event.phase) apoi facebook.request ("me / friends", "GET") sfârșitul

Documentația pentru acest obiect "Prieteni" poate fi vizualizată aici în docul FB Graph API al utilizatorului (Consultați conexiunile -> prieteni). Veți observa că trecem un parametru secundar de "GET" la metoda facebook.request. Deoarece API-ul Graph este mai mult sau mai puțin compatibil cu "REST", tipul de solicitare pe care îl facem foarte mult. "GET" este, prin natura sa, o solicitare de citire, astfel că "primim" date despre prietenii utilizatorului conectat. Dacă efectuăm un apel bazat pe scriere pe API (de ex. Postarea pe un zid), am putea trece de la "PUT" pentru a specifica că.

Odată ce metoda "facebook.request" este apelată, ascultătorul va captura evenimente noi care vor fi trase la revenirea apelului API. În partea 1 a tutorialului, am urmărit pentru un tip de eveniment de "solicitare" pentru a determina că acesta a fost un rezultat al apelului API după conectare. Codul a fost următorul:

 elseif ("request" == event.type), apoi răspuns local = răspunsul event.response (răspuns) final

Acest lucru a primit în principal răspunsul din API-ul Facebook și a fost tipărit. Aceasta este partea din codul pe care o vom înlocui pentru a ne crea colajul de fotografii de profil prieten. Codul de mai sus va fi înlocuit cu următorul text:

 elseif ("request" == event.type), apoi răspuns local = Json.Decode (event.response) local data = răspuns.data funcție locală showImage (eveniment) event.target.alpha = 0 event.target.xScale = 0.25 eveniment .target.yScale = 0.25 transition.to (event.target, alpha = 1.0, xScale = 1, yScale = 1) pentru i = 1, # data does not display.loadRemoteImage ("http: //graph.facebook. com / "? date [i] .id?" / imagine "," GET ", showImage," prieten "? i?" .png ", system.TemporaryDirectory, math.random (0, display.contentWidth) întâmplătoare (0, display.contentHeight)) sfârșitul final

Să o rupem în așa fel încât să înțelegem fiecare parte:

 răspuns local = Json.Decode (event.response) local data = response.data

În această parte a codului pur și simplu decodificăm răspunsul JSON pe care îl primim de la API-ul Facebook. Răspunsul este stocat ca atribut al evenimentului eveniment (event.response) care este transmis ascultătorului. Atunci când obiectul JSON este decodificat, acesta este tradus într-un obiect Lua pe care îl stocăm într-o variabilă numită "răspuns". Deoarece cheia elementului rădăcină al acestui obiect JSON este "date", odată ce este decodificată, suntem capabili să cercetăm în jos obiectul apelând "response.data".

 funcția locală showImage (eveniment) event.target.alpha = 0 event.target.xScale = 0.25 event.target.yScale = 0.25 transition.to (event.target, alpha = 1.0, xScale = 1, yScale = 1

Această metodă este un apel de apel care va fi tras la încărcarea unei imagini de la o adresă URL. Următoarea secțiune va descrie cum se întâmplă acest lucru. Odată ce această metodă este declanșată, se așteaptă ca un obiect de eveniment care va conține obiectul afișat al imaginii unui profil în interiorul atributului "target" (event.target). După cum puteți vedea, setăm atributele de bază ale "alpha" la 0 sau invizibil, precum și scara la 1/4 dimensiunea originală a imaginii.

Metoda transition.to acceptă doi parametri: primul fiind obiectul pe care va acționa și al doilea obiect de masă al parametrilor și valorilor la care se trece. Efectul acestei tranziții va fi să afișați treptat imaginea și să o modificați pentru a merge de la 1/4 la dimensiunea sa și invizibilă pentru dimensiunile sale complete (scale = 1) și vizibile (alpha = 1). Acest lucru face ca un om sărac, bazat pe matematică, efect de animație pe fiecare imagine, așa cum este afișat. Acest lucru va avea mai multă sens când aplicația este rulată.

 pentru i = 1, # date nu display.loadRemoteImage ("http://graph.facebook.com/"? date [i] .id? "/ picture", "GET", showImage, "prieten"? .png ", sistem.TemporaryDirectory, math.random (0, display.contentWidth), math.random (0, display.contentHeight)) sfârșit

Deoarece obiectul "Prieteni" pe care îl primim din API-ul Faceobok este o matrice, trebuie să-l bifăm pentru a obține ID-ul fiecărui utilizator. Acest cod este folosit pentru a construi o adresă URL care va servi o versiune pătrată mică a imaginii de profil a unui utilizator. Utilizând metoda display.loadRemoteImage, putem apela o adresă URL și se va ocupa de descărcarea datelor de imagine și de stocarea lor locală înainte de a fi afișate pe ecran.

Primul parametru pe care îl trecem:

 "Http://graph.facebook.com/"? date [i] .id? "/imagine"

este URL-ul construit care include identitatea Facebook unică a utilizatorului (date [i] .id).

 "GET", showImage, "prieten"? I? ".png", sistem.TemporaryDirectory,

Următorii 4 parametri sunt:
- tipul cererii, "GET" în acest caz
- metoda de afișare inversă de tip showImage care va fi lansată atunci când imaginea este descărcată.
- un nume unic pentru fișierul imagine pe care îl descărcăm
- un spațiu temporar pentru a stoca imaginile descărcate accesate prin metoda "system.TemporaryDirectory"

În cele din urmă, ultimii doi parametri pe care le transmitem sunt coordonatele X și Y pe care dorim să le afișăm la:

 math.random (0, display.contentWidth), math.random (0, display.contentHeight)

Deoarece creăm un colaj, putem plasa imaginile aleatoriu pe tot ecranul. Apelul "math.random" are o valoare de pornire și o valoare de sfârșit și returnează un număr aleator între 2. În acest caz, avem nevoie de numere aleatorii care sunt oriunde între 0 și lățimea / înălțimea ecranului. Orice mai mult sau mai puțin și imaginea nu ar fi vizibilă.

Și acolo avem! Verificați rezultatul de mai jos:

Fețele au fost neclare pentru a proteja pe cei nevinovați. :)

Ca o notă finală, biblioteca API Facebook pentru Corona nu va funcționa corect în Simulatorul Corona. Cel mai simplu mod de a testa aplicația pe care am construit-o în tutorial va fi să o rulați în simulatorul iOS real care vine cu Xcode.

Cod