我的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设备上。)
答案 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();`