使用Facebook SDK显示所有共同好友,而不仅限于安装了应用程序的好友?

3
我正在使用 Facebook JavaScript SDK,想要显示这些用户之间的所有共同好友,而不仅仅是那些安装了应用程序的共同好友。根据这里的 API 文档,我只能看到那些已经安装了应用程序的共同 Facebook 好友列表。如何获取完整的共同好友列表?
4个回答

4
该页面上的附加说明已经很好地解释了为什么无法获取全部内容。
  • 需要使用具有user_friends权限的有效用户访问令牌才能查看使用该应用程序的其他朋友的共同好友。
  • 请求中的用户和会话用户都必须向该应用授予user_friends权限。
  • 此外,响应将仅包括已授予该应用程序user_friends权限的任何共同好友。
那就是说,要获得完整的共同好友列表,唯一的方法就是如果所有朋友都注册了您的应用程序并授予了user_friends权限。

真的,然而像Tinder和Lulu这样的服务确实显示了没有该应用程序的共同好友。这是怎么可能的? - johncorser
@johncorser Tinder很可能正在使用不再适用于新应用程序的API v1,请阅读更改日志https://developers.facebook.com/docs/apps/changelog - phwd
哦!我有一个应用程序仍在v1 API上。它会停止工作吗? - johncorser
2
@johncorser 是的,这一切都在链接的更新日志中解释了,日期是2015年4月30日。如果您的v1应用程序在过去几个月内处于非活动状态,则会自动推送到v2 API。请不要考虑实现即将被删除的功能。建议升级期即将到来 https://fbstatic-a.akamaihd.net/rsrc.php/v2/yx/r/93xgoBi8C-x.png - phwd
我已经到处寻找解决方法,但是没有结果。只能放弃并接受这个答案作为最终答案。谢谢@phwd - hiroki

1
    function aa_mutl_frnd(x, row)
{ 
  FB.init({
    appId      : '<?php echo get_option('_fb_apps_id');?>', //Facebook apps id using theme option
    cookie     : true,  // enable cookies to allow the server to access 
                    // the session
    xfbml      : true,  // parse social plugins on this page
    version    : 'v2.5' // use graph api version 2.5
  });  
  FB.getLoginStatus(function(response) {
    if (response.status === 'connected') {
            var accessToken = response.authResponse.accessToken;
        console.log(':acc_tk:'+accessToken);
//////////////////////////////////////////////////////////
        var data={
            'action': 'wq_accss_tkn_gnrt',
            'ddt'   :  accessToken
        }

        $.post('<?php echo admin_url('admin-ajax.php'); ?>', data, function (response) {
            console.log(':acc_tk2:'+response);


        FB.api(
                "/"+x+"",
                {
                    "fields": "context.fields(all_mutual_friends)",
                    //"access_token": '',
                    "appsecret_proof": response,
                },
                function (response) {
                    console.log(response);     
                }
        );

        });
////////////////////////////////////
        }
  });

}
/// ajax part /////
add_action('wp_ajax_wq_accss_tkn_gnrt', 'wq_accss_tkn_gnrt');
add_action('wp_ajax_nopriv_wq_accss_tkn_gnrt', 'wq_accss_tkn_gnrt');    
    function wq_accss_tkn_gnrt() {
        echo hash_hmac('sha256',$_POST['ddt'],'app_secret');;
        die();
    }

1

你好,我正在使用Java服务器应用程序来处理我的API,我该如何在服务器上实现返回请求用户和目标用户之间的共同好友?我需要在我的服务器上存储两个用户的Facebook访问令牌吗? - Lucas Senechal
1
@LucasSenechal 请看一下那个文档页面。你向Facebook的请求将需要包括经过认证的用户令牌以及另一方的Facebook用户ID。你不需要两个访问令牌,只需要你认证用户的令牌即可。 - dalton_c
啊,谢谢!我现在正在尝试实现这个。我唯一担心的是,我已经按照 Facebook 文档提供的正确格式尝试访问 rest api,但我只得到了我正在针对的用户?在我尝试在 Facebook Graph Explorer 上进行测试之前,有什么适当的格式可以使用吗?此外,我的服务器正在运行一个 Java Web 应用程序,因此我下载了 restfb 并将其实现到我的 Java 应用程序中,但我不确定这是否是正确的操作方式? - Lucas Senechal
我认为,为了获取双方的共同好友,两个用户都必须通过您的应用程序进行身份验证。这可能是您的问题所在。 - dalton_c
我们都已经通过身份验证并且已经授予了适当的权限。 - Lucas Senechal

0
    get facebook friends

    $access_token = "facebook token";
    $app_secret = "facebook secret";
    $appsecret_proof = hash_hmac('sha256', $access_token, 
    $app_secret);


    $graph_url = "https://graph.facebook.com/me?fields=context.fields(/me?fields=id,name,friends.limit(99)" . "&access_token=" . $access_token . "&appsecret_proof=" . $appsecret_proof;

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $graph_url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

    $output = curl_exec($ch);
    return $response_mutual = json_decode($output, true);
    curl_close($ch);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接