This post continue from the last one: Get all of the friends from Facebook
So we are only going to touch the FacebookLogin.cs file. Lets start by FacebookLogin method.
We need to add user_photos into permissions. Because we want to access the photos of user. So now the FacebookLogin function will look like this
[sourcecode language=”csharp”] public FacebookLogin(Panel container, Page page) { _page = page; //Initialize _webBrowser _webBrowser = new WebBrowser(); //Get this from the facebook string appId = ""; //List of all the permissions you want to have access to //You can get the list of possiblities from here //http://developers.facebook.com/tools/explorer/ string[] extendedPermissions = new[] { "publish_stream", "offline_access", "user_groups", "user_photos" };
var oauth = new FacebookOAuthClient { AppId = appId };
//Telling the Facebook that we want token as response
//and we are using touch enabled device
var parameters = new Dictionary<string, object>
{
{ "response_type", "token" },
{ "display", "touch" }
};
//If there's extended permissions build the string
//and set it up
if (extendedPermissions != null &&
extendedPermissions.Length > 0)
{
var scope = new StringBuilder();
scope.Append(string.Join(",", extendedPermissions));
parameters["scope"] = scope.ToString();
}
//Create the login url
var loginUrl = oauth.GetLoginUrl(parameters);
//Add webBrowser to the contentPanel
container.Children.Add(_webBrowser);
_webBrowser.Navigated += webBrowser_Navigated;
//Open the facebook login page into the browser
_webBrowser.Navigate(loginUrl);
} [/sourcecode]
Also we are going to use the PhotoChooser because we are sending a photo to Facebook. So add this using line
[sourcecode language=”csharp”] using Microsoft.Phone.Tasks; [/sourcecode]
So when you have logged in into Facebook we are going to launch the Photo Chooser. After user has chosen a photo it will automatically post it into Facebook using description “This is a test image” and name it Couch.
[sourcecode language=”csharp”] private void GetInformation() { //Create the Facebook client with the accessToken. //after this the client can be used to retrieve/send the data FacebookClient _fbClient = new FacebookClient(_accessToken); //Create a eventhandler for data download completed _fbClient.GetCompleted += _fbClient_GetCompleted; //Get the friends data //_fbClient.GetAsync("me/friends"); //Create a new PhtoChooseTask var task = new PhotoChooserTask(); //Tell it to fire a event when completed task.Completed += TaskCompleted; //Show the chooser task.Show(); }
void TaskCompleted(object sender, PhotoResult e)
{
//Send the chose picture into PostPicture function
PostPicture(e.ChosenPhoto);
}
private void PostPicture(Stream theFile)
{
//Create a parameters Dictionary
var parameters = new Dictionary<string, object>();
var picture = new FacebookMediaObject
{
//Tell facebook that we are sending image
ContentType = "image/jpeg",
//Give name to the image
FileName = "Couch"
};
//Create a new byteArray with right length
var img = new byte[theFile.Length];
//Convert the image content into bytearray
theFile.Read(img, 0, img.Length);
//Close the stream
theFile.Close();
//Put the bytearray into Picture
picture.SetValue(img);
//Add the image into parameters
parameters.Add("source", picture);
//Description of the posted image
parameters.Add("message", "This is a test image");
//Create a new FB client
var fbClient = new FacebookClient(_accessToken);
//Which event to fireup once posting is completed
fbClient.PostCompleted += FbClientPostCompleted;
//Action!
fbClient.PostAsync("me/photos",parameters);
}
void FbClientPostCompleted(object sender, FacebookApiEventArgs e)
{
//Just show simple messageBox indicating success
_page.Dispatcher.BeginInvoke(() => MessageBox.Show("Success"));
} [/sourcecode]