如何使用新的Facebook PHP客户端库获得类似require_login()的功能?

如何使用新的Facebook PHP客户端库获得类似require_login()的功能?,php,facebook,Php,Facebook,你好。我的任务是制作一个Facebook游戏,但我对Facebook的开发还不熟悉,所以我才刚刚开始。如果这对人们来说是不需要动脑筋的,那么就提前道歉 我在跟踪网站上看到的所有例子时遇到了麻烦,当我试图阅读时,我总是遇到Facebook文档中缺失的页面。我认为这是因为Facebook上有一个新版本的PHP客户端库,我发现的所有东西都是指旧客户端 例如,我在许多示例中看到了这段代码: require 'facebook.php'; $facebook = new Facebook( array(

你好。我的任务是制作一个Facebook游戏,但我对Facebook的开发还不熟悉,所以我才刚刚开始。如果这对人们来说是不需要动脑筋的,那么就提前道歉

我在跟踪网站上看到的所有例子时遇到了麻烦,当我试图阅读时,我总是遇到Facebook文档中缺失的页面。我认为这是因为Facebook上有一个新版本的PHP客户端库,我发现的所有东西都是指旧客户端

例如,我在许多示例中看到了这段代码:

require 'facebook.php';
$facebook = new Facebook( array( 'appId' => '(id)', 'secret' => '(secret)' ) );
$facebook_account = $facebook->require_login();
…但是在facebook.php文件中提供的客户端库中没有“require_login()”

据我所知,Facebook最近似乎推出了一些新的开发系统,但我没有看到任何处理该系统的示例代码。新的库附带了一个“example.php”文件,但它似乎只用于向其他站点添加“使用Facebook登录”功能(我假设的是“Facebook连接”站点的意思),而不仅仅是在Facebook本身的画布页面上运行应用程序

具体来说,我需要做的是让用户访问Facebook内的应用程序页面,让它打开允许他们授权应用程序的对话框,让它显示在他们的“游戏”页面中,然后让它将用户的相关信息传递给我,这样我就可以开始创建游戏了。但我似乎找不到任何教程或示例来说明如何使用新的库来实现这一点。看起来这应该很简单,但我遇到了障碍


还是我遗漏了一些关于PHP客户端库的信息?应该要求_login()为我工作,而我的实现出现了一些问题,例如客户端库错误或其他问题?我昨天从GitHub下载了,所以我很确定我有最新版本的代码,但也许我下载了错误的“facebook.php”文件…?

git hub上的新php脚本是facebooks api的包装器,我想我也看到了fql的代码,所以谁知道呢。论坛现在关闭了,当我经过的时候IRC已经死了。我一直在寻找与您要求的调用->api(\me)授权相同的解决方案。如果我没记错的话,因为脚本扩展了另一个类,所以可以尝试使用反射类/函数来查看可用的方法。希望一些可靠的文档即将发布!如果你解决了这个问题,请告诉我。(很抱歉,我的手机格式不好)

好吧,我已经找到了使用新的PHP SDK授权应用程序的解决方案。你可以查看我的博客帖子


简而言之,您需要获得一个经过身份验证的会话,然后可以调用函数来获取登录用户的ID。在这种情况下,您将从Graph API调用“/me”路径。

以下是对旧的
require\u login
函数的重写。它完全复制了旧的功能

function facebook_require_login($required_permissions = '')
{
  global $facebook; // NOTE GLOBAL FACEBOOK OBJECT, MUST ALREADY BE INSTANTIATED

  $user = $facebook->get_loggedin_user();
  $has_permissions = true;

  if ($required_permissions) {
    $facebook->require_frame();
    $permissions = array_map('trim', explode(',', $required_permissions));
    foreach ($permissions as $permission) {
      if (!in_array($permission, $facebook->ext_perms)) {
        $has_permissions = false;
        break;
      }
    }
  }

  if ($user && $has_permissions) return $user;

  $facebook->redirect(
    $facebook->get_login_url(Facebook::current_url(), $facebook->in_frame(),
                         $required_permissions));
}

phpfour解决方案是唯一正确的解决方案,因为它利用了github的新PHPSDK库

最好的解决方案是编辑新的facebook.php并添加require_login()函数(这样所有依赖它的现有页面都可以保持不变)

公共功能需要登录(){
如果(!$this->getSession()){
$url=$this->getLoginUrl(数组(
“画布”=>1,
“fbconnect”=>0
));
echo“top.location.href='$url';”;
}
其他的
返回$this->getUser();
}

感谢您的反馈。我发现开发一个Facebook应用程序是一个复杂的过程,看起来非常简单。缺乏清晰的例子只是增加了混乱。这看起来像是我要找的信息。我会尝试一下,看看是否能达到我的目的。感谢您花时间发布这篇文章!我的荣幸-我被困了两天!!谢谢现在我有两条路要走。我刚刚实现了这一条。虽然来自phpfour的一个也有效,但这一个是替代品的下降。谢谢,达斯汀。
public function require_login(){
  if ( !$this->getSession() ) {
    $url = $this->getLoginUrl( array(
       'canvas' => 1,
       'fbconnect' => 0
     ));
    echo "<script type='text/javascript'>top.location.href = '$url';</script>";
  }
 else
  return $this->getUser();
}