Windows Phoneアプリケーション開発入門

第40回 Facebook C# SDKを使ってみよう!(1)

この記事を読むのに必要な時間:およそ 5 分

C#

引き続き,プログラム側の紹介をしていきます。

画面への突入時に呼ばれるOnNavigatedToメソッドにて,Facebook C# SDKの認証用のFacebookOAuthClientクラスのインスタンスの生成と,WebBrowserコントロールに渡すログイン用のURLを作成しています。

下記のコード内にstring型の変数ApplicationIDとApplicationSecretを用意していますので,Facebook のアプリケーション登録にて取得したアプリケーションキー(App ID)とシークレットキー(App Secret)をそれぞれ設定してください。

using System.Collections.Generic;
using System.Diagnostics;
using System.Windows.Navigation;
using Facebook;
using Microsoft.Phone.Controls;

namespace FacebookTest {
    public partial class MainPage : PhoneApplicationPage {
        public MainPage() {
            InitializeComponent();
        }

        // アプリケーション キー
        private readonly string ApplicationID = "取得したアプリキー";
        private readonly string ApplicationSecret = "取得したシークレットキー";
        // アクセストークンを保持する
        string accessToken = "";

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) {
            var oauthClient = new FacebookOAuthClient { AppId = ApplicationID };
            var prams = new Dictionary<string, object>();
            prams["response_type"] = "code";
            prams["scope"] = "user_about_me,user_photos,offline_access";

            // 認証用のページURLを取得
            var url = oauthClient.GetLoginUrl(prams);

            // 認証ページへ遷移
            webBrowser.Navigate(url);
        }

先ほどの2つの正しいキーを設定し,アプリケーションを起動させるとログイン画面が表示されます。

画像

通常時にFacebookにアクセスする時のメールアドレスとパスワードを入力して,ログインボタンをクリックします。

画像

ユーザーのログインが完了後,このアプリケーションからFacebookへアクセスしてもよいか?の画面に切り替わります。アクセスの許可をクリックすると,セキュリティコード付きのURLの画面へ遷移します。

FacebookOAuthResult.TryParseメソッドにe.Uriを渡して,現在WebBrowserコントロールで表示されているページのURLにOAuthのレスポンスコードを含んでいるか確認を行います。FacebookOAuthResult.ExchangeCodeForAccessTokenAsyncメソッドのパラメータにレスポンスコードを指定して,アクセストークンの取得を要求します。

        private void webBrowser_Navigated(object sender, NavigationEventArgs e) {
            Debug.WriteLine("webBrowser_Navigated: {0}", e.Uri);

            FacebookOAuthResult oauthResult;
            if (!FacebookOAuthResult.TryParse(e.Uri, out oauthResult) || !oauthResult.IsSuccess) {
                return;
            }

            var oauthClient = new FacebookOAuthClient { AppId = ApplicationID };
            oauthClient.AppSecret = ApplicationSecret;
            var code = oauthResult.Code;

            // アクセストークンを要求(非同期実行)
            oauthClient.ExchangeCodeForAccessTokenCompleted += oauthClient_ExchangeCodeForAccessTokenCompleted;
            oauthClient.ExchangeCodeForAccessTokenAsync(code);
        }

アクセストークンの取得処理が,非同期にて実行されます。サーバーから返ってきたデータをe.GetResultDataメソッドで取得して,IDictionary<string, object>にキャストします。

"access_token"のキーでアクセストークンが取得できるので,下記コードではそのままアクセストークンを表示させるようにしています。

        // アクセストークンを取得
        void oauthClient_ExchangeCodeForAccessTokenCompleted(object sender, FacebookApiEventArgs e) {
            var result = e.GetResultData() as IDictionary<string, object>;
            if (result == null) return;

            accessToken = (string)result["access_token"];

            Dispatcher.BeginInvoke(() => {
                textAccessToken.Text = accessToken;
            });
        }
    }
}

おわりに

今回はFacebookでのアプリケーション登録から,ユーザー認証とアクセストークンを取得するまでをご紹介させて頂きました。

次回はアクセストークンを使ってFacebookのAPIを利用したいと思います。

今回は以上で終わりです。ありがとうございました。

著者プロフィール

和田健司(わだけんじ)

1982年10月12日生まれ。大阪で働くプログラマ。Microsoft MVP for Device Application Development(Jul 2010 - Jun 2011)。Windows Mobileに傾倒し今に至る。Windows Mobile向けのTipsを書いています。iPhoneアプリ開発を始めました。嫌いな食べ物はカレー。

URL: http://ch3cooh.jp/
Blog: http://d.hatena.ne.jp/ch3cooh393/