Ameddig 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_key
t 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)
Hú ha nem lesz könnyű dolgom… most próbálgatok valamit alkotni, de ingyenes szerveren nem sokra megyek a php-sdk-val a CURL miatt, mert nem támogatott… 🙁
Azonkívül, hogy menő topik és pénzt lehet vele keresni, mint fejlesztő, de mire jó? Minek kell applikáció a facséra?
Nem tudok felmenni az oldalamra!! Bejelentkezek,mutatja az értesitéseket,és onnan semmi!! Mit tegyek?