簡體   English   中英

使用android SDK 4.0獲取Facebook用戶ID

[英]Get Facebook user ID with android SDK 4.0

如何使用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"); 

不打印。

在回調之外,只有第一個打印內容的日志。

對不起,英語不好。

就像

Profile.getCurrentProfile().getId()

假設用戶已經登錄。

您將需要執行以下操作

 @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();
        }

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

@Override
public void onSuccess(LoginResult loginResult) {

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

}

如果您使用的是Facebook提供的“登錄按鈕”,那么我認為不是

LoginManager.getInstance().registerCallback()

你需要使用

lb.registerCallback()

那可以解釋為什么您的回調根本不觸發。

****編輯****

如果您的回調仍未觸發,而您僅需要UserID,則可以使用AccessToken Tracking。

Facebook提供了一個示例,其中您覆蓋在其中聲明了按鈕的Activity / Fragment的onActivityResult方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM