使ってみよう! Windows Live SDK/API

第47回 デスクトップアプリでWindows Live統合

この記事を読むのに必要な時間:およそ 8 分

サンプルアプリの作成

それでは,実際にアプリを作ってみましょう。サンプルアプリは,Visual Studioを利用してWPFアプリとして作ります。言語は,Visual Basicを使用します。無償のVisual Basic 2010 Expressで作れます。

サンプルアプリは,.NET Frameworkを使用しますが,Webブラウザーコントロールを利用できる言語やプラットフォームであれば同様の方法でアプリが作れます。もちろん,iOSAndroidでも可能です。ぜひトライしてみてください。

今回のサンプルアプリは,Live Connectとは関係ありませんが,Liveメールなどのアプリに似せて,リボンUIにします。リボンを使うには,Microsoft Ribbon for WPFをダウンロードし,インストールを行います。するとVisual Studioのツールボックスにリボンコントロールが追加されます図3⁠。また,REST APIでJSONのデータ処理に,Json.NETを利用しています。あらかじめ準備してください。

図3 ツールボックス内のリボンコントロール

図3 ツールボックス内のリボンコントロール

それでは,新しいプロジェクトの作成で,WPFアプリケーション プロジェクトを作成し,アプリを作っていきましょう!

サインインウィンドウ

最初に,認証と認可処理を行うサインインウィンドウを作ります。Webブラウザーコントロールを使って,認可画面の表示と,アクセストークンの取得を行います。

新しい項目の追加から,プロジェクトに「ウィンドウ(WPF⁠⁠」を追加します。ここでは,名前をSignInWindow.xamlとします。XAMLコードを編集して以下のようにWebブラウザーコントロールを追加します。

SignInWindow.xaml

<Window x:Class="SignInWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="サインイン" Height="450" Width="560">
    <Grid>
        <WebBrowser x:Name="SignInWebBrowser" />
    </Grid>
</Window>

SignInWindow.xaml.vbファイルを開いて,コードを編集します。サインインウィンドウの使い方として,インスタンスを生成するときにClient IDScopeを渡すようにします。コンストラクタを次のように記述します。

Private ClientId As String
Private Scopes As New List(Of String)

Public Sub New(clientId As String, scope As IEnumerable(Of String))
    Me.ClientId = clientId
    Me.Scopes.AddRange(scope)

    InitializeComponent()
End Sub

ウィンドウを開いた時にWebブラウザーコントロールに認証・認可画面を表示します。ウィンドウのLoadイベントを次のように記述します。認可画面のURLのパラメーターにClient IDとScopeを指定します。

Private Const AuthorizeUriFormat As String = "https://oauth.live.com/authorize?client_id={0}&scope={1}&response_type=token&locale=ja&display=popup&redirect_uri=https://oauth.live.com/desktop"

Private Sub SignInWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded
    SignInWebBrowser.Navigate(
        String.Format(AuthorizeUriFormat, Me.ClientId, String.Join("+", Me.Scopes)))
End Sub

サインインウィンドウ クラスに,アクセストークンを参照するためのプロパティを次のように追加します。

Private _AccessToken As String
ReadOnly Property AccessToken As String
    Get
        Return _AccessToken
    End Get
End Property

ユーザーが認可処理を終えると,https://oauth.live.com/desktopにリダイレクトされます。WebブラウザーコントロールのNavigatedイベントを使って,表示されているページのURLを取得し,アクセストークンの部分を抜き出します。

Private Sub SignInWebBrowser_Navigated(sender As System.Object, e As System.Windows.Navigation.NavigationEventArgs) Handles SignInWebBrowser.Navigated

    ' 表示しているページの URL が https://oauth.live.com/desktop でなければ処理を抜ける
    Dim redirectUri = New Uri("https://oauth.live.com/desktop")
    If e.Uri.Host <> redirectUri.Host OrElse
       e.Uri.AbsolutePath <> redirectUri.AbsolutePath Then
        Exit Sub
    End If

    ' URL のフラグメント部分から access_token の値を取得する
    If e.Uri.Fragment.Contains("access_token") Then
        Dim items = New Dictionary(Of String, String)
        Dim param = e.Uri.Fragment.Substring(1).Split({"&"c, "="c})

        For i = 0 To param.Length - 1 Step 2
            items.Add(param(i), param(i + 1))
        Next

        If items.ContainsKey("access_token") Then
            ' URL に access_token が含まれていた場合

            _AccessToken = items("access_token")
            Me.DialogResult = True
        End If
    End If

    ' サインインウィンドウを閉じる
    Me.Close()
End Sub

最後にウィンドウを閉じて完了です。以上で,サインインウィンドウ部分ができました。

著者プロフィール

松江祐輔(まつえゆうすけ)

日本システムウエア株式会社 勤務。現在,ハードウェア設計・検証業務を担当。大学生・大学院生時代はベンチャー企業 有限会社ミレニアムシステムズにプログラマーとして従事。趣味はプログラミング。好きな言語はVisual Basic。Microsoft MVP for Windows Live Platform(Jul 2010 - Jun 2011),Windows Live(Jul 2011 - Jun 2013)。

URL:http://katamari.jp