日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HttpNotificationChannel 云端推送信息实现

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HttpNotificationChannel 云端推送信息实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

Push Notification簡介

目前,Windows Phone支持三種Push Notification方式:Toast Notifications、Tile Notifications和Raw Notifications,我不想翻譯成中文名字了,因為“吐司”之類的翻譯無法幫助理解。

Toast Notifications,當我們的程序沒有運行時,我們希望有一種形式可以通知用戶,并且讓用戶調用對應的應用,就像收到SMS時,調用Messaging程序一樣。運行效果如下圖,當用戶點擊Toast時,可以調用對應的程序。

Tile Notifications,用于更新啟動界面上的Tile,可以通過Tile Notifications設置Tile的背景圖片、Count和Title等屬性,各屬性顯示位置如下圖所示。我們可以通過該技術來提示用戶,我們的應用有新的事件發生,比如SNS上有多少新的回復等。

Raw Notifications,最簡單,當你的應用程序運行時,可以接收Raw Notification信息,如果程序沒有運行,則接受不到Raw Notification。

接下來,我們會以Toast Notifications為例詳細介紹,Push Notification的原理和使用方法。

首先,還是引用這張廣為流傳的圖示吧,確實是目前能夠找到的最詳細的示意圖了。下面是步驟敘述:

1-3,應用通過調用HttpNotificationChannel接口,向Microsoft Push Notification Service (MPNS)請求一個URI,這個URI會在服務器端發送Notification消息時,作為驗證發送目標的唯一標識;這樣做的一個好處是,當同一個設備上有多個應用在監聽Notification時,不會相互干擾。

4. 應用會將獲得的URI傳到自己的服務器上,這個URI會存儲在自己的服務器上,用于發送Push Notification時調用。URI的傳遞和存儲方式,由開發者自己決定,不過要保��傳輸過程的加密,以及存儲時的安全性。接下來的實例里,傳遞和存儲URI的方式就很有創意。

5-6. 當服務器端有信息要通知應用時,需要向MPNS發起一個Http請求,而MPNS將請求轉發到相應的設備上,設備上的應用接到Push Notification的消息后,進行相應的處理。

?

?

HttpNotificationChannel

View Code 1 HttpNotification = new HttpNotificationChannel(ChannelName, "NotificationServer");
2 HttpNotification.ChannelUriUpdated += (_sender, _e) =>
3 {
4 RegWebCloud(this.CloudHelper.CloudItems[0].Keys, _e.ChannelUri.ToString());
5 };
6 HttpNotification.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(HttpNotification_ErrorOccurred);
7 HttpNotification.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(HttpNotification_HttpNotificationReceived);
8 HttpNotification.ShellToastNotificationReceived+=new EventHandler<NotificationEventArgs>(HttpNotification_ShellToastNotificationReceived);
9
10 HttpNotification.Open();
11
12 HttpNotification.BindToShellToast();///綁定Toast服務
13 HttpNotification.BindToShellTile();///綁定Tile服務

?

數據包

View Code 1 byte[] SendData = null;
2 string Temp = "";
3 switch (Type) {
4 case "raw":
5 Temp = Context;
6 SendData = new System.Text.UTF8Encoding().GetBytes(Temp);
7 break;
8 case "toast":
9 Temp = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
10 Temp += "<wp:Notification xmlns:wp=\"WPNotification\">";
11 Temp += "<wp:Toast>";
12 Temp += "<wp:Text1>推送</wp:Text1>";
13 Temp += "<wp:Text2>@Context</wp:Text2>";
14 Temp += "</wp:Toast>";
15 Temp += "</wp:Notification>";
16 Temp = Temp.Replace("@Context", Context);
17 SendData = new System.Text.UTF8Encoding().GetBytes(Temp);
18 break;
19 case "tokens":
20 Temp = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
21 Temp += "<wp:Notification xmlns:wp=\"WPNotification\">";
22 Temp += "<wp:Tile>";
23 Temp += "<wp:Count>0</wp:Count>";
24 Temp += "<wp:Title>@Context</wp:Title>";
25 Temp += "</wp:Tile>";
26 Temp += "</wp:Notification>";
27 Temp = Temp.Replace("@Context", Context);
28 SendData = new System.Text.UTF8Encoding().GetBytes(Temp);
29 break;
30 }

發送數據

View Code 1 HttpWebRequest HttpWebReques = (HttpWebRequest)WebRequest.Create(Urls);
2 HttpWebReques.Method = WebRequestMethods.Http.Post;
3 HttpWebReques.Headers["X-MessageID"] = Guid.NewGuid().ToString();
4
5 switch (Type)
6 {
7 case "raw":
8 HttpWebReques.ContentType = "text/xml;charset=utf-8";
9 HttpWebReques.Headers.Add("X-NotificationClass", "3");
10 ///3 :消息立即推送
11 ///13:450秒推送
12 ///23:900秒推送
13 break;
14 case "toast":
15 HttpWebReques.ContentType = "text/xml; charset=utf-8";
16 HttpWebReques.Headers.Add("X-WindowsPhone-Target", "toast");
17 HttpWebReques.Headers.Add("X-NotificationClass", "2");
18 ///2 :消息立即推送
19 ///12:450秒推送
20 ///22:900秒推送
21 break;
22 case "tokens":
23 HttpWebReques.ContentType = "text/xml; charset=utf-8";
24 HttpWebReques.Headers.Add("X-WindowsPhone-Target", "token");
25 HttpWebReques.Headers.Add("X-NotificationClass", "1");
26 ///1 :消息立即推送
27 ///11:450秒推送
28 ///21:900秒推送
29 break;
30 }
31
32 HttpWebReques.ContentLength = Data.Length;
33 using (Stream RequestStream = HttpWebReques.GetRequestStream())
34 {
35 RequestStream.Write(Data, 0, Data.Length);
36 }
37 HttpWebResponse response = (HttpWebResponse)HttpWebReques.GetResponse();
38 string NotificationStatus = response.Headers["X-NotificationStatus"];
39 string SubscriptionStatus = response.Headers["X-SubscriptionStatus"];
40 string DeviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"];

?

服務器端我用的是Web,可以直接在客戶端連接后,保存到Application里直接讀取。



源碼下載:http://files.cnblogs.com/lsmayday/CloudWeb.rar
?

轉載于:https://www.cnblogs.com/lsmayday/archive/2011/11/08/2240896.html

總結

以上是生活随笔為你收集整理的HttpNotificationChannel 云端推送信息实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。