如何在不使用“转到Facebook.com”徽标的情况下允许我的Facebook游戏用户授权应用程序?

时间:2011-03-15 13:46:20

标签: php session facebook

我在这里遵循教程:http://net.tutsplus.com/tutorials/php/how-to-authenticate-your-users-with-facebook-connect/

但我无法通过允许用户授权我的应用的第一步。该应用位于http://apps.facebook.com/freelancergame/,而画布网址为http://freelancer.xylotgames.com

我通过PHP检查是否存在与用户的活动会话。如果它不存在,我将用户重定向到登录URL。以下是页面顶部的代码:

// Facebook library
require 'src/facebook.php';

// Create our Application instance
$facebook = new Facebook(array(
    'appId'  => 'xxxxxx',
    'secret' => 'xxxxxxxxxxxx',
    'cookie' => true,
));

// Let's see if we have an active session
$session = $facebook->getSession();

$me = null;
// Session based API call.
if (!empty($session)) {
    // Active session; let's try getting the user ID and info
    try {
        $uid = $facebook->getUser();
        $me = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        error_log($e);
    }
    $logoutUrl = $facebook->getLogoutUrl();
    print_r($user);
    exit();
} else {
    // There's no active session; let's generate one
    $loginUrl = $facebook->getLoginUrl();
    header('Location: ' . $loginUrl);
}

问题是,在访问http://apps.facebook.com/freelancergame/时,我被带到一个带有蓝色Facebook徽标和“转到Facebook.com”链接的屏幕。

但是,如果我允许用​​户点击与Facebook连接的链接,那么:

<a href="<?php echo $loginUrl ?>" target="_top">Connect</a>

...“允许/不允许”对话框直接显示在Facebook的网站上,但是如果我点击“允许”或“不允许”,它会直接进入我的画布页面(http:// freelancer.xylotgames.com)而不是嵌入式应用页面,我更喜欢。

我怎样才能让它发挥作用?我看到使用弹出窗口而不是重定向的应用/游戏。这是首选吗?如果是这样,我该怎么做?为什么NetTuts +教程在最有可能适用于其他人的时候不适用于我?

2 个答案:

答案 0 :(得分:2)

我更喜欢popup方法(或Facebook内的iframe对话框),您可以使用JS SDK打开它:

对于您的重定向问题,我会仔细检查应用配置中的网址。

答案 1 :(得分:2)

我有这个问题。我认为你需要改变的是实际的重定向。您的登录网址是在iframe中加载的,因为这就是所有标头都可以执行的操作。 FB会检测到这一点并为您提供一个按钮以帮助突破帧。如果您想跳过它,则需要将浏览器的顶层重定向到登录URL。

而不是header('Location: ' . $loginUrl);使用:

die("<script type='text/javascript'>top.location.href = '" . $loginUrl. "';</script>");

它非常适合我,我的应用程序具有完全无缝的登录和会话刷新。你甚至可以在一个有过期会话的ajax请求中吐出来,它会为你获得一个新的会话。