プログラムの修正
導入したライブラリを利用して、Facebookと連携を行いFacebook上のユーザー名を取得します。
本コードはSDKのページのサンプルコードの必要な部分を抜粋したものです。
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連携を促進し、より楽しいストアアプリを作成してみてください。
本連載はこれで一旦は終了しますが、これからも単発記事や筆者ブログなどでストアアプリ開発の情報をどんどん発信していきますので、よろしくお願いいたします。


