如何使用Azure移动服务获取Facebook图片和朋友?

时间:2017-11-11 15:37:42

标签: xamarin.forms azure-mobile-services azure-authentication

是否可以使用Azure移动服务声明或任何其他方式获取Facebook个人资料图片和用户朋友?

如下图所示,在天蓝色的后端,

  • 如果不是公开个人资料,用户图片就会丢失。它看起来 喜欢公开个人资料只链接到facebook个人资料

  • 我设置了user_friends但是当我使用下面的代码请求identites时, 我看到9个声明(姓名,姓名,性别,个人资料等),但我 没有得到任何朋友的信息。

enter image description here

我正在使用的代码只是

 identities = await App.Client.InvokeApiAsync<List<AppServiceIdentity>>("/.auth/me");

根据文档,它应该返回我在后端设置的索赔类型和值的字典。

我可以使用简单的http请求实现此目的,如下所示

  var requestUrl = $"https://graph.facebook.com/v2.11/me/friends?fields=id,picture.width(72).height(72),name&access_token=" + accessToken;

但是如果可能的话,我想要一个使用azure后端的通用解决方案?

1 个答案:

答案 0 :(得分:0)

AFAIK,您只能从当前经过身份验证的用户检索基本配置文件(namepictureemail等)。根据我的理解,如果您希望移动应用程序后端处理针对Facebook的Graph API的请求,而不是在您的移动客户端中检索访问令牌和发送请求,您可以创建自定义Web API并使用以下代码来获取访问令牌并在您的移动后端发送请求:

// Get the credentials for the logged-in user.
var credentials =
    await this.User
    .GetAppServiceIdentityAsync<FacebookCredentials>(this.Request);

if (credentials.Provider == "Facebook")
{
    // Create a query string with the Facebook access token.
    var requestUrl = $"https://graph.facebook.com/v2.11/me/friends?fields=id,picture.width(72).height(72),name&access_token=" + credentials.AccessToken;

    // Create an HttpClient request.
    var client = new System.Net.Http.HttpClient();

    // Request the current user info from Facebook.
    var resp = await client.GetAsync(requestUrl);
    resp.EnsureSuccessStatusCode();

    // Do something here with the Facebook user information.
    var fbInfo = await resp.Content.ReadAsStringAsync();
}    

对于您的移动客户端,您可以利用InvokeApiAsync来调用移动后端提供的相关自定义Web API。更多详细信息,您可以参考How to: Work with authenticationCustom HTTP Endpoints