首先对不起我的问题,我几乎到处检查过,但我没有正确的答案。有很多文档和教程,但在开发中它的变化。但是,我的问题是,我有一个粉丝页面,其中有一个与我的应用程序集成的选项卡。
我只是想检查会话用户在这里并且他们已经喜欢之前或者如果他们已经喜欢我的页面我想更新会话并获得新的访问令牌然后将它们重定向到我的流畅画布页面(这是我的第二个问题顺便说一句。因为登陆页面位于810px页面。之后他们喜欢页面刷新自己及其在固定区域中的开放试。)
我是否必须将FB.login按钮放入我的目标网页,或者在应用页面加载时更好地询问用户权限。
我的文件夹架构如:
-appfolder
--tab - (landing page in fixed page)
--app - (app page in fluid canvas)
--css
--img
--js
--php-sdk
--index.php (check everything here and redirect in here with login attributes)
--config.php
--fbaccess.php
--fbin.php
--fbout.php
着陆页代码:
<?php
require 'php-sdk/facebook.php';
$app_id = 'xxx';
$app_secret = 'xxx';
// Set
$app_namespace = 'hangisienmeshur';
$app_url = 'https://apps.facebook.com/' . $app_namespace . '/';
$scope = 'email,publish_actions';
// Init the Facebook SDK
$facebook = new Facebook(array(
'appId' => $app_id,
'secret' => $app_secret,
));
// Get the current user
$user = $facebook->getUser();
?>
<!DOCTYPE html>
<html xmlns:fb="http://ogp.me/ns/fb#" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tropicana Main</title>
<link href="css/normalize.css" rel="stylesheet" type="text/css" />
<link href="css/main.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="fb-root"></div>
<script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'xxx', // App ID
channelUrl : 'http://www.xxx.com/app/xx/channel.php', // Channel File
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
// Additional initialization code here
FB.Event.subscribe('edge.create',
function(response) {
window.location.href = 'https://apps.facebook.com/xxx/';
}
);
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));
</script>
<div id="mainfoto">
<div id="fb_button" class="myClass rtl">
<fb:like href="http://www.facebook.com/xxx" width="100" layout="button_count" show_faces="false" send="false"></fb:like>
</div>
</div>
</body>
</html>
答案 0 :(得分:0)
尽量避免在Facebook应用中使用会话。 Facebook在iframe中加载您的网页,由于安全限制,某些浏览器(特别是Safari)无法正常使用。
Facebook建议等待权限,直到有必要为止。您可以在canvas-load上请求权限。最好的用法是等待用户执行需要其信息的操作(例如,单击“注册”按钮)。
为了你的工作流程,我会建议这种方法。
在目标网页上,使用signed request来判断用户是否喜欢您的网页。
$signed = parse_signed_request($_REQUEST['signed_request'], 'YOUR-APP-SECRET');
if ($signed['page']['liked'] == 1) {
$fan = true;
} else {
$fan = false;
}
if ($fan)
{
echo "window.location.href = 'https://apps.facebook.com/xxx/';";
}
else
{
echo "<p>Please like the page.</p>";
}
(source)
这会将喜欢您网页的用户重定向到画布页面。没有的用户会看到“请像页面一样”的消息。
您不需要订阅'edge.create',因为点击“赞”按钮会强制页面重新加载,然后您的代码将执行重定向,因为用户现在喜欢该页面。