31
Windows Phone Arch NAGOYA yutaka Tsumori よよよよよ MPNS

よくわかるMPNS - tmyt

  • Upload
    wparch

  • View
    690

  • Download
    6

Embed Size (px)

Citation preview

Page 1: よくわかるMPNS - tmyt

Windows Phone Arch NAGOYAyutaka Tsumori

よくわかるMPNS

Page 2: よくわかるMPNS - tmyt

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

Page 3: よくわかるMPNS - tmyt

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

Page 4: よくわかるMPNS - tmyt

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

Page 5: よくわかるMPNS - tmyt

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

Page 6: よくわかるMPNS - tmyt

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

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

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

Page 7: よくわかるMPNS - tmyt

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

Page 8: よくわかるMPNS - tmyt

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

Page 9: よくわかるMPNS - tmyt

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

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

Page 10: よくわかるMPNS - tmyt

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

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

Page 11: よくわかるMPNS - tmyt

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

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

Page 12: よくわかるMPNS - tmyt

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

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

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

Page 13: よくわかるMPNS - tmyt

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

• iPhone• Apple Push Notification Service (APNS)

• Android• Cloud to Device Messaging (C2DM)

•Windows Mobile (おまけ )• 自力

Page 14: よくわかるMPNS - tmyt

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

Page 15: よくわかるMPNS - tmyt

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

MPNSサーバ Webサービス

3

4

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

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

5

12

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

チャネルを応答

プッシュチャネルを要求

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

Page 16: よくわかるMPNS - tmyt

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

Page 17: よくわかるMPNS - tmyt

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

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

Page 18: よくわかるMPNS - tmyt

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

• ね?簡単でしょ?

Page 19: よくわかるMPNS - tmyt

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

Page 20: よくわかるMPNS - tmyt

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

Page 21: よくわかるMPNS - tmyt

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

Page 22: よくわかるMPNS - tmyt

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

•ほんとうに?

Page 23: よくわかるMPNS - tmyt

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

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

Page 24: よくわかるMPNS - tmyt

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

• X-WindowsPhone-Target• toast

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

Page 25: よくわかるMPNS - tmyt

トースト通知に使用する 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>

Page 26: よくわかるMPNS - tmyt

実際に送信した場合のダンプ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>

Page 27: よくわかるMPNS - tmyt

DEMO

Page 28: よくわかるMPNS - tmyt

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

Page 29: よくわかるMPNS - tmyt

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

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

•いまいち使いづらい

Page 30: よくわかるMPNS - tmyt

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

Page 31: よくわかるMPNS - tmyt

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