TwitterとFacebookへの同時投稿を行う(後編)
![](https://thinkit.co.jp/sites/default/files/styles/main_image_730x/public/main_images/4030_main_7.png?itok=Zo3b7msV)
次にソリューションエクスプローラー内のFacebookInfoPage.xamlを展開して表示される、FacebookInfoPage.xaml.vbをダブルクリックしてリスト4のコードを記述します。
ロジックコードを記述する
リスト4 (FacebookInfoPage.xaml.vb)
Option Strict On Imports Facebook
MessageDialogを表示するのに必要なWindows.UI.Popups名前空間をインポートします。
Imports Windows.UI.Popups Public NotInheritable Class FacebookInfoPage Inherits Page Dim myText As String Dim flag As Boolean
ページがアクティブになった時の処理
FacebookLoginPage.xamlから送られた「投稿内容」を取得して、メンバ変数myTextに格納します。
モジュール内で宣言したPublic変数accessTokenで初期化された新しいFacebookClientのインスタンスを作成します。
AddHandlerメソッドでFacebookへのPOSTが完了した時に発生する、PostCompletedイベントにイベントハンドラを指定します。イベントハンドラ内では以下の処理を行います。
エラーが発生した場合には「アップロード失敗」のメッセージダイアログを表示します。
ブール型メンバ変数flagをFalseで初期化します。
それ以外はflagをTrueで初期化します。
キーと値のコレクションを表す、Dictionaryクラスのインスタンス、myParamオブジェクトを作成します。
myParamの”message”に投稿内容を格納しているメンバ変数myTextを指定します。
PostTaskAsyncメソッドで、パスに "/me/feed"、パラメーターにmyParamを指定して、Facebookサーバーに非同期処理のPOSTリクエストを送信します。
ブール型メンバ変数flagがTrueなら「TwitterとFacebookに投稿しました。」と表示します。
非同期処理で行われるため、メソッドの先頭にAsyncを追加します。Asyncが追加されていると、その処理が非同期で行われることを意味します。
Protected Overrides Async Sub OnNavigatedTo(e As Navigation.NavigationEventArgs) myText = CStr(e.Parameter) myFB = New FacebookClient(accessToken) AddHandlermyFB.PostCompleted, Async Sub(mySender As Object, myArgs As FacebookApiEventArgs) If myArgs.Error Is Nothing = False Then Dim myDialog As MessageDialog = New MessageDialog("アップロード失敗") Await myDialog.ShowAsync() flag = False Else flag = True End If End Sub Dim myParam As New Dictionary(Of String, Object) myParam("message") = myText Await myFB.PostTaskAsync("/me/feed", myParam) If flag = True Then messageTextBlock.Text = "TwitterとFacebookに投稿しました。" Else messageTextBlock.Text = "投稿失敗" End If End Sub End Class
今回の応用編では、筆者の解像度1920×1080で作成したサンプルが多かったのですが、この方法は好ましい方法ではありません。
1920×1080を指定して作成すると、Windows 8のハードウエア認定を受けることのできる1366×768の解像度では画面が途切れてしまいます。
そこで筆者は下記のコードを使用して解像度を取得し、画面の表示を変更しています。
Dim myWidth = CInt(Window.Current.CoreWindow.Bounds.Width) Dim myHeight = CInt(Window.Current.CoreWindow.Bounds.Height) If myWidth = 1920 AndAlso myHeight = 1080 Then ~解像度が1920×1080の場合の画面の表示処理~ ElseIf myWidth = 1366 AndAlso myHeight = 768 Then ~解像度が1366×768の場合の画面の表示処理 End If
上記のコードによって解像度による画面の表示サイズの変更を行います。皆さんも一度お試しください。
今回で、応用編は終わりです。基本編と応用編合わせていろいろなサンプルを見てきましたが、いかがだったでしょうか。この連載が、皆様のWindows ストアアプリ挑戦への足がかりになっていただければ、筆者としてはうれしい限りです。是非、挑戦していただきたいと思います。どうも、ありがとうございました。
薬師寺国安