php sdk 和 javascript 完全相反,正如 Julian H. Lam 所说,实际上它们是为一起使用而构建的。
在php sdk 文档中,您可以找到以下内容:
与 Facebook SDK for JavaScript 集成
与 Facebook SDK for JavaScript 结合使用,PHP SDK 可以在客户端和服务器之间无缝共享用户会话。如果用户使用 Facebook 登录并授权您的应用程序,JavaScript SDK 可以获取用户会话并将其保存在 cookie 中,PHP SDK 无需开发人员的任何干预即可读取该 cookie。
要启用此功能,请确保在嵌入和初始化 JS SDK 时,将传递给 FB.init() 的对象的状态和 cookie 参数都设置为 true。
通过使用基本逻辑,这很有意义,在客户端,您可以创建侦听器来检索用户状态(如果他已登录,如果他已授予权限,如果他已注销),在服务器端执行此类操作不会一点意义都没有。
所以我对你的建议是使用 Javascript SDK 来处理用户事件,就像我之前提到的那样,并处理来自用户操作的响应,比如当用户点赞或使用提要对话分享帖子时等。使用 php SDK,您只需检查您是否有有效用户,因为在您使用 javascript SDK 处理登录过程后,您正在为客户端和服务器端共享相同的 cookie,如果您这样做$fb_id = $facebook->getUser()
(当然在初始化 PHP SDK 之后),你会得到用户的 facebook id,现在你知道你有一个有效的用户,你可以使用 PHP SDK 来查询关于用户的信息,代表用户发帖等。
下面是正确加载带有 cookie 支持的 javascript SDK 的示例:
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
// init the FB JS SDK
FB.init({
appId : 'YOUR_APP_ID', // App ID from the app dashboard
channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel file for x-domain comms
status : true, // Check Facebook Login status
xfbml : true, // Look for social plugins on the page
cookie : true
});
// Additional initialization code such as adding Event Listeners goes here
};
// Load the SDK asynchronously
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/all.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
</script>
这是服务器端的一个简单代码,只是为了启发您:
require_once("facebook.php");
$config = array();
$config[‘appId’] = 'YOUR_APP_ID';
$config[‘secret’] = 'YOUR_APP_SECRET';
$config[‘fileUpload’] = false; // optional
$facebook = new Facebook($config);
try {
$user_profile = $facebook->api('/me','GET');
$user_name = $user_profile['name'];
$user_email = $user_profile['email'];
} catch(FacebookApiException $e) {
// If the user is logged out, you can have a
// user ID even though the access token is invalid.
// In this case, we'll get an exception, so we'll
// just ask the user to login again here.
}
PS:此服务器端代码,仅在用户已授予范围电子邮件权限时才有效