Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从移动应用程序使用Facebook Graph API_Facebook_Facebook Graph Api_Oauth 2.0 - Fatal编程技术网

从移动应用程序使用Facebook Graph API

从移动应用程序使用Facebook Graph API,facebook,facebook-graph-api,oauth-2.0,Facebook,Facebook Graph Api,Oauth 2.0,我在Facebook(还有一些俄罗斯社交网络)有一个小网站,它通过旧的RESTAPI获取用户的id、名字和头像 现在,我正在尝试开发一款与Android和iPhone版的移动应用程序相同的游戏,该应用程序使用FlexHero SDK。这意味着我不能在这些平台上使用本机SDK,但必须使用 我正在尝试编写一个简短的PHP脚本,它将以XML形式将用户信息返回到我的移动应用程序中。我的脚本已经可以获取令牌: <?php define('FB_API_ID', 'XXX'); define('FB

我在Facebook(还有一些俄罗斯社交网络)有一个小网站,它通过旧的RESTAPI获取用户的id、名字和头像

现在,我正在尝试开发一款与Android和iPhone版的移动应用程序相同的游戏,该应用程序使用FlexHero SDK。这意味着我不能在这些平台上使用本机SDK,但必须使用

我正在尝试编写一个简短的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>');
?>
但是我现在如何使用这个令牌来查找用户的姓名和头像,尤其是我对如何获取当前用户id感到困惑

在使用REST API时,我始终通过调用
$userid=$fb->require\u login()

了解当前用户id,请参阅以下文档:

使用curl请求:

“/me”将为您提供所需的所有信息

$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"
  .....

由于我不能添加评论,我将在这里回答

为了获得个人资料图片,您需要请求
https://graph.facebook.com/ID/picture
。如果您只需要特定字段,可以这样指定:
https://graph.facebook.com/ID?fields=uid,名称等&access\u token=token


或者,您可以使用PHPSDK授权并登录用户,这样您就不必手动获取令牌-这将简化您的代码。例如,您可以只执行
$facebook->api(请求),而不是每个cURL请求这里有一个很好的描述和示例。

谢谢,这很有效。我只是想知道,为什么我的头像不在返回的数据中,如果我可以将返回的数据减少到我需要的东西(目前它返回了太多的数据,包括我的个人简历、位置等),你可以请求这将302重定向到用户的图片。谢谢你的信息!不幸的是,经过一番思考后,我看不出如何将此API用于我的移动Flex应用程序,因为我需要向我的移动应用程序传递一个字符串。但所有这些都发生在手机的浏览器中。也就是说,我看不到将数据从浏览器传递到应用程序的方法:-(哦,实际上我可以使用StageWebView并监听其位置更改:
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"
  .....