Windows Phone アプリにおける Push Notification の活用 ~ クラウドカバー Episode 64

 

今回は Steve に代わって Ryan Dunn をゲストに迎え、Windows Phone アプリケーションにおける Push Notification 機能の活用についてディスカッションします。

 

 

まずはいつものようにニュースから。

New and Updated SQL Azure Labs Available

Windows Azure Training Kit にて SQL Azure 関連のコンテンツが追加、更新されました。

 

新規に追加されたハンズオンラボは以下の通りです。

  • SQL Azure Data-tier Applications

SQL Azure / SQL Server の相互運用を効率化する Data-tier Application Component(DAC) に関するハンズオンラボです。既存データベースのスキーマ、オブジェクトをスクリプト化し、構成管理を行ったり、他のデータベースインスタンスへの移行を支援します。

DAC は開発者が中心となり、DBスキーマ(とアプリケーション)の更新、または、オンプレミスとクラウドのDB移行や連携、を行う際にコアになる技術です。ぜひこの機会にハンズオンで DAC の概要をつかんでください。

 

  • SQL Azure Data Sync

SQL Azure において、SQL Azure 同士の、あるいは SQL Azure と SQL Server 間のデータ同期を支援する Data Sync 機能に関するハンズオンです。

 

  • SQL Azure Federations

複数の SQL Azure データベースをフェデレーション(連携)させ、論理的に一つのデータベースとして扱う SQL Azure Federation 機能に関するハンズオンです。 これまで SQL Azure の課題の一つとして挙げられていたDBサイズの上限を理論上なくす運用が可能になります。

 

また、以下のハンズオンラボが更新されています。

  • Build Your First Report With SQL Azure Reporting

SQL Azure において Reporting 機能を使用するためのファーストステップなハンズオンです。ここ数年 SQL Server のシェア拡大において、その人気の背景となっている Reporting Service (Business Intelligence な機能)をクラウドでも利用できるようになります。

 

最後に、デモとして Windows Azure Cmdlets(コマンドレット)を使って SQL Azure を管理するシナリオが追加されています(”Provisioning SQL Azure Servers using Cmdlets”)。

 

Now Available: Relay Load Balancing for Windows Azure Service Bus

Windows Azure の Service Bus において、メッセージの Relay 機能に負荷分散機能が追加されました。一つのエンドポイントで、複数の Service Bus がメッセージを扱うことができるようになります(最大25エンドポイントになります)。

これまで同じエンドポイントでリスナーを作成すると、AddressAlreadyInUseException が発生していましたが、25個まではエラーが発生しなくなります。そのためこのエラーを使ったロジックを書いているコードの場合、今回の変更により影響を受ける可能性がありますので、内容をご確認ください。

 

BlobShare Sample: ACS-Protected File Sharing

前回のクラウドカバーにて紹介した BlobShare において、ACS がどのように利用されており、セキュアなファイル共有を実現しているかについて Admiral Identity (提督 Identity。ちなみに旧名(出世前)は “キャプテン Identity”) の Vittorio のブログです。

てか、Vitotrio の奥さんが、AI class を取っている、という箇所も気になります。テクニカルな夫妻って楽しそうですね スマイル

 

 

Microsoft Lowers Storage Cost for Blob and Table Storage in Windows Azure

フォルトトレラント(障害に強い)な構造を持ちながら、低価格で気軽に使用できる Windows Azure ストレージのか価格が “さらに” 安くなりました!

まず、通常利用の際の GB あたりの価格が、15セント/GB から 14セント/GB になっています。

さらに、Windows Azure のストレージサービスを使用し、大量のデータを利用いただく際に、使えば使うほど単価が安くなる、コミットメント制の価格も開始しています。

例えば、月間で 100TB 利用したい、という場合、11.2 セント/GB という価格が適用されます(ちなみに、日本円だと、9.79円/GB の価格になります)。

なお、このコミットメントでの購入の場合、購入の単位は TB 単位になります。

日本語での詳しい情報は、Windows Azure Platform ストレージ コア のページを参照ください。

 

Deploying Node.js Applications to Windows Azure via Blobs or Git Sync

