[.NET]透過 Facebook SDK 來讀取登入者的朋友清單

使用VS.NET新版的Web範本中,有實作登入 FB 或 Google 的方式,

那登入後,要如何取得登入者的朋友清單。

當我們登入FB後,可以取回 AccessToken ,

這時我們可以用這個 Token 來取得我們要的資料。

在取得朋友清單之前,先從 Nuget 安裝 Facebook SDK for .NET ,如下,

安裝完成後,開啟 App_Start\Startup.Auth.cs 的 ConfigureAuth Method中,

先建立 FacebookAuthenticationOptions ,然後在取得 Token 後就可以取得朋友的清單,如下,

var options = new FacebookAuthenticationOptions
{
	AppId = "",
	AppSecret = "326d7548dcf8b669ef00e70997f8284a",
	Provider = new FacebookAuthenticationProvider
	{
		OnAuthenticated = async context =>
		{
			string accessToken = context.AccessToken;
			var client = new FacebookClient(accessToken);
			//有用這個app的朋友
			dynamic appFriends = client.Get("/me/friends");
			var appFriendsList = (from i in (IEnumerable<dynamic>)appFriends.data
						  select new
						  {
							  i.name,
							  i.id
						  }).ToList();
						  
			//可以邀請的朋友
			dynamic invitableFriends = client.Get("/me/invitable_friends");
			var invitableFriendsList = (from i in (IEnumerable<dynamic>)invitableFriends.data
								  select new
								  {
									  i.name,
									  i.id
								  }).ToList();

			await Task.FromResult(0);
		}
	}
};
//https://developers.facebook.com/docs/facebook-login/permissions
//options.Scope.Add("read_custom_friendlists");
app.UseFacebookAuthentication(options);

註: FB API 2.x 之後,/me/friends 就只取得到有使用這個 AP 的 朋友,如果要取得其他的朋友資訊,可以用 /me/invitable_friends

參考資料

Facebook Graph Api v2.0+ - /me/friends returns empty, or only friends who also use my app

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^