Alkalmazás engedélyek (permissions) – Fejlesszünk saját Facebook alkalmazást

Közzétéve: 2012. február 05.

Miután elszántuk magunkat, hogy saját Facebook alkalmazást készítünk, jó lenne, ha nem csak az egyébként is könnyen kiolvasható user id megjelenítésére használnák, hanem felruháznánk valamilyen egyéb hasznos funkcionalitással. Lássunk is hozzá.

A jelenlegi bejegyzés a korábban ismertetett kódokra épül, így ha valaki ezzel nem rendelkezik, innen letöltheti.

Facebook PHP SDK

Spóroljunk magunknak egy kis időt és energiát, hívjuk segítségül a hivatalos facebook php sdk-t (bár sok esetben pont ez nehezíti meg a dolgunkat 🙂 ), ami a benne található metódusok segítségével lényegesen felgyorsítja a fejlesztési folyamatot.

Konkrétan a base_facebook.php és facebook.php fileokra van szükségünk. Miután ezeket letöltöttük, másoljuk őket a korábban létrehozott index.php állományunkkal egy mappába.

Ezt követően nyissuk meg az index.php-t szerkesztésre és includeoljuk a facebook.php-t a kódunk elejére, hogy az ebben, illetve az általa meghívott base_facebook.php-ban található eljárásokat az index.php-n belül is el tudjuk érni.

A módosított kódunk így fog kinézni:

[php]
<?php
ob_start(); //csak probléma megelőzés miatt
require "facebook.php";
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode(‘.’, $signed_request, 2);
$data=json_decode(base64_decode(strtr($payload, ‘-_’, ‘+/’)),true);
$has_liked = $data["page"]["liked"];
[/php]

Térjünk vissza egy kicsit a php sdk oldalára, és nézzük meg, hogy a Usage rész alatt (kb az oldal közepén) milyen információkat osztottak meg velünk a készítők.

Találhatunk egy nagyon hasznos kódrészletet, aminek a segítségével elérhetjük az alkalmazásunkat aktuálisan használó user publikus, az appnak a telepítési folyamat során átadott adatait.

A felhasználó adatai

Keressük meg az index.php fileunkban a következő kódsort: echo $data[„user_id”];
Ezt kitörölhetjük, vagy kikommentelhetjük, a helyére pedig illesszük be a következőket:

