4

几年以来,我有一个 FBML 应用程序(一个小型​​ Flash 游戏),我现在正试图将其转换为 iFrame 应用程序。不幸的是,目前还没有很多 Facebook iFrame 应用程序的文档。

对于我的游戏,我需要用户的名字、图片、性别和城市。

在我的旧版本中,我有这个预加载 FQL(由 PHP 脚本创建一次):

$fql = array('info' => array('pattern' => 'facebook',
    'query' => 'SELECT first_name, sex, pic_big, current_location 
    FROM user WHERE uid={*user*}'));

$fb->api_client->admin_setAppProperties(
    array('preload_fql' => json_encode($fql)));

然后我的 FBML 应用程序脚本非常简单:

<?php

require_once('facebook.php');

define('FB_API_ID', 'XXX');
define('FB_AUTH_SECRET', 'YYY');

$fb         = new Facebook(FB_API_ID, FB_AUTH_SECRET);
$viewer_id  = $fb->require_login();
$data       = json_decode($fb->fb_params['info'], true);

$first_name = $data[0][0];
$last_name  = $data[0][2];
$female     = ($data[0][3] != 'male');
$avatar     = $data[0][3];
$city       = $data[0][4]['city'];

# and then I'd just construct flashvars attribute
# for the <fb:swf ...> tag and print it

?>

有人请提示如何为 iFrame 版本重新创建相同的脚本 - 即如何通过我的 iFrame 应用程序获取 Preload FQL 的结果

根据较早的 Facebook 博客条目,iFrame 应用程序应该可以访问 Preload FQL

谢谢!亚历克斯

4

3 回答 3

3

经过长时间的搜索,我自己的答案是 Preload FQL 结果不会发送到 iframe Facebook 应用程序。

这就是为什么Facebook 性能文档说:

“预加载 FQL 查询和多查询。

本节适用于 FBML 画布页面,但不适用于网站或 IFrame 画布页面。”

于 2011-05-11T20:19:16.703 回答
0

正如 Facebook 所说的 Preload FQL

Facebook 会将这些 FQL 查询的结果作为 JSON 编码的 POST 参数发送到您的 Canvas URL

print_r你的$_POST并查看哪个变量是“ json-encoded results ”。您使用 json_decode 将 json 转换为 php 对象

JSON 看起来像这样:{"var":"val","var":"val"}

此外,Facebook 已经有很棒的 iframe 文档。那么你可能错过了这些很棒的文档:

Facebook 文档主页

http://developers.facebook.com/docs/

验证

http://developers.facebook.com/docs/authentication/

签名请求

http://developers.facebook.com/docs/authentication/signed_request/

iFrame 画布应用

http://developers.facebook.com/docs/guides/canvas/

PHP SDK

https://github.com/facebook/php-sdk

图形 API

http://developers.facebook.com/docs/reference/api/

于 2011-05-05T12:47:58.053 回答
0

您无需调用任何 FQL 即可获得所获得的信息。对于 iFrame,您只需执行以下步骤

  1. 下载graph api的PHP SDK https://github.com/facebook/php-sdk/

  2. 创建对象并从用户授权应用程序

     $fbconfig['appid' ]  = "your application id";
    
    $fbconfig['api'   ]  = "your application api key";
    
    $fbconfig['secret']  = "your application secret key";
    
    
    
    
    try{
        include_once "facebook.php";
    }
    catch(Exception $o){
        echo '<pre>';
        print_r($o);
        echo '</pre>';
    }
    // Create our Application instance.
    $facebook = new Facebook(array(
      'appId'  => $fbconfig['appid'],
      'secret' => $fbconfig['secret'],
      'cookie' => true,
    ));
    // User location extended permission allow you to get user's current location
    $loginparams = array('canvas' => 1,'fbconnect' => 0,'req_perms' => 'user_location');
    
    $loginUrl = $facebook->getLoginUrl($loginparams);
    
    
    // We may or may not have this data based on a $_GET or $_COOKIE based session.
    // If we get a session here, it means we found a correctly signed session using
    // the Application Secret only Facebook and the Application know. We dont know
    // if it is still valid until we make an API call using the session. A session
    // can become invalid if it has already expired (should not be getting the
    // session back in this case) or if the user logged out of Facebook.
    $session = $facebook->getSession();
    
    $fbme = null;
    // Session based graph API call.
    if ($session) {
      try {
        $uid = $facebook->getUser();
        $fbme = $facebook->api('/me');
      } catch (FacebookApiException $e) {
          d($e);
      }
    }
    
    function d($d){
        echo '<pre>';
        print_r($d);
        echo '</pre>';
    }
    

    // 你可以找到这个数组中的所有数据。print_r($fbme);

有关更多详细信息,您可以按照本教程http://thinkdiff.net/facebook/php-sdk-graph-api-base-facebook-connect-tutorial/

希望对你有帮助

于 2011-05-08T21:58:52.777 回答