SlideShare a Scribd company logo
よくわかるMPNS
Windows Phone Arch NAGOYA
yutaka Tsumori
自己紹介
• 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は各社のサービスへレジスト
 • その後通知トークンが取得できる
• 任意のタイミングで通知トークンを使用しサービスサーバはメッセー
  ジを送信
• サービスサーバはデバイスへメッセージを転送
• メッセージを受け取ったデバイスは適宜処理を行う
フレームワークの挙動の図

   プッシュチャネルを要
   求

                                                        チャネルURIをサー
                                                    3
 チャネルを応答        2       1                               ビスへ通知



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


                            デバイスへメッセージ
 MPNSサーバ                    を送信                           Webサービス

      出展: 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に対応すればそれだけでアプリケーションの付加価値に

More Related Content

Viewers also liked (8)

Blync light for HACK
Blync light for HACKBlync light for HACK
Blync light for HACK
 
すまべん関西#18
すまべん関西#18すまべん関西#18
すまべん関西#18
 
Wpdd lt
Wpdd ltWpdd lt
Wpdd lt
 
せっけーのおはなし
せっけーのおはなしせっけーのおはなし
せっけーのおはなし
 
Aristeaのコード補完
Aristeaのコード補完Aristeaのコード補完
Aristeaのコード補完
 
未来(あす)Xamlの1msに泣かないために
未来(あす)Xamlの1msに泣かないために未来(あす)Xamlの1msに泣かないために
未来(あす)Xamlの1msに泣かないために
 
Samba4でADしよう!
Samba4でADしよう!Samba4でADしよう!
Samba4でADしよう!
 
WPF開発での陥りやすい罠
WPF開発での陥りやすい罠WPF開発での陥りやすい罠
WPF開発での陥りやすい罠
 

More from Yutaka Tsumori (18)

Buri2019
Buri2019Buri2019
Buri2019
 
Setsな話
Setsな話Setsな話
Setsな話
 
XAMLで条件分岐
XAMLで条件分岐XAMLで条件分岐
XAMLで条件分岐
 
BuriKaigi2018
BuriKaigi2018BuriKaigi2018
BuriKaigi2018
 
Windows phoneの新しい通知api
Windows phoneの新しい通知apiWindows phoneの新しい通知api
Windows phoneの新しい通知api
 
Twitter Client for ZSH
Twitter Client for ZSHTwitter Client for ZSH
Twitter Client for ZSH
 
AndroidではじめるJava
AndroidではじめるJavaAndroidではじめるJava
AndroidではじめるJava
 
20120922 wdc with_ms_like
20120922 wdc with_ms_like20120922 wdc with_ms_like
20120922 wdc with_ms_like
 
某Music unなんとか
某Music unなんとか某Music unなんとか
某Music unなんとか
 
たのアプLt
たのアプLtたのアプLt
たのアプLt
 
Androidのおはなし++
Androidのおはなし++Androidのおはなし++
Androidのおはなし++
 
スマートフォン勉強会@九州
スマートフォン勉強会@九州スマートフォン勉強会@九州
スマートフォン勉強会@九州
 
Titanium mobileで遊んでみた
Titanium mobileで遊んでみたTitanium mobileで遊んでみた
Titanium mobileで遊んでみた
 
Windows Phone 7 “Mango” SDK最速情報!
Windows Phone 7 “Mango” SDK最速情報!Windows Phone 7 “Mango” SDK最速情報!
Windows Phone 7 “Mango” SDK最速情報!
 
ぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんとぼくのかんがえたさいきょうのついったーくらいあんと
ぼくのかんがえたさいきょうのついったーくらいあんと
 
Smartphone workshop kansai #9
Smartphone workshop kansai #9Smartphone workshop kansai #9
Smartphone workshop kansai #9
 
Sumaben#11
Sumaben#11Sumaben#11
Sumaben#11
 
スマートフォン勉強会@関西 #6 LT
スマートフォン勉強会@関西 #6 LTスマートフォン勉強会@関西 #6 LT
スマートフォン勉強会@関西 #6 LT
 

Recently uploaded

2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 

Recently uploaded (12)

クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
クラウド時代におけるSREとUPWARDの取組ーUPWARD株式会社 CTO門畑
 
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
論文紹介:Deep Occlusion-Aware Instance Segmentation With Overlapping BiLayers
 
Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )Intranet Development v1.0 (TSG LIVE! 12 LT )
Intranet Development v1.0 (TSG LIVE! 12 LT )
 
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
論文紹介:ViTPose: Simple Vision Transformer Baselines for Human Pose Estimation
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
部内勉強会(IT用語ざっくり学習) 実施日:2024年5月17日(金) 対象者:営業部社員
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
ロボットマニピュレーションの作業・動作計画 / rosjp_planning_for_robotic_manipulation_20240521
 

よくわかるMPNS