SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

速習 Windowsストアアプリケーション

サーバーと連携するWindowsストアアプリを作成する(後編)

速習 Windowsストアアプリケーション 第15回

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード FacebookSdkSample.zip (1.3 MB)
ダウンロード RSSReader_000.zip (34.5 KB)
ダウンロード RSSReader_001.zip (35.0 KB)

プログラムの修正

 導入したライブラリを利用して、Facebookと連携を行いFacebook上のユーザー名を取得します。

 本コードはSDKのページのサンプルコードの必要な部分を抜粋したものです。

Facebookにログインしユーザー名を取得するコード
private string _facebookAppId = "{AppID}"; // ここにFacebook側で取得したAppIDを入力します
private string _permissions = "user_about_me,read_stream,publish_stream";

private FacebookClient _fb = new FacebookClient();


protected async override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    // Facebookにログインする
    var redirectUrl = "https://www.facebook.com/connect/login_success.html";

    var loginUrl = _fb.GetLoginUrl(new
    {
        client_id = _facebookAppId,
        redirect_uri = redirectUrl,
        scope = _permissions,
        display = "popup",
        response_type = "token"
    });

    var endUri = new Uri(redirectUrl);

    var WebAuthenticationResult = await WebAuthenticationBroker.AuthenticateAsync(
                                            WebAuthenticationOptions.None,
                                            loginUrl,
                                            endUri);

    if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.Success)
    {
        var callbackUri = new Uri(WebAuthenticationResult.ResponseData.ToString());
        var facebookOAuthResult = _fb.ParseOAuthCallbackUrl(callbackUri);
        var accessToken = facebookOAuthResult.AccessToken;
       
        if (String.IsNullOrEmpty(accessToken))
        {
            // ユーザーがキャンセルしたなどでログインしていない場合。
        }
        else
        {
            // ユーザーがログインしてトークンが帰ってきた場合
            LoginSucceded(accessToken);
        }

    }
    else if (WebAuthenticationResult.ResponseStatus == WebAuthenticationStatus.ErrorHttp)
    {
        throw new InvalidOperationException("HTTP Error returned by AuthenticateAsync() : " + WebAuthenticationResult.ResponseErrorDetail.ToString());
    }
}

private async void LoginSucceded(string accessToken)
{
    dynamic parameters = new ExpandoObject();
    parameters.access_token = accessToken;
    parameters.fields = "id, name";

    dynamic result = await _fb.GetTaskAsync("me", parameters);

    this.nameTextBlock.Text = "ようこそ!! " + result.name + "さん";
}

 簡単に上記コードの解説をします。

_facebookAppIdプロパティ

 アプリケーションIDを記述します。Facebookの開発者ページで登録したアプリケーションのIDを指定します。

FacebookClientクラス

 Facebook連携を行うためのクラスです。

FacebookClient.GetLoginUrlメソッド

 アプリケーションを実行すると、画像のようにFacebookのログインページが表示されます。これはGetLoginUrlメソッドで取得したURLを表示した結果で、WebViewに表示したWebサイトのページです。

ログイン画面
ログイン画面

WebAuthenticationBroker.AuthenticateAsyncメソッド

 ログイン画面を表示し、その結果を取得します。ログイン処理が成功すると、Facebook側からデータを取得するためのトークンが帰ってきます。

FacebookClient.GetTaskAsyncメソッド

 取得したトークンを元にユーザー情報の取得を行います。今回は自分(me)のIDと名前(id, name)を取得してきています。

 サンプルを実行すると、下図のようにFacebookのユーザー名を取得します。

ストアアプリの実行結果
ストアアプリの実行結果

Facebook連携のまとめ

 ライブラリを利用することで、少ないコードでFacebookとの連携を行うことは可能ですが、今回のコードを見ての通り、Facebook側の開発者登録やAPIの知識が要求されます。

 FacebookやTwitterとの連携は、SNSの機能をストアアプリに取り込むことができますが、SNS側の変更の影響でストアアプリ側に変更の必要が発生するなど、SNS側に左右される側面もあります。SNS側の変更は予告されて行われることが大半なので、動向に注意しながら取り入れる機能を検討しましょう。

まとめ

 今回は、HTTP通信で利用するHttpClientクラスを利用しない連携について紹介してきました。RSSフィードから最新の情報を取得したり、ライブラリを利用してSNS連携を促進し、より楽しいストアアプリを作成してみてください。

 本連載はこれで一旦は終了しますが、これからも単発記事や筆者ブログなどでストアアプリ開発の情報をどんどん発信していきますので、よろしくお願いいたします。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
速習 Windowsストアアプリケーション連載記事一覧

もっと読む

この記事の著者

西村 誠(ニシムラ マコト)

 Microsoft MVP Windows Platform Development。 Flash、PHPの開発経験もあり国産ECサイト構築フレームワーク「EC-CUBE」の公式エバンジェリストでもある。 ブログ:眠るシーラカンスと水底のプログラマー 著書:基礎から学ぶ Windowsストアアプリ開発

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7989 2014/10/02 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング