Facebook SDK for .NETを使い、アプリから画像をFacebookに投稿させるには2カ月で160本作った還暦開発者が送る10のアプリ開発ノウハウ(4)(5/5 ページ)

» 2013年11月11日 18時00分 公開
[薬師寺国安,PROJECT KySS]
前のページへ 1|2|3|4|5       

Facebookにアップロード画面のロジックコード

 次に[ソリューション・エクスプローラー]内のFacebookInfoPage.xamlを展開して表示される、FacebookInfoPage.xaml.vbのコードを記述する。

Facebookにアップロード画面がアクティブになった時の処理(OnNavigatedToメソッド処理)

 先のページから渡された画像を取得し、MainImageに表示する。

    Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
        myBmp = CType(e.Parameter, BitmapImage)
        MainImage.Source = myBmp
    End Sub

Facebookにアップロード画面の「facebookにアップロード」アイコンがタップされた時の処理(UploadButton_Clickメソッド処理)

 このプログラムの肝となる、Facebookに画像をアップする処理だ

    Private Async Sub UploadButton_Click(sender As Object, e As RoutedEventArgs) Handles uploadButton.Click
        uploadButton.IsEnabled = False
        If messageTextBox.Text = String.Empty Then
            Dim message As New MessageDialog("コメントを入力してください。")
            Await message.ShowAsync
            uploadButton.IsEnabled = False
            Exit Sub
        Else
            ProgressRing1.IsEnabled = True
            ProgressRing1.IsActive = True
            myFB = New FacebookClient(accessToken)
            AddHandler myFB.PostCompleted, Async Sub(mySender As Object, myArgs As FacebookApiEventArgs)
                                      If myArgs.Cancelled Then
                                    Dim cancellationError = myArgs.Error
                                     ElseIf myArgs.Error Is Nothing = False Then
                                          Dim myDialog2 As MessageDialog = New MessageDialog("アップロード失敗")
                                          Await myDialog2.ShowAsync()
                                          flag = False
                                       Else
                                          flag = True
                                       End If
                           End Sub
            ' このプログラムの肝、Facebookにコメント付き画像をアップロードする処理。
            Using myStream As IO.Stream = Await myFile.OpenStreamForReadAsync()
                Await myFB.PostTaskAsync("/me/photos", New With {.message = messageTextBox.Text, .file = New FacebookMediaStream() With {.ContentType = "image/jpeg", .FileName = FileName}.SetValue(myStream)})
            End Using
        End If
        If flag = True Then
            ProgressRing1.IsEnabled = False
            ProgressRing1.IsActive = False
            Dim message As New MessageDialog("アップロード成功")
            Await message.ShowAsync
            uploadButton.IsEnabled = True
        Else
            Dim message As New MessageDialog("アップロード失敗")
            Await message.ShowAsync
            uploadButton.IsEnabled = True
            Exit Sub
        End If
    End Sub
End Class

 まず、非同期処理で行われるため、メソッドの先頭にAsyncを追加し、「facebookにアップロード」アイコンの使用を不可とする。

 コメント欄に何も入力されていなかったらメッセージを表示し、処理を抜ける。

 コメントが入力されていた場合は、以下の処理を行う。プログレスリングを動作させる。モジュール変数accessTokenで初期化された、新しいFacebookClientのインスタンス、myFBオブジェクトを作成する。AddHandlerステートメントでは、Facebookに投稿が完了した場合の、イベントハンドラを追加する。イベントハンドラ内では以下の処理を行う。

 投稿が失敗した場合は、「アップロード失敗」のメッセージを表示し、メンバー変数flagをFalseで初期化する。それ以外はTrueで初期化する。

 OpenStreamForReadAsyncメソッドでは、指定したファイルから読み取るストリームを取得し、変数myStreamで参照する。

 PostTaskAsyncメソッドで、パスに "/me/photos"、パラメータに、入力したコメント、ContentTypeに"image/jpeg"、FileNameにモジュール変数のFileNameを指定して、Facebookサーバに非同期処理のPOSTリクエストを送信する。

 ブール型メンバー変数flagがTrueなら、プログレスリングの動作をやめ、「アップロード成功」と表示する。「facebookにアップロード」アイコンの使用を可能にする。それ以外の場合は「アップロード失敗」と表示して、「facebookにアップロード」アイコンの使用を可能にする。

次回は、指定したフォルダー内の画像を、スライド形式で表示させる

 今回は、ここまでだ。また次回の記事でお会いしよう。次回は、指定したフォルダー内の画像を、スライド形式で表示させる方法を紹介する。

関連リンク

本コンテストでは、2013年9月1日〜12月1日に新たにWindowsストアに新規公開されたアプリを募集します。入賞したアプリの製作者には、総額130万円の賞金が授与されますので、ふるってご応募ください。

著者プロフィール

PROJECT KySS 薬師寺 国安(やくしじ くにやす)

1950年生まれ。フリーVBプログラマ。高級婦人服メーカーの事務職に在職中、趣味でVBやActiveXに取り組み、記事を執筆。2003年よりフリー。.NETやRIAに関する執筆多数。Windowsストアアプリも多数公開中(約270本)。

 

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。

PROJECT KySSは、1997年に薬師寺聖と結成したコラボレーション・ユニット


前のページへ 1|2|3|4|5       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。