はじめに
前回は、Facebookの開発者サイトへのアプリケーション登録、アカウント認証、アクセストークンの取得を実装しました。
今回はアクセストークンを使って、友達リストの取得やステータスとリンクの共通を実装してみましょう。前回のおさらいを兼ねて、アクセストークンを分離ストレージに保存して、いつでも使いまわせるようにしましょう。
アクセストークン要求を行うExchangeCodeForAccessTokenAsyncメソッドを非同期にて実行し、サーバーからのレスポンスをoauthClient_ExchangeCodeForAccessTokenCompletedメソッドで受け取りました。このメソッドの中ではアクセストークンをTextBlockに表示させる処理を実装していました。
分離ストレージにアクセストークンを保存します。IsolatedStorageSettingsクラスを利用しますので、ファイルの先頭にSystem.IO.IsolatedStorageのusingディレクティブを定義します。
TextBlockへの表示と同時に保存処理を行いたいので、以下のコードの通り実装を行います。分離ストレージについては連載第29回をご覧ください。
これでアカウント認証後にアクセストークンが保存できました。分離ストレージからアクセストークンを取り出す場合には下記のメソッドを使用するようにしましょう。
友達リストを取得する
友達リストの取得タイミングですが、ここではテスト的に友達リストを表示するページを作りましょう。ページの名前は「FriendsPage.xaml」として、ListBoxコントロールを配置します。
まずは、MainPageからアプリケーションボタンをクリックするとページ遷移するようにします。
ページ遷移後に呼ばれるOnNavigatedToメソッドにて、FacebookClientインスタンスを生成して、友達リストの取得要求を非同期で実行します。
サーバーからレスポンスが返ってくるとclient_GetCompletedメソッドが呼び出されます。GetResultDataメソッドで取得できるレスポンスデータがobject型なので、データを扱いやすいようにDictionary型にキャストします。
友達リストは下記のようにJSON形式で返ってきます。配列の形で友達の名前と(Facebookの)ユーザーIDを取得することができます。
レスポンスからFacebook.JsonArray型で友達リストを取得します。友達リストから友達の名前を取り出してリストへ表示しています。
上記のコードを実行してみました。友達リストがListBoxに表示されています。
ステータスを投稿する、リンクを共有する
次にFacebook C# SDKを使用して、Facebookのウォールにステータスを投稿、またはリンクの共有をおこなってみましょう。
まず、ウォールにステータスを投稿するには、OAuthの認証処理で使用したパーミッションに「status_update」を追加する必要があります。
prams["scope"]で設定しているパーミッションに「status_update」を追加します。
ステータスを投稿する
FacebookClientインスタンスを生成して、アクセストークンを設定します。友達リストの取得と異なり、今回は投稿ですのでGetAsyncメソッドではなくPostAsyncメソッドを使用します。PostAsyncメソッドのパラメータに投稿したい情報を格納します。
具体的にはDictionary<string, object>型のディクショナリーを作成し、キーと値を設定します。ステータスだけ投稿できればよいので、以下のように「message」のキーに「テスト投稿です。」と値を設定します。
パラメータの設定が終われば、FacebookClient.PostAsyncメソッドで送信します。
サーバーからレスポンスが返ってくるとclient_PostCompletedメソッドが呼び出されます。GetResultDataメソッドで取得できるレスポンスデータがobject型なので、データを扱いやすいようにDictionary型にキャストします。
成功のメッセージボックスが表示された後に、自分のウォールを確認するときちんと投稿できているのが確認できます。
リンクを共有する
ステータスの投稿で使用した「message」以外にも、以下のようなパラメータが存在しています。OS標準の投稿APIのよりも細かな設定を行うことができます。
上のスクリーンショットの通り、ステータス項目をすべて埋めて投稿するのに以下のように指定しました。
投稿が完了すると、先ほどと同様にclient_PostCompletedメソッドが実行されます。
さいごに
今回は、Facebookに登録されている友達リストを取得し、ウォールにステータスの投稿とリンクの共有処理を実装してみました。
単にステータスを投稿するだけであったり、リンクを共有したいだけであれば、連載第33回でご紹介したShareStatusTaskやShareLinkTaskで充分な場合は多々あります。
Facebook C# SDKを利用してステータスの投稿機能を実装したほうがよいケースとしては、例えばアプリケーション内で写真をアルバムにアップロードして、そのままウォールへステータスを投稿したい場合などでしょう。アプリケーションでFacebookへの認証を行っていたとしても、OS側でFacebookの認証が済んでいない場合があります。ShareStatusTaskの実行後、更に認証処理が必要となってしまい、ユーザーに不便な思いをさせてしまいます。使いやすいアプリケーションを目指して、取捨選択して頂ければと思います。
次回も引き続き、Facebook C# SDKを利用したTipsをご紹介したいと思います。今回は以上で終わりです。ありがとうございました。