2011-01-01 3 views
0

У меня есть небольшой card game на Facebook (и несколько русских социальных сетей), который получает идентификатор пользователя, имя и аватар через старый REST API.Использование Facebook Graph API из мобильного приложения

Теперь я пытаюсь разработать ту же игру, что и мобильное приложение, с Flex Hero SDK для Android и iPhone. Это означает, что я не могу использовать собственные SDK для этих платформ, но должен использовать OAuth as descibed at Facebook page.

alt text

Я пытаюсь написать короткий PHP скрипт, который будет возвращать информацию о пользователе, как XML в мобильном приложении. Мой сценарий может получить маркер уже:

<?php 
define('FB_API_ID', 'XXX'); 
define('FB_AUTH_SECRET', 'XXX'); 
$code = @$_GET['code']; 

# this is just a link for me, for development puposes 
if (!isset($code)) { 
     $str = 'https://graph.facebook.com/oauth/authorize?client_id=' . FB_API_ID . 
       '&redirect_uri=http://preferans.de/facebook/mobile.php&display=touch'; 
     print "<html><body><a href=\"$str\">$str</a></body></html>"; 
     exit(); 
} 

$req = 'https://graph.facebook.com/oauth/access_token?client_id=' . FB_API_ID . 
'&redirect_uri=http://preferans.de/facebook/mobile.php&client_secret=' . FB_AUTH_SECRET . 
'&code=' . $code; 

$ch = curl_init($req); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
$page = curl_exec($ch); 
if (curl_errno($ch)) 
     exit('Download failed'); 
curl_close($ch); 

parse_str($page, $data); 

#header('Content-Type: text/xml; charset=utf-8'); 
#print('<?xml version="1.0"? ><app>'); 
print_r($data); 
#print('</app>'); 
?> 

Это хорошо работает, и я получаю обратно фишку:

Array 
(
    [access_token] => 262578703638|2.OwBuoa2fT5Zp_yo2hFUadA__.3600.1294904800-587287941|ycUNaHVxa_8mvenB9JB1FH3DcAA 
    [expires] => 6697 
) 

Но как я могу использовать этот маркер в настоящее время, чтобы найти имя и аватар пользователя и особенно I «Смутно, как я получу идентификатор текущего пользователя?

При использовании REST API, я всегда знал, текущий идентификатор пользователя, позвонив $userid=$fb->require_login()

ответ

0

Смотрите документацию по адресу: http://developers.facebook.com/docs/api

Используйте завиток запросу: https://graph.facebook.com/me/?access_token=XXXXXXX

"/ меня" получит вам всю необходимую информацию.

$req = 'https://graph.facebook.com/me/?access_token=' . $access_token; 
$ch = curl_init($req); 
curl_setopt($ch, CURLOPT_HEADER, FALSE); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
$page = curl_exec($ch); 
if (curl_errno($ch)) 
     exit('Download failed'); 
curl_close($ch); 

$user_object = json_decode($page); 

var_dump($user_object); 

Вернется что-то вроде:

object(stdClass)#1 (20) { 
    ["id"]=> 
    string(10) "1017193642" 
    ["name"]=> 
    string(19) "Lance Scott Rushing" 
    ["first_name"]=> 
    string(5) "Lance" 
    ["middle_name"]=> 
    string(5) "Scott" 
    ["last_name"]=> 
    string(7) "Rushing" 
    ["link"]=> 
    string(36) "http://www.facebook.com/LanceRushing" 
    ..... 
+0

Спасибо, что это хорошо работает. Я просто удивляюсь, почему мой аватар не входит в число возвращаемых данных, и если я могу уменьшить возвращаемые данные до нужных мне вещей (в настоящее время он возвращает слишком много данных, включая мою биографию, местоположение и т. Д.) –

+0

вы можете запросить https: //graph.facebook.com/me/picture?access_token=XXXXX Это приведет к перенаправлению на изображение пользователя 302. –

0

Поскольку я не могу добавлять комментарии Отвечу здесь.

Для получения фото профиля необходимо указать https://graph.facebook.com/ID/picture. Если вы хотите указать только определенные поля, вы можете указать его следующим образом: https://graph.facebook.com/ID?fields=uid,name,etc&access_token=token

В качестве альтернативы вы можете использовать PHP SDK для авторизации и входа в систему пользователя, чтобы вам не нужно было вводить токен вручную - это упростило бы ваш код , Например, вместо каждого запроса cURL вы могли бы просто сделать $facebook->api(request); Хорошее описание и пример здесь http://apps.facebook.com/graphapidemo/.

+0

Спасибо за информацию! К сожалению, после некоторых мыслей я не могу понять, как использовать этот API для моего мобильного приложения Flex, потому что мне нужно передать строку в мобильное приложение. Но все это происходит в браузере на мобильном телефоне. То есть Я не вижу способ передать данные из браузера в приложение :-( –

+0

На самом деле я могу использовать StageWebView и слушать его изменения местоположения: http://blogs.adobe.com/flashplatform/tag/stagewebview –

Смежные вопросы