【问题标题】:facebook android SDK: calling score APIfacebook android SDK:调用分数 API
【发布时间】:2013-09-26 23:10:03
【问题描述】:

我想通过 facebook Android SDK 使用 Facebook Score API(设置和读取用户和朋友的分数)。

Facebook 文档说:

读取玩家的分数

您可以通过发出 HTTP 来读取玩您游戏的人的分数 使用用户或应用 access_token 向 /USER_ID/scores 发出 GET 请求。

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

但是这个文档太少了,并且没有找到关于这个的示例。 在 facebook android SDK (friendsmash) 中发现了一个带有排行榜的 android 示例,但该示例使用自己的服务器而不是 Score API。

谁能给我们一些示例或更详细的说明,说明我们如何做到这一点?

【问题讨论】:

    标签: android facebook facebook-graph-api leaderboard


    【解决方案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的代码sn-ps如下。

      Post score:(登录成功后调用)

      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();
      

      获取申请的所有分数:(登录成功后调用)

      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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多