原文链接: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)”/>

如果你现在要测试程序,第一次登陆截图如下:

unity-facebook-login-screen-2

通过PHP登录按钮出现了。 但是点击通过JS登录按钮,你被重定向到如下认证页面。即PHP登录按钮还在页面。 刷新页面,原因是英文先前JavaScript的PHP保存了用户信息在Session。 一般来说,你也不需要2个按钮同时出现,我们目前是测试。

unity-facebook-login-screen-2-error

获得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-wall-first-post效果还行吧。这是第一步一个简单的例子开始让你了解facebook API函数能力,当然API函数功能非常强大,远远不止发布消息这么简单。如果你想了解更多facebook的API信息,还需要自己去查找,因为API是一个比较宽泛的话题了。

1 对 “[译] Unity3D游戏和facebook绑定(7.1 使用faceBook官方的PHP SDK)”的想法;

评论被关闭。