Android上的Facebook个人资料getName()始终返回null

时间:2017-02-06 04:59:34

标签: android facebook facebook-graph-api facebook-android-sdk android-facebook

我的Facebook登录活动如果有帮助:

public class LoginActivity extends AppCompatActivity {
    private LoginButton loginButton;
    private CallbackManager callbackManager;

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
        setContentView(R.layout.activity_login);
        loginButton = (LoginButton) findViewById(R.id.login_button);
        loginButton.setReadPermissions("public_profile", "user_friends");
        final Intent myIntent = new Intent(this, MapsActivity.class);
        if (isLoggedIn()) {
            startActivity(myIntent);
            finish();
            return;
        }
        loginButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(final View v) {
                // Callback registration
                loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        LoginManager.getInstance().logInWithReadPermissions(LoginActivity.this, Arrays.asList("public_profile", "user_friends"));
                        startActivity(myIntent);
                        finish();
                    }

                    @Override
                    public void onCancel() {
                    }

                    @Override
                    public void onError(FacebookException exception) {
                    }
                });
            }
        });

    }

    private boolean isLoggedIn() {
        AccessToken accessToken = AccessToken.getCurrentAccessToken();
        return accessToken != null;
    }
}

以及我尝试从他们的ID中获取某人姓名的代码:

new Profile(creatorId, null, null, null, null, null).getFirstName()

除了getName()之外,我还尝试了此处显示的getFirstName()调用,并且两者始终返回null。我认为有&#34; public_profile&#34;在我要求的Facebook权限允许我以这种方式获得某人的名字,如果他们在通过Facebook登录时授权我的应用程序。但是,我并不总是拥有&#34; public_profile&#34;在我要求的Facebook权限,但我强迫所有用户通过Facebook重新登录到我的应用程序与此当前的代码和权限,所以我认为这将解决这个问题。然而,这个函数不断返回null,我不确定原因。

此外,creatorId可能是与当前登录的FB用户不同的用户的FB ID。(他们将在过去授权+使用该应用,而不是当前登录的用户在那个Android设备上。)

2 个答案:

答案 0 :(得分:0)

因此,即使对于公共个人资料信息,似乎也需要图形请求。这是我用来获取某个Facebook ID的第一个名字的图形请求,creatorId:

var result = XDocument.Parse(xml)
             .Descendants("DPSI")
             .GroupBy(x => x.Value)
             .Where(x => x.Count() > 1);

答案 1 :(得分:0)

  

您可以使用此代码。   请更改您的GraphRequest.GraphJSONObjectCallback()接口

GraphRequest request = GraphRequest.newMeRequest(AccessToken.getCurrentAccessToken(),                                
new GraphRequest.GraphJSONObjectCallback() {

                                @Override
                                public void onCompleted(JSONObject user, GraphResponse graphResponse) {
                                    try {
                                                                                    Log.e(TAG,"id"+user.optString("id"));                                            
                                        Log.e(TAG,"id"+user.optString("first_name"));


                                    } catch (Exception e) {
                                        e.printStackTrace();
                                    }
                                }
                            });
                    Bundle parameters = new Bundle();
                    parameters.putString("fields", "id,first_name");
                    request.setParameters(parameters);
                    request.executeAsync();`