はじめに
前回に引き続きLive FrameItのSDKを利用した仮想フォトフレームアプリケーションの作成です。今回はユーザーのコレクションを取得してLive FrameItから配信される画像を取得・表示まで行います。また,今回は仮想フォトフレームとなる図1のようなアプリケーションを作成しながら進めます。
図1 仮想フォトフレーム
作成するサンプルアプリケーションのソースコードは,この記事の最終ページからダウンロードできます。
登録トークンを使用したデイバスIDの取得
前回,デバイスをLive FrameItに登録するために必要なデバイスIDの取得方法を紹介しました。その際にWindows Live IDアカウントによるユーザー認証をデバイス(またはアプリケーション)側で実装するものと,Live FrameItのWebサイトで行う方法によるもののうち,前者のコードを示しました。今回の最初は後者のコードを簡単に紹介します。Windows Live ID Client SDKを使用しないため,たいていのプログラミング言語で実装が可能です。ただし紹介するコードは前回同様VB.NETです。
デバイス側でLive IDアカウントによるユーザー認証を行わない代わりに登録トークンという文字列を使用してデバイスをLive FrameItへ登録します。詳しい手順は前回を参照してください。
登録トークンの取得
まずデバイスは,登録トークンをLive FrameItサービスへ要求し取得します。Webサービスを呼び出すためにサービス参照を追加する必要があります。こちらも詳しくは前回を参照してください。登録トークンの取得には,サービス参照によって作成されたクラスDeviceSvcSoapClientクラスのGetClaimTokenメソッドを使用します。メソッドの引数は,製造元の名前とシリアル番号です。いずれも64文字以下で自由に設定します。
' (注: まだ不完全な例です)
Dim client = New DeviceSvcSoapClient
Dim manufacturerId = "Virtual Photo Frame"
Dim serialNumber = Now.Ticks.ToString
Dim result = client.GetClaimToken(manufacturerId, serialNumber)
Dim calimToken = result.ClaimToken
GetClaimTokenメソッドの戻り値は,GetClaimTokenResults型です。このクラスの持っているClaimTokenプロパティを参照すると登録トークンが取得できます。この取得したトークンをユーザーに提示し,Live FrameIt Webサイト(図2)でトークンをユーザーに入力してもらいます。GetClaimTokenResults.ClaimUrlプロパティを参照するとユーザーがトークンを入力するWebページのアドレスを取得できます。
デイバスIDの取得
ユーザーによる登録トークンの入力が完了すると,登録トークン要求時に指定した製造元の名前とシリアル番号および取得した登録トークンを使用して,デバイスIDが取得できます。取得にはDeviceSvcSoapClientクラスのDeviceBindメソッドを使います(前回はDeviceBindUserメソッドを使いました)。Live IDアカウントのユーザー認証がないためHTTPヘッダーフィールドの追加など前回のような複雑な処理は必要ありません。以下に一連のコードを示します。
Private Sub RegisterDeviceWithToken()
Dim result As DeviceBindResults
Using client = New DeviceSvcSoapClient
Dim manufacturerId = "Virtual Photo Frame" '製造元の名前
Dim serialNumber = Now.Ticks.ToString ' シリアル番号
' 登録トークンの取得
Dim tokenResult = client.GetClaimToken(manufacturerId, serialNumber)
If tokenResult.ResponseCode <> 0 Then
' (ResponseCode = 1 のとき取得失敗)
Exit Sub
End If
' ユーザーにトークンの提示
MessageBox.Show(tokenResult.ClaimUrl & " へアクセスして登録トークン " & _
tokenResult.ClaimToken & " を設定してください。" & vbCrLf & _
"設定完了後 OK ボタンをクリックしてください。")
' デバイスIDの取得
result = client.DeviceBind(tokenResult.ClaimToken, manufacturerId, serialNumber)
End Using
If result.ResponseCode = 0 Then
' 取得成功 (ResponseCode = 0)
' デバイスIDの保存例 (プロジェクトのプロパティの設定で String型の DeviceId という値を追加しておきます)
My.Settings.DeviceId = result.DeviceId
My.Settings.Save()
End If
End Sub

