よくわかるmpns - tmyt

Post on 24-May-2015

690 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Windows Phone Arch NAGOYAyutaka Tsumori

よくわかるMPNS

自己紹介• tmytです•大学院生は世を忍ぶ仮の姿• 昨日修士論文を提出しました• 4月から社会人になってしまいます…•白紙マスターです• Microsoft MVP for Device Application Development(Jan.2011-Dec.2012) だったりします

おしながき•スマートフォンを取り巻く環境• Pushと Pull• MPNSのおはなし•実装例

スマートフォンを取り巻く環境•携帯端末で扱う情報の変化• 静的Web• メール• 動的Web• リアルタイムWeb

むかしのおはなし•遙か昔 Air H”とかで PDAで必死通信してた頃• Webブラウザで普通のWebページを見ていました• 帯域も細いので画像も圧縮したりしてました•端末も今ほど速くはないので派手なことはできませんでした•電池も多くはないので今ほど派手な通信とかもできませんでした

時代が解決したこと•通信回線の高速化• 64Kbps → 7.2Mbps

•演算速度の向上• SH-3 40MHz → MSM8655 1GHz

•バッテリの変化• 乾電池 2本 (20時間 ) → Li-ion 1460mAh(280時間 )

最近のトレンド•大容量のリッチコンテンツ• 動画• ゲーム•リアルタイムな情報のやりとり• SMS/MMS• RSS• ソーシャル

リアルタイムな変化を受け取る•例えば• GPSで目的の位置にたどり着いたときに• SMSで特定のメールが届いた時に• ネットワークの状態が変化した時に• 端末がスリープから起き上がった時に• SNSで自分宛のメッセージが送信された時に

Pushと Pull•外の世界との通信には大きく分けて 2種類• Push• Pull

•それぞれに違った特性があります

Pull•ユーザ (端末 )が能動的に情報を取得する• 例えば• ブラウザでWebページを開く• メールボックスの中身をダウンロードする• Marketplaceからアプリをインストールする

•情報を引っ張ってくる (Pull)イメージ•任意のタイミングで通信を開始できるのでバッテリなどを意識できる

Push•ユーザ (端末 )が受動的に情報を取得する• 例えば• 電話の着信• メールが届いた• インスタントメッセージング

•情報が網側から飛んでくる (Push)イメージ•リアルタイムに情報を扱うことができる反面バッテリの消費量が増加する

Pushの実装方法•いくつかの方法• 網でサポートされた Push配信• 例えば• SMS通知

• 本当の意味で Push配信• TCP/IPで通知チャネルを使用した Push配信• 例えば• インスタントメッセージング

• ネットワークを介した擬似的な Push配信

OSに見る Push通知フレームワーク•Windows Phone• Microsoft Push Notification Service (MPNS)

• iPhone• Apple Push Notification Service (APNS)

• Android• Cloud to Device Messaging (C2DM)

•Windows Mobile (おまけ )• 自力

フレームワークの挙動• OSごとに細かな違いはあるがだいたい同じ• OSへ Push通知の利用を登録• OSは各社のサービスへレジスト• その後通知トークンが取得できる• 任意のタイミングで通知トークンを使用しサービスサーバはメッセージを送信• サービスサーバはデバイスへメッセージを転送• メッセージを受け取ったデバイスは適宜処理を行う

フレームワークの挙動の図

MPNSサーバ Webサービス

3

4

チャネル URIをサービスへ通知

チャネル URIを経由しMPNSへ通知を送信

5

12

デバイスへメッセージを送信

チャネルを応答

プッシュチャネルを要求

出展 : ftp://ftp.charlespetzold.com/TechEd2011/09-Networking.pptx

MPNSを使ってみる• MPNSを使用するのに必要なもの• MPNSを利用するアプリケーション• デバイスにメッセージを送信するサーバ• 少しのコーディングで簡単に利用できます

MPNSクライアント•必要なもの• Microsoft.Phone.Notification

• HttpNotificationChannel•このクラスだけで Push通知を利用できる

簡単な使い方• HttpNotificationChannelをインスタンス化• ChannelUriUpdatedイベントハンドラを追加• Open() でセッションをスタート• BindToShellToast() でトースト通知を OSに登録• ChannelUriUpdatedイベントが発生したら通知先 URLをサーバへ転送

• ね?簡単でしょ?

サーバで行うこと•クライアントから通知先 URLを受け取る•サーバで処理中任意のタイミングで通知先 URLへ XMLを送信する• → デバイスへメッセージが送信される

利用出来る通知の種類•Windows Phoneでは 3種類• トースト通知• タイル通知• Raw通知•最初の 2 個はアプリケーションが実行されていない場合でも受信できる•今回はトースト通知をサンプルにします

トースト通知•トーストというのは端末上部に表示される短いメッセージ•Windows Phoneにおいて他のアプリケーション実行中でもユーザにメッセージを表示できる唯一の方法

トースト通知を送信する•手順• トーストの内容を含んだ XMLを通知先 URLへ送信• 以上• 簡単です

•ほんとうに?

MPNSで必要なリクエストヘッダ• MPNSでは HTTPリクエストにいくつかの追加ヘッダが必要• X-MessageID• X-NotificationClass• X-WindowsPhone-Target• X-CallbackURI

•最低限 NotificationClass, WindowsPhone-Targetは必要

トーストの送信に必要なヘッダ• 先ほどのリクエストヘッダに適切なパラメタを与える• X-MessageID• GUID

• X-WindowsPhone-Target• toast

• X-NotificationClass• 2, 12, 22 からどれか一つ• 与えた物によってデバイスへ配信されるタイミングが違う

トースト通知に使用する XML<?xml version="1.0" encoding="utf-8"?>

<wp:Notification xmlns:wp="WPNotification">

<wp:Toast>

<wp:Text1>タイトル </wp:Text1>

<wp:Text2>メッセージ </wp:Text2>

<wp:Param>タップ時に開く URI</wp:Param>

</wp:Toast>

</wp:Notification>

実際に送信した場合のダンプPOST /unthrottledt… HTTP/1.1

Host: notify.mpnf1.live-int.com

X-MessageID: 801972E5-E623-452a-BA4F-61AD596EC835

X-WindowsPhone-Target: toast

X-NotificationClass: 2

Content-Length: 242

Content-Type: text/xml

<?xml version="1.0" encoding="utf-8"?>

<wp:Notification xmlns:wp="WPNotification">

<wp:Toast>

<wp:Text1>Hello</wp:Text1>

<wp:Text2>Push Notification</wp:Text2>

<wp:Param />

</wp:Toast>

</wp:Notification>

DEMO

MPNSの実装例• Amelloides• Twitterクライアント• バックエンドにWindows Azureを使ってます• Twitterでメンションを受け取るとMPNS経由で通知されます

MPNSの問題点•消費電力• OSがMicrosoftのサーバと通信しそのセッション上に通知情報を流すためバッテリ消費が増加する

• 無線 LAN利用に不向き• Windows Phoneの無線 LANが端末スリープ状態になると切断されるので通知セッションが破棄されてしまう• Mangoで改善された?

•いまいち使いづらい

MPNSの制限•通知 URLに XMLを送信する際データは最大 1024Byteまで• Toast通知はアプリケーション起動中には表示されない• Raw通知はアプリケーション起動中にしか通知されない•バッテリセーバが有効な場合は通知が実行されない

まとめ• Push配信を使うことでWebのリアルタイムな変化を端末に配信できる• MPNSを使うと比較的簡単に Push通知を使用したアプリケーションが作れる• MPNSに対応すればそれだけでアプリケーションの付加価値に

top related