Steve のブログから。Node.js アプリケーションの実行環境を Blob もしくは Git からセットアップするための方法の紹介です。

米国英語から、イギリス英語に翻訳(?)する、https://www.twoenglishes.com/ なサンプルも公開されています。

image

さらっと、したサンプルですが、Trafiic Manager や CDN をさくっと、使っているあたりはさすが Steve です。。。

 

ではいよいよ本題の、Windows Phone アプリの開発に関して。

Windows Azure Toolkit for Windows Phone では、Visual Studio 用のプロジェクトテンプレートを用意しており、Push Notification、Access Controle Service あるいは Storage アクセスといった機能をワンパッケージで提供しています。

 

最新のバージョンでは、リクエストの多かった「機能ごと」の利用を可能にできるようにリファクタリングを行い、NuGet(にゅーげっと) によって、必要なパッケージのみをインストール可能になりました。

image

 

では実際に NuGet を利用した開発のデモ、ということで Viusla Sutdio を立ち上げる Wade。

Wade がデモで使用している Visual Studio には、Windows Phone および Windows Azure の SDK がインストールされていますが、Windows Azure Toolkit for Windows Phone はインストールされていません。

 

この環境で、Windows Phone 用のテンプレートを使用してプロジェクトを作成します。

image

 

次に、作成されたプロジェクトにおいて NuGet を使って Push Notification のためのパッケージをイントールします。

手順としては、プロジェクト名を右クリックし、出てきたメニューから “Manage NuGet Packages…” をクリックします。

image

 

その後立ち上がってきたウィンドウで Online にあるパッケージカタログから、キーワード “push notification” あたりで検索して、”Push Notification Registration Service Client for Windows Phone (with a base notifications page)” をインストールしましょう。

image

 

この際に依存するパッケージがある場合は、そのパッケージのインストールも NuGet のほうでよろしく実施してくれます。

 

ちなみに Wade は NuGet のパッケージリストを独自に( “Wade’s Nugets”) を作っているようです。この URL 探したのですが見つけることできず。ご存知の方いらっしゃいましたら twitter で @haruulala までつぶやいていただけると嬉しいです スマイル

image

 

ちなみに、パッケージのインストールを UIベースではなく、Package Manager Console で行う場合、以下のコマンドでOKです。

PM> Install-Package PPhone.Notifications.BasePage

 

なお、NuGet の Package Manager の使い方は chack のこちらの Blog なんかも参考にしてください。

 

 

無事にパッケージのインストールが終わりました。ドキュメントも一緒についてくるのでまずは目を通しましょう。

image

 

NuGet により Push Notification に必要となる基本クラス、画面が追加されています。

アプリケーション立ち上げ時に初期化を行う PushContextBaseInitializer クラスや、Notification の画面が追加されているのが確認できます。

image

 

つぎに、プロジェクトの “Properties” にあるマニフェストファイル WMAppManifest.xml を開き、デフォルトの立ち上げページを今回インストールされた Pages/NotificationsPage.xaml に変更しておきましょう。

image

 

つづいて、追加した DeepLinkPage に TectBlock の追加と、

image

 

以下のコードの追加。

 

protected override void OnNavigatedTo(NavigationEventArgs e) {

if (this.NavigationContext.QueryString.ContainsKey("message")) {

this.QueryString.Text = this.NavigationContext.QueryString["message"];

}

else {

this.QueryString.Text = "no message was received.";

}

}

 

Cloud Cover 中ではさくっと進みますが、Using の追加も忘れずに。

image

 

さて、クライアントサイドの準備ができたので、つぎはサーバーサードの開発を。

ソリューションに Windows Azure プロジェクトを追加しましょう。今回は MVC3 の Web Role を追加します(Windows Phone Cloud Application のテンプレートではなく、通常の Windows Azure Project のテンプレートを使用するところがミソです)。

image

 

追加したWindows Azure プロジェクトに、NuGet で Push Notification Registration Cloud Service パッケージをインストールします。このパッケージは Windows Phone へ通知を送る際のストレージサービスを提供するためのコードです。

image

 

インストールの際には、Ryan からのナイスアドバイス、ライセンス条項(License Terms) で使用条件の確認と承諾も忘れずに。

