NetHq Blog


A rossz legjobb kritikája az, ha megmutatjuk, hogyan kell jobban csinálni.

Facebookra fejlesztés - Az alapok

Nightvis, 2012.05.04 02:56
Először is azt kell kitalálnunk, hogy tulajdonképpen mit is akarunk kezdeni a facebook-kal. A lehetőségek tárháza kimeríthetetlen, jelen cikkben nem is térünk ki ezekre, csak az alap műveletekkel foglalkozunk. A szerver igény praktikusan jelentéktelen, mondhatjuk úgy, hogy egy interneten lógó valamilyen szerver oldali programozási nyelvvel rendelkező szerver megfelel.

Előszó

Először is azt kell kitalálnunk, hogy tulajdonképpen mit is akarunk kezdeni a facebook-kal. A lehetőségek tárháza kimeríthetetlen, jelen cikkben nem is térünk ki ezekre, csak az alap műveletekkel foglalkozunk. A szerver igény praktikusan jelentéktelen, mondhatjuk úgy, hogy egy interneten lógó valamilyen szerver oldali programozási nyelvvel rendelkező szerver megfelel. Itt a példákban PHP-t fogok használni, de e mellett több nyelvhez is van hivatalos facebook csomag. A PHP csomag itt. Be kell regisztrálnunk magunkat a facebookra ha még nem tettük volna meg, majd a developer alkalmazást fel kell vennünk a profilunkba. Nem igazán találtam meg, hogy tulajdonképpen mi a fenének, de e nélkül nem tudunk elindulni az biztos. Ha idáig eljutottunk akkor beregisztrálhatjuk a készülőben lévő alkalmazásunkat a facebookra. Ez a developers oldalon a Set Up New Application gomb megnyomásával történik. Az itt beállítandó dolgok bármikor módosíthatóak. Az indulásról infók itt. Az application id-re, api kulcsra és a titkos kulcsra menet közben majd sokszor szükségünk lesz. Egyelőre nem akarok belebonyolódni, hogy mi micsoda, a lényegeseket majd megnézzük menet közben.  

Első lépések

A facebook platform egy az oAuth-tól kölcsönzött hitelesítési és azonosítási eljárást használ egy meglehetősen nyakatekert megvalósítással. Ha építünk egy alkalmazást akkor valószínűleg hozzá kell majd férnünk a user adataihoz aki használja a szolgáltatásunkat. Általánosságban az API-k ezt egy név, jelszó párossal oldják meg. A facebook api nem engedi, hogy a név, jelszó páros ismeretében megoldjuk magunk a dolgainkat, hanem rákényszeríti a usert, hogy ő maga tegye meg a szükséges lépéseket. Az api két féle alkalmazást különböztet meg. Az egyik az asztali alkalmazások a másik a webes alkalmazások. A webes alkalmazások futhatnak külön domainen, külön szolgáltatás részeként (mint az én esetemben is), illetve futhatnak a facebook-on belül. Akár így, akár úgy amikor a user feltelepíti az asztali alkalmazást vagy beregisztrál a webes alkalmazásunkra akkor a usert át kell irányítanunk a facebookra ahol bejelentkezik és hitelesíti az alkalmazást. Ez az első hitelesítés még nem biztosít különösebb hozzáférést, azt a második hitelesítési eljárás során kaphatjuk meg.  

A hitelesítés menete

Tehát a userünk jelzi a szolgáltatásunknak, hogy szeretné a facebook fiókját is használni. Esetemben ez úgy történt, hogy a felhasználó rákattintott egy linkre, hogy hozzáadja a közösségi fiókjaihoz a facebook fiókját is. A linkre kattintva a következő php file hívódik meg:  

require('/eleresi/ut/facebook.php'); //a letöltött client library 
$app_id = '12345678901'; //az alkalmazás regisztrációjakor kapott app id
$api_key = '0123456789acaeec9a2a84d2db4e9ffa'; //a kapott api key
$secret = 'akapotttitikoskulcs';
$facebook = new Facebook($api_key, $secret);
$facebookUserId = $facebook->require_login();

  Ennek a kódnak a hatására ha a user nincs bejelentkezve a facebook-ra akkor átirányítódik oda, hogy jelentkezzen be és hitelesítse az alkalmazásunkat. Amikor a user belép és hitelesíti az alkalmazásunkat akkor az alkalmazás regisztrációjakor megadott post authorize callback url felé a facebook kiküld egy rakat adatot. A teljes lista itt. Fontos megjegyzés, hogy a user nem irányítódik erre az url-re hanem a háttérben adatok küldődnek ki erre az url-re. Ez az idáig eljutott félőrült fejlesztő számára azt jelenti, hogy az adatok érkezésekor nincs aktív session. A facebook api doksi eléggé hosszasan tárgyalja ezt a témát de aktív munkamenet híján nem sok hasznát látom ennek a lépésnek, érkezik egy rakat adat az alkalmazásunkhoz amivel nem lehet mit kezdeni. Köszönjük 3 napot eltöltöttünk vele mire kiderült, hogy a hiba nem az én készülékemben van. A következő lépés az, hogy a facebook a usert átirányítja az alkalmazás regisztrációjában megadott post authorize redirect url-re. Itt már tényleges átirányítás van, így ha a usert visszairányíttatjuk magunkhoz és lesz egy aktív sessionunk. Hogy tovább szaporítsák a szerencsétlen fejlesztő idegrohamainak a számát az átirányítás során ugyancsak kapunk egy rakat haszontalan adatot. Köszönjük szépen újabb 3 napot eltöltöttünk vele, hogy kiderüljön semmire sem kellenek az adatok. Viszont a visszairányítás után rendelkezni fogunk ét adattal amit nem árt elmentenünk mondjuk egy adatbázisba. Itt él az előző munkamenetünk, tehát a saját oldalunkról be tudjuk azonosítani, hogy melyik userhez tartozik a két hőn áhított adat.  

require('/eleresi/ut/facebook.php'); 
$app_id = '12345678901';
$api_key = '0123456789acaeec9a2a84d2db4e9ffa';
$secret = 'akapotttitikoskulcs';
$facebook = new Facebook($api_key, $secret);
$facebookUserId = $facebook->require_login();
//itt már nem lesz átirányítás hiszen a user épp az előbb lépett be
$uid = $facebook->get_loggedin_user();
$session_key = $facebook->api_client->session_key;

  Alap esetben egy olyan $session_keyt fogunk kapni ami egy órán keresztül él, illetve addig amíg a user ki nem jelentkezik. Nekem azonban egy olyan session kulcs kellett ami nem jár le, hanem örökké használható. A facebook egyszer csak megszüntette a végtelen session kulcsokat és helyette bevezetett egy új hozzáférési rendszert. Sajnos ehhez sincs túl sok információ a weben, így ez újabb 4 napot vett el az életemből. Itt jutunk el a második hitelesítés témájához, amiről a következő részben lesz szó.

Tartalom közösségi megosztása: