Facebook JS SDK's FB.api('/me') method doesn't return the fields i expect in Graph API v2.4+

后端 未结 4 2120
有刺的猬
有刺的猬 2020-11-21 05:38

I\'m trying to get some basic information using Facebook api, but so far I only get the user\'s name and id. As in { name: \"Juan Fuentes\", id: \"123456\" }

相关标签:
4条回答
  • 2020-11-21 06:21

    It's also possible to use this syntax for data from public_profile scope (tested in Graph API v2.9):

    FB.api('/me?fields=birthday,link,gender,age_range', function(response) {
       console.log(response);
    });
    

    You can test the possible values online in Graph API Explorer, just click "Get Token" button:

    https://developers.facebook.com/tools/explorer/?method=GET&path=me%3Ffields%3Dbirthday%2Clink%2Cgender%2Cage_range&version=v2.9

    0 讨论(0)
  • Note that email is not always returned by a call to the me api with email as field, even if scope email was requested and granted, if e.g. the user signed up with a phone number:

    https://developers.facebook.com/docs/facebook-login/permissions#reference-email

    0 讨论(0)
  • 2020-11-21 06:33

    Here is the complete Script:

    jQuery(document).ready(function () {
        openLoginPopup();
    })
    function openLoginPopup() {
        FB.getLoginStatus(function (response) {
            if (response.status == 'connected') {
                getCurrentUserInfo(response);
            } else {
                FB.login(function (response) {
                    if (response.authResponse) {
                        getCurrentUserInfo(response);
                    } else {
                        console.log('Auth cancelled.');
                    }
                }, {scope: 'email'});
            }
        });
    
    }
    
    function getCurrentUserInfo() {
        FB.api('/me?fields=id,email,first_name,last_name,name', function (userInfo) {
            console.log(userInfo.name + ': ' + userInfo.email);
        });
    }
    
    window.fbAsyncInit = function () {
        FB.init({
    //        appId: 'xxxxxxxxxxxxxxxxxxxxx', //livemode
            appId: 'xxxxxxxxxxxx', //testmode
            cookie: true, // Enable cookies to allow the server to access the session.
            xfbml: true, // Parse social plugins on this webpage.
            version: 'v4.0'           // Use this Graph API version for this call.
        });
    };
    
    
    (function (d, s, id) {                      // Load the SDK asynchronously
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id))
            return;
        js = d.createElement(s);
        js.id = id;
        js.src = "https://connect.facebook.net/en_US/sdk.js";
        fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
    

    Thanks.

    0 讨论(0)
  • 2020-11-21 06:34

    You need to manually specify each field since Graph API v2.4:

    • https://developers.facebook.com/docs/apps/changelog#v2_4
    • https://developers.facebook.com/docs/javascript/reference/FB.api

    Declarative Fields
    To try to improve performance on mobile networks, Nodes and Edges in v2.4 requires that you explicitly request the field(s) you need for your GET requests. For example, GET /v2.4/me/feed no longer includes likes and comments by default, but GET /v2.4/me/feed?fields=comments,likes will return the data. For more details see the docs on how to request specific fields.

    E.g.

    FB.api('/me', 'get', { access_token: token, fields: 'id,name,gender' }, function(response) {
        console.log(response);
    });
    
    0 讨论(0)
提交回复
热议问题