用android SDK 4.0获取Facebook用户名

时间:2015-04-22 08:52:07

标签: android facebook sdk

如何通过Facebook Android SDK 4.0获取Facebook用户ID?

这是我的代码不起作用:

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    FacebookSdk.sdkInitialize(getApplicationContext());
    setContentView(R.layout.activity_firstlogin);

    CallbackManager cm;
    LoginButton     lb;

    cm = CallbackManager.Factory.create();
    lb = (LoginButton) findViewById(R.id.facebook_button);
    Log.d(TAG, "Salut les zouzous");
    LoginManager.getInstance().registerCallback(cm,
            new FacebookCallback<LoginResult>()
            {
                @Override
                public void onSuccess(LoginResult loginResult)
                {
                   Log.d(TAG, "Success !");
                    AccessToken tok;
                    tok = AccessToken.getCurrentAccessToken();
                    Log.d(TAG, tok.getUserId());
                }

                @Override
                public void onCancel()
                {
                    Log.d(TAG, "On Cancel");
                }

                @Override
                public void onError(FacebookException exception)
                {
                    Log.e(TAG, exception.getMessage());
                }
            });

我确切地说

 Log.d(TAG, " Success"); 

无法打印。

只有第一个日志在回调之外打印了一些内容。

抱歉英语不好。

4 个答案:

答案 0 :(得分:27)

就像

一样简单
Profile.getCurrentProfile().getId()

这假定用户已登录。

答案 1 :(得分:9)

您需要执行以下操作

 @Override
        public void onSuccess(LoginResult loginResult) {
            final AccessToken accessToken = loginResult.getAccessToken();

            GraphRequestAsyncTask request = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() {
                @Override
                public void onCompleted(JSONObject user, GraphResponse graphResponse) {
                    Log.d(TAG, user.optString("email"));
                    Log.d(TAG, user.optString("name"));
                    Log.d(TAG, user.optString("id"));
                }
            }).executeAsync();
        }

答案 2 :(得分:4)

只需在 onSuccess()中使用loginResult.getAccessToken().getUserId()作为

@Override
public void onSuccess(LoginResult loginResult) {

    Toast.makeText(Login.this, "User ID : "+loginResult.getAccessToken().getUserId(), Toast.LENGTH_LONG).show();

}

答案 3 :(得分:0)

如果你正在使用Facebook提供的登录按钮,那么我认为不是

LoginManager.getInstance().registerCallback()

你需要使用

lb.registerCallback()

这可以解释为什么你的回调根本不会被解雇。

**** ****编辑

如果您的回叫仍然没有被解雇,而您只需要用户ID,则可以转而使用AccessToken跟踪。

Facebook提供了一个示例,您可以在其中覆盖您已在其中声明按钮的活动/片段的onActivityResult方法:

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