如何通过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");
无法打印。
只有第一个日志在回调之外打印了一些内容。
抱歉英语不好。
答案 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);
}