Facebookra fejlesztés 1

facebookAmeddig a facebok api-val nem találkoztam addig abban a tévhitben ringattam magam, hogy az api-k arra szolgálnak, hogy megkönnyítsék a fejlesztők életét. Rá kellett jönnöm, hogy ez csak részben vagy részben sem igaz. Jó jó, hogy a facebook az egy platform, no de ennyire?

A fecebook tonnányi anyaggal várja a fejlesztőket a facebook fejlesztői oldalán, de sajnos a dokumentáció formátumának a wiki-t választották ami azt jelenti, hogy sehogy sincs struktúrálva. Ez persze megkönnyíti a keresését főleg az ismerkedési fázisban.

A facebook platformra való fejlesztést az is megnehezíti, hogy az API-t időnként változtatják, de a dokumentáció időnként elmarad ennek követésétől. Ezért általánosságban minden fejlesztő azt mondja, hogy a blogokból és a fórumokból többre jut mint a hivatalos dokumentációból, azonban itt meg az a baj, hogy az API módosulások miatt nem biztos, hogy a fél éve leírt példák ma is működőképesek.

Előkészületek

Először is azt kell kitalálnunk, hogy tulajdonképpen mit is akarunk ezdeni a facebook-kal. Nálam egyszerű volt az igény, a készülő közösségi mashup-hoz kellett integrálni a facebook-ot, úgy hogy regisztráció után az emberek a saját alkalmazásunkból tudjanak facebook-ra üzeneteket küldeni és fogadni. Mondhatjuk úgy, hogy egy facebook status klienst kellett készítenem.

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ő hitelesítés

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.

Az első 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:

<?php
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.

<?php
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 ehyelett 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ó.

Könyvajánló facebook apiról: Facebook API Developers Guide (Firstpress)

3 thoughts on “Facebookra fejlesztés 1

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.