【问题标题】:Facebook Profile getName() on Android always returning nullAndroid 上的 Facebook 个人资料 getName() 总是返回 null
【发布时间】:2017-02-06 04:59:34
【问题描述】:

如果有帮助,我的 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。我认为如果在通过 Facebook 登录时授权我的应用程序,我请求的 Facebook 权限中包含“public_profile”将允许我以这种方式获取某人的姓名。但是,我请求的 Facebook 权限中并不总是有“public_profile”,但我已经强制所有用户使用当前代码和权限通过 Facebook 重新登录到我的应用程序,所以我认为这可以解决这个问题。然而,这个函数一直返回 null,我不知道为什么。

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

【问题讨论】:

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


    【解决方案1】:

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

        GraphRequest request = GraphRequest.newGraphPathRequest(
                AccessToken.getCurrentAccessToken(),
                creatorId,
                new GraphRequest.Callback() {
                    @Override
                    public void onCompleted(GraphResponse response) {
                        try {
                            Log.e("creatorId's first name:", response.getJSONObject().getString("first_name"));
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
        Bundle params = new Bundle();
        params.putString("fields", "id,first_name");
        request.setParameters(params);
        request.executeAsync();
    

    【讨论】:

      【解决方案2】:

      您可以使用此代码。 请更改您的 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();`
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-12
        • 1970-01-01
        • 2014-06-03
        • 2014-10-11
        • 2023-04-11
        • 1970-01-01
        • 2013-11-20
        • 1970-01-01
        相关资源
        最近更新 更多