原文链接:Using official Facebook PHP SDK
这篇文章通过facebook的PHP SDK登录unity3D游戏,进行facebook消息发布列子。
获得PHP的SDK,配置facebook的一个测试环境
如果你还没有下载最新SDK代码,可通过https://github.com/facebook/facebook-php-sdk下载。要运行下面的例子代码,你还需要配置正确的Application ID和密码。然后创建一个fb-skd-test.php的文件,在主文件目录下,拷贝如下的代码。确保appID和密码正确。
'YOUR_APP_ID', 'secret' => 'YOUR_APP_SECRET' )); // delete session upon logout redirection if (isset($_GET['logout']) && $_GET['logout'] == 'true') { session_destroy(); // clears session cookie header('Location: ' . $self_url); // redirects back to the same page } // get facebook user $user = $facebook->getUser(); if ($user) { try { // try to access Facebook Graph to get user info $user_profile = $facebook->api('/me'); } catch (FacebookApiException $e) { error_log($e); $user = null; } } if ($user) { // set custom logout url if user is logged in $logoutUrl = $facebook->getLogoutUrl(array( 'next'=> $self_url . '?logout=true' )); } else { // get log in url if user is NOT logged in $loginUrl = $facebook->getLoginUrl(); } ?> ';" > ';" >
这里不需多说,注释已经非常详细了。 这段代码可以让用户通过facebook账号登录、登出。
修改php文件结合前面JavaScript SDK的例子的那个
这部分涉及内容需要你了解Authorising user with Facebook JS SKD (client-side) and Integration JavaScript and Unity3d code。 先前的例子,我们创建了文件名:fb-sdk-test.html文件,现在,我们动手把他通过使用file_get_contents()函数整合到PHP脚本中。 编辑fb-sdk-test.php文件修改如下代码
';" > ';" >
打开fb-sdk-test.html 文件,定位到如下代码:
input type="button" id="fb-login" class="hidden" value="Log in with Facebook"/>
<input type=”button” id=”fb-login” class=”hidden” value=”Log in with Facebook”/>
替换为如下代码:
input type="button" id="fb-login" class="hidden" value="Log in with Facebook (JS)"/>
<input type=”button” id=”fb-login” class=”hidden” value=”Log in with Facebook (JS)”/>
如果你现在要测试程序,第一次登陆截图如下:
通过PHP登录按钮出现了。 但是点击通过JS登录按钮,你被重定向到如下认证页面。即PHP登录按钮还在页面。 刷新页面,原因是英文先前JavaScript的PHP保存了用户信息在Session。 一般来说,你也不需要2个按钮同时出现,我们目前是测试。
获得faceBook账号的朋友列表和访问令牌access_token
通常情况下,可以获得默认facebook账号的基本用户信息,以及该用户的朋友列表信息。 为了实现这个目标,请打开fb-sdk-test.php文件,添加如下代码:
if ($user) { try { // try to access Facebook Graph to get user friend list $user_friends = $facebook->api('/me/friends'); } catch (FacebookApiException $e) { error_log($e); } }
if ($user) {
try {
// try to access Facebook Graph to get user friend list
$user_friends = $facebook->api(‘/me/friends’);
} catch (FacebookApiException $e) {
error_log($e);
}
}
你或许需要获得访问令牌来实现更复杂的请求:
if ($user) { $access_token = $facebook->getAccessToken(); }
if ($user) {
$access_token = $facebook->getAccessToken();
}
请求当前用户更多的信息
需要获得当前用户更多信息,如email地址你需要询问而获得更多权限,另外如果你想通过游戏系统发布facebook的blog同样需要更多的权限。你需要花费点时间来了解一下权限的东西。有2种办法可以获得权限,你可在登录的时候获得全部权限,或者仅仅获得需要的权限。 这种体验相对较好。从用户视角出发这种方式简化操作步骤,并减少入侵危险。试着想象一下,一个陌生人询问你email地址而没有告诉你他要干什么,你会多么不爽。显然,你能通过网页读取一些隐私条保护条款会感觉舒服很多。这个采用在登录的时候获得更多的权限方式。打开你的fb-sdk-test.php文件,找到$loginUrl = $facebook->getLoginUrl() 替换为如下代码片段:
// get login url with permissions scope if user is NOT logged in $loginUrl = $facebook->getLoginUrl(array( ‘scope’ => ‘read_stream, email, read_stream, publish_actions’ ));
// get login url with permissions scope if user is NOT logged in
$loginUrl = $facebook->getLoginUrl(array(
‘scope’ => ‘read_stream, email, read_stream, publish_actions’
));
测试一下:首先在facebook权限里面删除之,然后再次刷新游戏登陆页面的URL,这时你会看到系统要求用户赋予更多权限。这个例子展示了访问用户的email邮箱,并发布一些信息到用户的首页。更多关于权限的参考facebook文档页面。
通过facebook的SDK发布信息到用户首页
这一节说明如何发布样例信息到facebook上。 打开fb-sdk-test.php文件,找到$user=$facebook->getuser(); 粘贴下面的代码,一旦用户登录系统,则自动发布如下的样本信息了。
// check if user just logged in if (isset($_GET['login']) && $_GET['login'] == 'true') { $attachment = array ( //'link'=> 'http://developers.facebook.com/docs/reference/dialogs/', 'message' => 'I have logged into MagicStones game by BevelGames.com', 'picture'=> "http://www.bevelgames.com/games/magicstones/magicstones-icon.png", 'name'=>"MagicStones", 'link' => "http://bevelgames.com/games/magicstones/", 'caption'=>"Only game you ever need to relax", 'description'=> "Relax and unwind by moving stones and collecting points. Compete with friends and share your score.", 'actions' => json_encode(array( 'link'=> "http://bevelgames.com/games/magicstones/", 'name' => 'Play MagicStones' )) ); $result = $facebook->api('/me/feed/','post',$attachment); }
让这个代码起作用,你需要确保仅仅是用户通过facebook账号第一次登陆游戏也没, 或者用户自己撤销房屋游戏页面后再次继续玩游戏。 这yeshiva为什么我们监测if预计判断”login”参数。 替换如下代码:
// get login url with permissions scope if user is NOT logged in $loginUrl = $facebook->getLoginUrl(array( 'scope' => 'read_stream, email, read_stream, publish_actions', 'redirect_uri' => $self_url . '?login=true' ));
测试一下:首先在facebook权限里面删除之,然后再次刷新游戏登陆页面的URL,这时你会看到系统要求用户赋予更多权限。一旦你登录游戏,游戏系统会自动发布信息到你的facebook页面,信息参考如下图:
效果还行吧。这是第一步一个简单的例子开始让你了解facebook API函数能力,当然API函数功能非常强大,远远不止发布消息这么简单。如果你想了解更多facebook的API信息,还需要自己去查找,因为API是一个比较宽泛的话题了。