読者です 読者をやめる 読者になる 読者になる

熊小屋日誌

Windows 10 UWPやXamarin, Python、mbed/NetMF/Arduino/Edison, Azureなどぼちぼちと。たまにPCや勉強会、セミナーなどの話題も

第9回まどべんよっかいちの発表資料

勉強会

この7/26に第9回まどべんよっかいちを開催しました。 私からは「Windows.Web.Http.HttpClientとWebAuthenticationBroker」と題して、 Windows 8.xストアアプリやWindows Phone 8.1アプリでWebサービスに アクセスするときに便利な2つのクラスを紹介しました。

サンプルコード

サンプルコードをGitHubで公開しました。

Windows.Web.Http.HttpClient: Windows 8.1での利用例です。

WebAuthenticationBroker: Windows 8.1, Windows Phone 8.1, WPFでの利用例です。

WebAuthenticationBrokerの補足

Windows Phone 8.1でWebAuthenticationBrokerを使った場合、認証画面の呼び出しはAuthenticateAndContinue(Uri requestUri, Uri callbackUri)メソッドで行います(サンプルコードのWebAuthenticationBrokerSample / TwitterOAuth / TwitterOAuth.WindowsPhone / MainPage.xaml.csの106行目)。

このとき、アプリはいったん処理が中断されます。認証が終わると、アプリが再開されてActivatedイベントが発生します。このようにWindows 8.1の場合と認証実行時の動作が異なります。

Windows Phone 8.1において、認証結果を受けてアプリの処理を継続するためには、以下の対応が必要です。

 1. AppクラスにOnActivatedイベントハンドラを実装して、IActivatedEventArgsクラスの引数がIContinuationActivatedEventArgsインターフェースを実装しているか調べる。

 2. 実装している場合は、アプリが継続した場合なので、引数のKindプロパティの値を調べる。(WebAuthenticationBrokerSample / TwitterOAuth / TwitterOAuth.Shared / App.xaml.csの189行目、WebAuthenticationBrokerSample / TwitterOAuth / TwitterOAuth.WindowsPhone / ContinuationManager.csの54行目)

 3. KindがActivationKind.WebAuthenticationBrokerContinuationの場合はWebAuthenticationBrokerの認証画面から戻った場合なので、IContinuationActivatedEventArgsインターフェースの引数をさらにWebAuthenticationBrokerContinuationEventArgsインターフェースでCastしてその値を利用して処理を継続する。サンプルコードでは、IWebAuthenticationContinuableインターフェースを実装したMainPageクラスをrootFrame.Contentから取得して、そのContinueWebAuthenticationメソッドを呼び出しています。

 4. WebAuthenticationBrokerContinuationEventArgsインターフェースは、認証結果のResponseStatusプロパティ(WebAuthenticationResultクラス)があります。WebAuthenticationResultクラスは、認証結果のステータスコードのResponseStatusプロパティ、認証結果の応答のResponseDataプロパティがあり、認証に成功したかどうかと、成功した場合は認証情報を得ることができます。

なお、Windows 8.1ではWebAuthenticationBroker.AuthenticateAsyncを非同期で呼び出してその結果を処理すればよいので、このような考慮は不要です。