使用Facebook Auth的Azure移动服务:获取用户信息

时间:2014-08-23 14:46:57

标签: android facebook facebook-graph-api azure-mobile-services

我是使用Azure移动服务(或任何移动设备)的新手。 我已按照本教程为Android应用启用Facebook身份验证。 http://azure.microsoft.com/en-us/documentation/articles/mobile-services-how-to-register-facebook-authentication/

我的移动服务有一个.NET后端,客户端是Android。 我还设法将访问令牌保存到表中;

public async Task<IHttpActionResult> PostTodoItem(TodoItem item)
    {
        var currentUser = User as ServiceUser;
        item.UserId = currentUser.Id;
        TodoItem current = await InsertAsync(item);
        return CreatedAtRoute("Tables", new { id = current.Id }, current);  
    }

保存的值采用以下格式:Facebook:907xxxxxxxxx757

我正在尝试使用Facebook SDK获取用户的FirstName。

var currentUser = User as ServiceUser;
        var accessToken = "current.Id";
        var client = new FacebookClient(accessToken);
        dynamic me = client.Get("me", new { fields = "name,id" });
        string firstName = me.name;

但是在我的Android虚拟设备(AVD)上收到以下错误:“{message:发生了错误}” Eclipse logcat似乎没有返回任何错误...我想因为它不是Android应用程序产生错误而是移动服务。

使用此人的Facebook名称(我当然不会这样做)有效;

var currentUser = User as ServiceUser;
        var client = new FacebookClient();
        dynamic me = client.Get("zuck" });

为什么这种方法不起作用?

或者我对Facebook令牌的理解不正确? 令牌是否可能存在于AVD上,因此移动服务无法使用令牌?

1 个答案:

答案 0 :(得分:1)

似乎我怀疑令牌是否正确。 这似乎有用..

           var serviceUser = this.User as ServiceUser;
           var identities = await serviceUser.GetIdentitiesAsync();
           var fb = identities.OfType<FacebookCredentials>().FirstOrDefault();

           var client = new FacebookClient(fb.AccessToken);
           dynamic me = client.Get("me", new { fields = "name,id" });
           string firstName = me.name;
           string lastName = me.last_name;