Windows Phone 7天初學(5):推送通知實現

        Windows Phone 中的推送通知服務 Microsoft Push Notification Service 向第三方開發人員提供了一個彈性,專一,並且持續的渠道,使得開發人員能夠從Web Service 向移動應用程序發送信息和更新,過去移動應用程序須要常常主動訪問相應的WEB服務,以瞭解是否有任何等待處理的通知。這樣作導航手機無線設備需頻繁打開,使用推送通知的方式取代主動調查,Web Service 可以提醒應用程序獲取所須要的重要理更新。
      服務器Web Service 若有信息要發送到應用程序,它先發送一個通知到Push Notification Service ,該服務隨後將通知應用程序,應用程序的標題明顯地更新或者顯示一個Toast 通知。而後,若是須要的話,應用程序可使用本身的的協議聯繫Web service 以獲取更新,這樣也能有效下降電池的消耗。
    需注意的是這裏發送的是一個通知,通知應用程序,應用程序收到通知後,再聯繫Web service 獲取具體內容。應用程序不需時時刻刻去查詢是否有更新數據。
推送消息過程:
WP設備到MSNS註冊-》獲得惟一的服務URI-》把URI傳遞給雲服務器-》當雲服務器有更新消息時,發送給MSNS更新消息,MSNS更新消息發送給WP設備-》WP設備讀取更多的數據。
使用推送通知服務有數量限制,用戶決定是否使用 推送通知服務,並有權取消訂閱。通知是用戶體驗中的重要組成部分,您須要仔細考慮它的使用方式。重複通知或侵入式通知會下降您的應用程序及設備上運行的其餘程序的性能。這些通知還會打擾用戶。
Push notification 的三種發送方式Raw Notification、Toast Notification、Tokens (Tile) Notification,Tile通知,如天氣應用溫度變化的信息性通知;Toast通知,當即查看,如突發新聞的重要通知;Raw通知,以自定義的格式將信息直接發送到您的應用程序.
 
(1) Raw Notification
1.能夠發送任何格式的數據
2.應用程序能夠根據須要加工數據
3.應用程序相關的通知消息
4.只有在應用程序運行時,才發送。
(2)Toast Notification
1.發送的數據爲指定的XML 格式
2.若是應用程序正在運行,內容發送到應用程序中
3.若是應用程序沒有運行,彈出Toast 消息框顯示消息,App 圖標加上兩個描述文本,打斷用戶當前操做,可是是臨時的,用戶能夠點擊進行跟蹤。
(3)Tokens (Tile) Notification
1.發送的數據爲指定的XML格式
2.不會往應用程序進行發送
3.若是用戶把應用程序PIN TO START ,那麼更新數據發送到start screen 的tile 裏面,包含三個屬性,背景,標題和計算器,每一個屬性都有固定的格式與位置,可使用其中的屬性,不必定三個屬性一塊兒使用。
應用程序使用推送通知功能主要有兩個方面,第一是啓用和關閉應用程序推送通知的設定,由於這是MarketPlace要求應用程序必須具有的功能;第二是Web Service的設計和代碼實現,由於實現推送通知消息內容的邏輯都是在Web Service端完成的,而後通知MPNS將消息推送至Windows Phone應用程序。Web Service既能夠是雲端的Cloud Application,也能夠是其餘的Web應用程序,只要能和MPNS通信便可。
推送通知消息基礎類 PushNotificationMessage類,有三個子類:
(1)RawPushNotificationMessage – 當Windows Phone應用程序運行時,能夠接收到來自Web Service的Raw通知消息。
(2) TilePushNotificationMessage –當Windows Phone應用程序被固定顯示在啓動頁面,Windows Phone將呈現Tile通知消息的內容。
(3) ToastPushNotificationMessage –發送Toast"警告"消息至Windows Phone。
 
案例5-1 推送通知服務
        Windows Phone應用程序的推送通知的實現方式中,程序員幾乎不須要編寫代碼就能夠實如今Windows Phone的三種推送通知響應,緣由是系統自己已經替咱們作好了,現以Raw通知消息爲例演示如何實現通知服務。
(1) 新建Windows Phone程序。
(2) 添加命令按鈕、信息顯示文本塊,界面如圖5-1:
p_w_picpath
圖5-1
(3) 添加產生uri事件代碼:
private void button1_Click(object sender, RoutedEventArgs e)
{
MyChannel = HttpNotificationChannel.Find(channelName);
if (MyChannel != null)
{
MyChannel.Close();
MyChannel.Dispose();
}
MyChannel = new HttpNotificationChannel(channelName, "NotificationService");//新建一個通道
//返回一個URI的事件
MyChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(MyChannel_ChannelUriUpdated);
//致使不能返回URI的各種異常信息捕捉事件
MyChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(MyChannel_ErrorOccurred);
//發送RAW NOTIFICATION事件,以進一步讀取、處理數據
MyChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(MyChannel_HttpNotificationReceived);
//到微軟服務器註冊
MyChannel.Open();
}
(4)獲得通知信息的處理
void MyChannel_HttpNotificationReceived(object sender, HttpNotificationEventArgs e)
{
//讀取通知內容
using (var reader = new StreamReader(e.Notification.Body))
{
string msg = reader.ReadToEnd();
Dispatcher.BeginInvoke(() =&gt;
{
msgBlock1.Text = msg;
});
}
}
(5)輸出手機管道Uri及出錯信息處理
void MyChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e)
{
throw new NotImplementedException();
}
void MyChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
{
//獲得管道URI
Debug.WriteLine("管道URI:{0}", e.ChannelUri);
}
(4) 新建項目,模擬服務端,構建雲計算。新建一Windows Forms Application,界面設計如圖5-2:
 
p_w_picpath
 
圖5-2
(5) F5運行。
單擊產生uri,註冊uri,如圖5-3
p_w_picpath
 
圖5-3
拷貝URI值,運行服務程序,並複製到雲端服務器的URI中,如圖圖5-4:
p_w_picpath
 
圖5-4
選擇城市、溫度,單擊「發送」,在Windows Phone會有相應顯示,如圖5-5:
p_w_picpath
圖5-5
相關文章
相關標籤/搜索