[php]
$facebook = new Facebook(array(
‘appId’  => ‘APP ID’, //ide a saját APP ID-t írjuk
‘secret’ => ‘APP SECRET’, //ide a saját APP SECRET-et írjuk
));
$user = $facebook->getUser();
if ($user) {
try {
$user_profile = $facebook->api(‘/me’);
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}
[/php]

Ez a kód nagyjából annyit csinál, hogy az alkalmazásunk azonosítóit felhasználva először a $user változóba kiolvassa a felhasználó egyedi azonosítóját, majd a $user_profile-ba a felhasználóról elérhető adatokat (amennyiben ez lehetséges).

Nézzük meg, hogy valóban így történik-e, írassuk ki a $user_profile változó tartalmát:

[php]
echo "<pre>";
print_r($user_profile);
echo "</pre>";
[/php]

Ezt a 3 sor kódot írjuk be a korábbi folytatásaként az index.php-be, majd mentsük el a filet. Frissítsük a szerveren, ahová korábban feltöltöttük (, és aminek az elérését az alkalmazásunkban az App Tab URL mezőben megadtuk). Ne felejtsük el feltölteni a base_facebook.php és facebook.php állományokat sem, hiszen ezeket már az index.php is használja.
Ha ezzel készen vagyunk, nézzük meg a tabot, ahová az alkalmazásunkat telepítettük. Valami hasonlót kell látnunk:

(ez felhasználónként eltérhet, attól függően, hogy ki mennyi adatot teszt nyilvánossá magáról)

Az itt látható információk már igazán hasznosak lehetnek, pl abban az esetben, ha perszonalizálni szeretnénk az alkalmazásunkat. A felhasználó teljes nevének kiíratásához használhatjuk a következő kódsort:

[php]echo $user_profile[‘name’];[/php]

Amennyiben csak a keresztnevet szeretnénk megjeleníteni ez a következőre módosul:

[php]echo $user_profile[‘first_name’];[/php]

A felhasználó email címe

Sokszor találkozunk olyan nyereményjátékkal, ami bár rendkívül ötletes és még külön alkalmazást is készítettek hozzá, gyakran kimarad egy nagyon fontos dolog: a felhasználó egy olyan adatának elkérése, aminek a segítségével később fel lehet venni vele a kapcsolatot, amennyiben ő lett a szerencsés nyertes. Hiszen a Facebook Promotions Guidelines egyértelműen kimondja, hogy nem használhatjuk ilyen esetekben a beépített funkciókat.

A mi példánkban a felhasználó email címe lesz ez az adat. Ennek az eléréséhez a következő sort kell módosítanunk az alkalmazásunkban:

[php]$scope = ""; //jelen esetben üres marad[/php]

Itt kell megadni az email cím eléréséhez szükséges engedélyt:

[php]$scope = "email";[/php]

Mivel az alkalmazást már korábban engedélyeztük, az új permission teszteléséhez előbb el kell távolítanunk a profilunkból, majd újra ellátogatni a tabra. Az új telepítési folyamat során már látni fogjuk, hogy bekerült a folyamatba az email cím is.

Ha mindent jól csináltunk, a korábban beillesztett print_r($user_profile); kimenete egy új elemmel bővült, ami nem más, mint az email. Ha csak ezt szeretnénk kiíratni, használjuk az echo $user_profile[’email’]; kódsort.

A teljes átalakított kódunk tehát a következőképpen fog kinézni:

[php]
<?php
ob_start();
require "facebook.php";
$signed_request = $_REQUEST["signed_request"];
list($encoded_sig, $payload) = explode(‘.’, $signed_request, 2);
$data = json_decode(base64_decode(strtr($payload, ‘-_’, ‘+/’)), true);
$has_liked = $data["page"]["liked"];

if($has_liked){
//az adott látogató rajongó -> kérjük el a megfelelő engedélyeket
if (!$data["user_id"]) {
//még nem engedélyezte -> irányítsuk át az engedélyező képernyőre
$app_id = "0123456789"; //ide kerül a létrehozott alkalmazás ID-ja
$redirect_url = urlencode("https://www.facebook.com/…"); //ide kerül a tab URL
$scope = "email";
$auth_url = "http://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . $redirect_url . "&scope=" . $scope;
echo("<script> top.location.href=’" . $auth_url . "'</script>");
} else {
//már engedélyezte -> írjuk ki az egyedi azonosítóját
//echo $data["user_id"];
$facebook = new Facebook(array(
‘appId’ => ‘0123456789’, //saját APP ID
‘secret’ => ‘afghjzthrgef5467zhgvwg5rn6’, // saját APP SECRET
));

$user = $facebook->getUser();

if ($user) {
try {
$user_profile = $facebook->api(‘/me’);
} catch (FacebookApiException $e) {
error_log($e);
$user = null;
}
}

echo "<pre>";
print_r($user_profile);
echo "</pre>";

echo $user_profile[’email’];
}
} else {
//az adott látogató nem rajongó -> kérjük meg, hogy előbb legyen az
?>
Üdvözöllek Idegen! Lépj be rajongóink közé.
<?php
}
?>
[/php]

Hogy milyen további adatokhoz és tevékenységekhez kérhetünk a felhasználóktól engedélyeket, megtalálhatjuk ebben a listában: Permissons
Ezek közül párat a következő részben ki is fogunk próbálni. Ha valaki picit előre szeretne dolgozni, ismerkedni a lehetőségekkel, próbálja meg kiolvasni a felhasználó születésnapját, illetve a szülővárosát (user_birthday, user_hometown).

A jelenlegi leírásban található kódok természetesen most is letölthetőek egyben, a következő hivatkozásra kattintva: Saját Facebook alkalmazás – Permissions

A sorozat további részei:

Fejlesszünk saját Facebook alkalmazást – AlapokAz okleveles alkalmazások lelke: publish_stream