Xamarin.Forms で Facebook の Graph API にアクセスしてみる
とりあえずのアクセストークンが取れたので、このトークンを利用して Graph API にアクセスしてみようと思います
とりあえず便利なライブラリを確保
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 にアクセスしてアカウント情報を取得しています
これを実行してみると
情報がとれました!