我在这里遵循教程: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 +教程在最有可能适用于其他人的时候不适用于我?
答案 0 :(得分:2)
我更喜欢popup方法(或Facebook内的iframe对话框),您可以使用JS SDK打开它:
常规HTML弹出式广告:FB.login
功能。 http://developers.facebook.com/docs/reference/javascript/fb.login/
iframe对话框:FB.ui
功能。 How to show the Extended Permission Dialog in FB using new Graph API?
对于您的重定向问题,我会仔细检查应用配置中的网址。
答案 1 :(得分:2)
我有这个问题。我认为你需要改变的是实际的重定向。您的登录网址是在iframe中加载的,因为这就是所有标头都可以执行的操作。 FB会检测到这一点并为您提供一个按钮以帮助突破帧。如果您想跳过它,则需要将浏览器的顶层重定向到登录URL。
而不是header('Location: ' . $loginUrl);
使用:
die("<script type='text/javascript'>top.location.href = '" . $loginUrl. "';</script>");
它非常适合我,我的应用程序具有完全无缝的登录和会话刷新。你甚至可以在一个有过期会话的ajax请求中吐出来,它会为你获得一个新的会话。