銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

Windows Phone アプリでバーコードスキャン機能を実装したい (WP8.1編)

Windows Phone Advent Calendar の1日目です。

www.adventar.org

先日、Doorkeeper のイベント管理者がチェックインをWindows Phoneから行うためのアプリをリリースしました。

www.microsoft.com

OS標準のバーコードリーダーを使うと、いちいちブラウザを起動しないとチェックインが完了しなかったのに対しこのアプリだとバーコードスキャンした時点でチェックインが完了します。このアプリだとスキャンした時点でHTTPリクエストを発行するため、新たにアプリを起動することなくチェックインができます。

ロジックとしては、バーコード認識 => 認識したURLに対してHTTPリクエスト という単純な処理ですが、問題はバーコード認識部分です。今回はライブラリを使ってWindows Phone でバーコード認識する方法を紹介します。

バーコード認識ライブラリは Zxing Barcode Scanning Library というものを使いました。 Mono上でiOSやAndroidにも対応しているようです。

github.com

qiita.com

Xamarinのページに紹介もあります。

Getting Started with ZXing.Net.Mobile

Windows Phoneにも対応していて、使い方がわかりやすかったので採用したのですが、Windows Phoneで使う場合の最大の懸念としては、Windows Phone 8.1 Silverlightに対応していて、Universalアプリ(UWP含む)には対応していないという点です。Issue見る限りでも、ちょっと対応はなさそうかなあという気配を感じます。

github.com

とはいえ、このアプリを作った時にはまだWindows 10 Mobileは正式版にはなっておらず、日本で使えるWindows PhoneのMADOSMAではWindows 10 Preview は動かないこともあり、Silverlightでの開発を行いこのライブラリを採用することにしました。

使い方はサンプルもあるので割と簡単です。XAML側にUI要素を配置する必要はなく、スキャン実行すると画面全体がスキャン画面になります。アプリに使ったコードを元にサンプルコードを作りました。

gist.github.com

もう少し改善したいところもありますが、これで動きました。

さて、このコード最大の問題は、MADOSMA・EveryPhone・KATANA01 発表で盛り上がっているWindows 10 Mobile 用のUWPでは動かないコードなことです。WP8.1のSilverlightアプリ自体はWindows 10 MobileにしたMADOSMAで動作確認できました。が、せっかくなのでUWPに移行したいところです。

どうも、ZXing.NET (mobileではない方)はWinRT対応しているので、こちら側はUWPでも参照して動かせそうな気配を感じていますし、実際に移行した記事があります*1

Windows 10 UWP–Migrating a Windows 8.1 App (Part 6 of N) - Mike Taulty's Blog - Mike Taulty's Blog

今日はまだWindows 10 Mobile含めたUWPの開発環境である Visual Studio 2015 RC1が出た直後ということで移行できていませんが、改めて記事にしたいと思います。

*1:Windows 8.1アプリからUWPへの移行ですが