2013-09-21 29 views
2

我想使用Facebook Score API(使用Facebook Android SDK設置和閱讀用戶和朋友評分)。facebook android SDK:調用評分API

Facebook的文檔說:

閱讀得分球員

您可以通過發出HTTP GET請求/ USER_ID /得分與用戶或應用程式閱讀的人玩你的遊戲分數的access_token。

[https://developers.facebook.com/docs/games/scores/][1]

但是這個文檔太少,而且沒有被發現有關此示例。 有一個在facebook android SDK(friendsmash)中找到的具有排行榜功能的android示例,但此示例使用自己的服務器而不是Score API。

有沒有人可以請給我們一些樣品或更詳細的解釋我們如何做到這一點?

回答

1

在facebook開發者博客上有一個更詳細的例子,但它在php中。我同意,雖然文件似乎缺乏。

來源:https://developers.facebook.com/blog/post/539/

下面的PHP示例演示如何訪問signed_request參數,應用程序訪問令牌,並提示用戶授權您的應用程序的publish_actions權限:

<?php 
$app_id = 'YOUR_APP_ID'; 
$app_secret = 'YOUR_APP_SECRET'; 
$canvas_page_url = 'YOUR_CANVAS_PAGE_URL'; 

// Authenticate the user 
session_start(); 
if (isset($_REQUEST["code"])) { 
$code = $_REQUEST["code"]; 
} 

if(empty($code) && !isset($_REQUEST['error'])) { 
$_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection 
$dialog_url = 'https://www.facebook.com/dialog/oauth?' 
    . 'client_id=' . $app_id 
    . '&redirect_uri=' . urlencode($canvas_page_url) 
    . '&state=' . $_SESSION['state'] 
    . '&scope=publish_actions'; 

print('<script> top.location.href=\'' . $dialog_url . '\'</script>'); 
exit; 
} else if(isset($_REQUEST['error'])) { 
// The user did not authorize the app 
print($_REQUEST['error_description']); 
exit; 
}; 

// Get the User ID 
$signed_request = parse_signed_request($_POST['signed_request'], 
$app_secret); 

$uid = $signed_request['user_id']; 
echo 'Welcome User: ' . $uid; 

// Get an App Access Token 
$token_url = 'https://graph.facebook.com/oauth/access_token?' 
. 'client_id=' . $app_id 
. '&client_secret=' . $app_secret 
. '&grant_type=client_credentials'; 

$token_response = file_get_contents($token_url); 
$params = null; 
parse_str($token_response, $params); 
$app_access_token = $params['access_token']; 

function parse_signed_request($signed_request, $secret) { 
list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

// decode the data 
$sig = base64_url_decode($encoded_sig); 
$data = json_decode(base64_url_decode($payload), true); 

if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { 
    error_log('Unknown algorithm. Expected HMAC-SHA256'); 
    return null; 
} 

// check sig 
$expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
if ($sig !== $expected_sig) { 
    error_log('Bad Signed JSON signature!'); 
    return null; 
} 

return $data; 
} 

function base64_url_decode($input) { 
return base64_decode(strtr($input, '-_', '+/')); 
} 
?> 

發佈用戶分數

https://graph.facebook.com/USER_ID/scores? 
score=USER_SCORE&access_token=APP_ACCESS_TOKEN 
2

在Android中使用Score API的代碼片段如下。

對於帖子評分:(登錄成功後調用)

final ProgressDialog dialog = ProgressDialog.show(MainActivity.this, "", "Please wait"); 
Bundle param = new Bundle(); 
param.putInt("score", 11000); 
Request request = new Request(Session.getActiveSession(), "me/scores", param , HttpMethod.POST); 
request.setCallback(new Request.Callback() 
{ 
    @Override 
    public void onCompleted(Response response) 
    { 
     Log.d("log_tag", "response: " + response.toString()); 
     dialog.dismiss(); 
    } 
}); 
request.executeAsync(); 

對於retrive所有得分申請:(登錄成功後調用)

final ProgressDialog dialog = ProgressDialog.show(MainActivity.this, "", "Please wait"); 
Request request = new Request(Session.getActiveSession(), "<app_id>/scores", null, HttpMethod.GET); 
request.setCallback(new Request.Callback() 
{ 
    @Override 
    public void onCompleted(Response response) 
    { 
     Log.d("log_tag", "response: " + response.toString()); 
     dialog.dismiss(); 
    } 
}); 
request.executeAsync(); 

請點擊此鏈接更多的細節:https://developers.facebook.com/docs/games/scores/