使用 Windows Facebook SDK FBUser class 丢失信息

Using the Windows Facebook SDK the FBUser class misses information

使用 Windows SDK for Facebook 我已经成功登录并设置了正确的权限来检索一些信息。

这是使用此代码完成的

FBSession sess = FBSession.ActiveSession;
sess.FBAppId = FBAppId;
sess.WinAppId = WinAppId;

// Add permissions
sess.AddPermission("public_profile");

// Do the login
await sess.LoginAsync();

现在的问题是我只能从 FBUser 中检索到一小部分信息,而不是其中存在的所有字段,例如:

sess.User.Name; // This WORKS
sess.User.Id; // This WORKS
sess.User.FirstName; // DOESN'T WORK
sess.User.LastName; // DOESN'T WORK
sess.User.Locale; // DOESN'T WORK
...

与 ActiveSession 关联的 FBUser 从一开始就只填充您从初始 "did login work" 请求(这是对 /me Uri 的标准请求)获得的数据。

这仅包括:

  • 全名
  • 脸书账号

要获取有关用户的更多数据,您需要使用 Graph API,并将您感兴趣的字段作为参数包含在请求中。

这是一个使用 first_name、last_name 和用户区域设置更新当前 FBUser 的示例。

// This is the current user that we're going to add info to
var currentUser = FBSession.ActiveSession.User;

// Specify that we want the First Name, Last Name and Locale that is connected to the user
PropertySet parameters = new PropertySet();
parameters.Add("fields", "locale,first_name,last_name");

// Set Graph api path to get data about this user
string path = "/me/";

// Create the request to send to the Graph API, also specify the format we're expecting (In this case a json that can be parsed into FBUser)
FBSingleValue sval = new FBSingleValue(path, parameters,
  new FBJsonClassFactory(FBUser.FromJson));

// Do the actual request
FBResult fbresult = await sval.Get();

if (fbresult.Succeeded)
{
  // Extract the FBUser with new data
  var extendedUser = ((FBUser)fbresult.Object);

  // Attach the newly fetched data to the current user
  currentUser.FirstName = extendedUser.FirstName;
  currentUser.LastName = extendedUser.LastName;
  currentUser.Locale= extendedUser.Locale;
}

请注意示例代码仅包含极少量的验证。由于这包括网络调用,因此应添加更多内容。