Xác thực quyền truy cập vào Facebook từ ứng dụng Windows Phone

logo75x75

I. Introduction

Việc sử dụng Facebook là một nhu cầu gần như là một nhu cầu không thể thiếu đối với những ai dùng Windows Phone, kể cả lập trình viên củng vậy, trong một số trường hợp muốn chia sẻ qua Facebook hay lấy thông tin từ Facebook thì bản thân phía MS không có những Luncher đáp ứng đủ như cầu.

Bài viết này mình xin chia sẻ để các bạn có góc nhìn cơ bản về cách dùng Facebook API.

II. Fundamental

1.Để sử dụng Facebook API trước tiên chúng ta phải cài Facebook C# Sdk, các bạn có thể download trực tiếp tại GITHUB hoặc dùng Nuget Package nhé :

image

2.Tiếp theo chúng ta đăng ký quyền sử dụng Facebook API thông qua https://developers.facebook.com/apps để có App API Key và Secret Key. Các bạn Click vào Create New App nhé .

image

Sau khi đăng ký xong chúng ta sẽ được cung cấp 1 App API Key và một Secret Key các bạn lưu ý là chúng ta sẽ sử dụng 2 key này trong suốt quá trình sử dụng API.

3.Cho đến khi mọi thao tác trên đã OK chúng ta tiếp tục tạo các lớp để lưu trữ App API Key, Secret Key, UserId và Token :

public class FacebookSettings

{

    public static string AppID = "YOUR APPID"

    public static string AppSecret = "YOUR APPSECRET"

}

 

public class FacebookAccess

{

    public string AccessToken { get; set; }

    public string UserId { get; set; }

}

4.Tiếp theo chúng ta thêm WebBrowser Control vào giao diện để khi ứng dụng chạy có thể hiển hiện trang Login :

<Grid x:Name="ContentPanel&quot; Grid.Row="1" Margin="12,0,12,0">

    <phone:WebBrowser Name="BrowserControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" IsScriptEnabled="True" Navigated="Browser_Navigated" Loaded="Browser_Loaded"/>

</Grid>

5.Tiếp theo chúng ta vào code behide để khởi tạo đối tượng FacebookClient và thông tin truy cập ExtendedPermissions:

private const string ExtendedPermissions = "user_about_me,publish_stream";

private readonly FacebookClient _fb = new FacebookClient();

Ở chuổi ExtendedPermissions chứa thông tin cho phép ứng dụng có thể truy nhập thông tin của User và Publist_stream cho phép ứng dụng có thể post thông tin lên Facebook

Chúng ta có thể tìm hiểu thêm về thông tin  truy cập ở : https://developers.facebook.com/docs/authentication/permissions/

6.Bây giờ chúng ta sẽ truy cập vào trang Login của Facebook để lấy token :

var parameters = new Dictionary<string, object>();

parameters["client_id"] = FacebookSettings.AppID;

parameters["redirect_uri"] = "https://www.facebook.com/connect/login_success.html";

parameters["response_type"] = "token";

parameters["display"] = "page";

parameters["scope"] = extendedPermissions;

BrowserControl.Navigate(_fb.GetLoginUrl(parameters));

Chúng ta dùng kiểu dữ liệu Dictionary để chứa những thông tin cần thiết cho phương thức GetLoginUrl.

7.Sau khi đã đăng nhập và Facebook thì phía Facebook sẽ gửi về thông tin Token cho ứng dụng trong sự kiện Navigated của Web Browser control. Chúng ta có thể lưu Token này lại để sử dụng nhiều lần.

private void Browser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)

{

    FacebookOAuthResult oauthResult;

    if (!_fb.TryParseOAuthCallbackUrl(e.Uri, out oauthResult))

    {

        return;

    }

 

    if (oauthResult.IsSuccess)

    {

        var accessToken = oauthResult.AccessToken;

        LoginSucceded(accessToken);

    }

    else

    {

        MessageBox.Show(oauthResult.ErrorDescription);

    }

}

Ở trên mình xây dựng hàm LoginSuccesed để lấy thông tin và Lưu Token :

private void LoginSucceded(string accessToken)

{

    var fb = new FacebookClient(accessToken);

 

    fb.GetCompleted += (o, e) =>

    {

        if (e.Error != null)

        {

            Dispatcher.BeginInvoke(() => MessageBox.Show(e.Error.Message));

            return;

        }

 

        var result = (IDictionary<string, object>)e.GetResultData();

        var id = (string)result["id"];

 

        SerializeHelper.SaveSetting<FacebookAccess>("FacebookAccess", new FacebookAccess

        {

            AccessToken = accessToken,

            UserId = id

        });

    };

 

    fb.GetAsync("me?fields=id");

}

Hàm SerializerHelper.SaveSetting là hàm Static của lớp SerializerHelper để lưu thông tin đối tượng vào IsolatedStorage của ứng dụng. Do mình để hàm này trong lớp helper do dể quản lý, các bạn có thể viết thân hàm ngay trong làm LoginSuccessed nếu thích nhé.

Vậy là chúng ta đã hoàn thành cách cơ bản để lấy token Facebook, trong bài viết sau mình sẽ chia sẻ nhiều tính năng hay hơn của Facebook API nhé

Chúc các bạn thành công

Leave a comment