(C# UWP/WinRT) Facebook OAuth2 Access Token

Chilkat Universal Windows Platform (UWP) / WinRT Downloads

// It requires the Chilkat API to have been previously unlocked.// See Global Unlock Sample for sample code.Chilkat.OAuth2 oauth2 = newChilkat.OAuth2();
bool success;
// This should match the Site URL configured for your Facebook APP, such as "http://localhost:3017/"
oauth2.ListenPort = 3017;
oauth2.AuthorizationEndpoint = "https://www.facebook.com/dialog/oauth";
oauth2.TokenEndpoint = "https://graph.facebook.com/oauth/access_token";
// Replace these with actual values.
oauth2.ClientId = "FACEBOOK-CLIENT-ID";
oauth2.ClientSecret = "FACEBOOK-CLIENT-SECRET";
// Set the Scope to a comma-separated list of permissions the app wishes to request.// See https://developers.facebook.com/docs/facebook-login/permissions/ for a full list of permissions.
oauth2.Scope = "public_profile,user_friends,email,user_posts,user_likes,user_photos,publish_actions";
oauth2.CodeChallenge = true;
oauth2.CodeChallengeMethod = "S256";
// Begin the OAuth2 three-legged flow. This returns a URL that should be loaded in a browser.string url = oauth2.StartAuth();
if (oauth2.LastMethodSuccess != true) {
Debug.WriteLine(oauth2.LastErrorText);
return;
}
// At this point, your application should load the URL in a browser.// For example,// in C#: System.Diagnostics.Process.Start(url);// in Java: Desktop.getDesktop().browse(new URI(url));// in VBScript: Set wsh=WScript.CreateObject("WScript.Shell")// wsh.Run url// The Facebook account owner would interactively accept or deny the authorization request.// Add the code to load the url in a web browser here...// Add the code to load the url in a web browser here...// Add the code to load the url in a web browser here...// Now wait for the authorization.// We'll wait for a max of 30 seconds.int numMsWaited = 0;
while ((numMsWaited < 30000) && (oauth2.AuthFlowState < 3)) {
oauth2.SleepMs(100);
numMsWaited = numMsWaited + 100;
}
// If there was no response from the browser within 30 seconds, then// the AuthFlowState will be equal to 1 or 2.// 1: Waiting for Redirect. The OAuth2 background thread is waiting to receive the redirect HTTP request from the browser.// 2: Waiting for Final Response. The OAuth2 background thread is waiting for the final access token response.// In that case, cancel the background task started in the call to StartAuth.if (oauth2.AuthFlowState < 3) {
oauth2.Cancel();
Debug.WriteLine("No response from the browser!");
return;
}
// Check the AuthFlowState to see if authorization was granted, denied, or if some error occurred// The possible AuthFlowState values are:// 3: Completed with Success. The OAuth2 flow has completed, the background thread exited, and the successful JSON response is available in AccessTokenResponse property.// 4: Completed with Access Denied. The OAuth2 flow has completed, the background thread exited, and the error JSON is available in AccessTokenResponse property.// 5: Failed Prior to Completion. The OAuth2 flow failed to complete, the background thread exited, and the error information is available in the FailureInfo property.if (oauth2.AuthFlowState == 5) {
Debug.WriteLine("OAuth2 failed to complete.");
Debug.WriteLine(oauth2.FailureInfo);
return;
}
if (oauth2.AuthFlowState == 4) {
Debug.WriteLine("OAuth2 authorization was denied.");
Debug.WriteLine(oauth2.AccessTokenResponse);
return;
}
if (oauth2.AuthFlowState != 3) {
Debug.WriteLine("Unexpected AuthFlowState:" + Convert.ToString(oauth2.AuthFlowState));
return;
}
Debug.WriteLine("OAuth2 authorization granted!");
Debug.WriteLine("Access Token = " + oauth2.AccessToken);