image

 

NuGet によって必要なファイルが追加されたプロジェクトですが、デフォルトでは Notification の際に使用するストレージとして Windows Azure ストレージを使用するように設定されています。

このストレージに関しては、コードを分離することで、Service Bus や SQL Azure 等 Windows Azure ストレージ以外のストレージを使用するように変更することもできるとのこと。なお、Windows Azure ストレージの設定に関しては、 Development Storage を使用するような設定になっています。

image

 

さて、Notification のデータをやり取りするサービスが作成できました。最後に Notification を送るためのUIを NuGet からインストールします。

 

次に実施しているのは、クラウドプロジェクトの Web Role のプロパティにおいて、エンドポイントのポート設定の変更。SharePoint Server 等のポート 80 番を使用するサービスをローカルPCにて利用している場合、デフォルトのポート 80 のままではサービスがかぶるので、これを 81 に変更しています。

image

 

以上で準備完了!

ということで恒例の 「F5」 を押せば、Windows Phone のエミュレーターと、サーバーサイドの MVC アプリケーションがブラウザで立ち上がってきます。ここでhttps://127.0.0.1:81/Notifications にアクセスすると、Notification Server の UI が立ち上がってきます

image

 

次に Windows Phone のアプリケーションから、Notification を受け取りますよ、というチェックをオンにすると、その情報が Windows Azure ストレージ(今回はローカルの Development Storage)に記録されます。ブラウザを更新すると、サービス側で登録情報として確認できます。

image

 

ここで実際に Notification としてテキストメッセージ “raw message” を送信すると、、、

image

 

Windows Phone に対して、即座にメッセージが送られます。

このほか、Notification の形式としてはタイルや、トーストも用意されていますので、目的に応じて使い分けることが可能です。

 

さてここまは、ACS なしで Notification を実行してきました。

次は、ACS ありで実行できるように変更していきます。

最初に、Window Phone プロジェクトに、Nuget で Push Notification Registration Service Client for Windows Phone with Access Control Service を追加します。

image

 

今回は、ACS の名前空間と、reaml の書き換え、最初のページを Login ページに変更する、など NuGet で一緒にゲットした解説を見ながらコードを書き換えましょう。

スニペットを利用してさくさくデモを実施する Wade と、Wade に「コード書こうぜ」的なプレッシャーをかける Ryan のやり取りもお楽しみくださいスマイル

 

さて、お次はサーバー側の書き換えです。NuGet で Push Notification Registration Cloud Service with Access Control Service をゲットしましょう。

image

 

いくつかの設定を書き換えた後、再度デバッグ実行すると、Windows Phone エミュレーターではまず Login の画面が表示されます。

Live ID でログインを実施すると、ACS から認証トークンを受け取った状態で Notification のページに遷移しますので、ここで “Enable Push Notification” にチェックを入れると、サーバーに対して認証トークンを保持した状態で Notification の申し込みリクエストが送信されます。

image

 

サーバー側の情報を確認すると、Live ID により渡された NameIdentifier の値を User ID として、Notificaiton のリクエストを受け付けているのが確認できます。image

 

これで、ACS なしの際と同様に、テキスト、タイル、トーストでの Notification を送信できるようになりました。

Push Notification を利用することで、Windows Phone アプリケーションに対して様々な形でメッセージを伝達できるようになります。特にタイルに対する Notification はアプリケーションの魅力を増すのに一役買うかと。

是非、お試しください!

 

さて、最後は恒例の Tip of the week!

image

 

今回は、ゲストの Ryan のブログより、デバッガーにアタッチする際にエラーが出た場合の対処方法について。

Windows Azure のエミュレーター環境において、デバッグ実行時にのみ、しかもデバッガーへのアタッチ時にエラーが発生することがまれに起こるようです。

 

その際の対処法として、 %UserProfile%\AppData\Local\Temp ディレクトリにおいて生成されている Visual Studio Web Debugger.log を参照すればよいよ、というのが今回の Tips です。

 

以上、クラウドカバー Episode 64、Windows Phone アプリケーションにおける Push Notification の活用でした。

では!