読者です 読者をやめる 読者になる 読者になる

しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Xamarin.Forms で Facebook の Graph API にアクセスしてみる

C# JSON Visual Studio Windows ランタイムアプリ Xamarin facebook

とりあえずのアクセストークンが取れたので、このトークンを利用して Graph API にアクセスしてみようと思います

とりあえず便利なライブラリを確保

f:id:matatabi_ux:20150705175750p:plain

Json.Net と Microsoft.Net.Http を共有 PCL プロジェクトに追加してこうなりました

前回 のコードに処理を追加します

/// <summary>
/// Page appearing event handler
/// </summary>
protected override void OnAppearing()
{
    base.OnAppearing();

    // Navigate to facebook authorize page
    this.webView.Source = string.Format(@"https://m.facebook.com/dialog/oauth?client_id={0}&redirect_uri={1}&response_type=code,token",
        AppId,
        WebUtility.UrlEncode(@"http://www.facebook.com/connect/login_success.html"));

    this.webView.Navigating += this.OnNavigating;
}

/// <summary>
/// WebView navigating event handler
/// </summary>
/// <param name="sender">event sender</param>
/// <param name="e">event arguments</param>
private async void OnNavigating(object sender, WebNavigatingEventArgs e)
{
    if (e.Url.StartsWith(@"http://www.facebook.com/connect/login_success.html"))
    {
        this.webView.Navigating -= this.OnNavigating;

        var uri = new Uri(e.Url);
        if (!string.IsNullOrEmpty(uri.Fragment) && uri.Fragment.StartsWith("#access_token"))
        {
            var token = uri.Fragment.Split('&').First().Split('=').LastOrDefault();
            await DisplayAlert("XamarinFacebook", string.Format("OAuth 認証に成功しました, token={0}", token), "OK");

            var client = new HttpClient();
            var result = await client.GetAsync(
                string.Format(@"https://graph.facebook.com/me?access_token={0}", token));

            var json = await result.Content.ReadAsStringAsync();

            var profile = JsonConvert.DeserializeObject(json);

            Debug.WriteLine(profile);
        }
        else
        {
            // Login failed
            await DisplayAlert("XamarinFacebook", "OAuth 認証に失敗しました", "OK");
        }
    }
}

追加したのは下記の部分

var client = new HttpClient();
var resul = await client.GetAsync(
    string.Format(@"https://graph.facebook.com/me?access_token={0}", token));

var json = await resul.Content.ReadAsStringAsync();

var profile = JsonConvert.DeserializeObject(json);

Debug.WriteLine(profile);

HttpClient を利用して直接 facebook の Graph API にアクセスしてアカウント情報を取得しています

これを実行してみると

f:id:matatabi_ux:20150705180423p:plain

情報がとれました!