成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

31天學(xué)會(huì)Windows Phone 7開(kāi)發(fā):推送通知

移動(dòng)開(kāi)發(fā)
本文是《Windows Phone 7開(kāi)發(fā)31日談》系列的第十九篇文章。上一篇,我們介紹了WebBrowser控件,以及如何在程序中使用它。本文,我們來(lái)談?wù)効赡苁沁@個(gè)系列中最重要的話(huà)題:推送通知。

本文是《Windows Phone 7開(kāi)發(fā)31日談》系列的第十九篇文章。上一篇,我們介紹了WebBrowser控件,以及如何在程序中使用它。本文,我們來(lái)談?wù)効赡苁沁@個(gè)系列中最重要的話(huà)題:推送通知。

可能你對(duì)推送通知這個(gè)概念還不是很熟悉,其實(shí)很簡(jiǎn)單:不用強(qiáng)制你的應(yīng)用程序每幾分鐘就去檢查一下服務(wù)器,服務(wù)器在有新數(shù)據(jù)的時(shí)候可以通知你的手機(jī)。

為什么要使用推送通知?

第一個(gè)原因,節(jié)省用戶(hù)的電池電量。檢測(cè)服務(wù)器數(shù)據(jù)很耗電,而在手機(jī)中,電池絕對(duì)是稀缺資源。你永遠(yuǎn)不會(huì)有足夠的電量,并且不論你的電池能撐多久,都要盡量避免會(huì)使電池續(xù)航時(shí)間變短的通知。

第二,你可以通過(guò)推送通知來(lái)告知你的用戶(hù)在程序中發(fā)生了一些有趣的事,即使程序沒(méi)有運(yùn)行。你還可以提醒用戶(hù)應(yīng)該打開(kāi)程序來(lái)看看你要告訴他們的事。

推送通知的過(guò)程

為了能讓你理解我在下面拋出來(lái)的代碼,我認(rèn)為很有必要向你精確地解釋一下這個(gè)過(guò)程中所發(fā)生的事。

1.用戶(hù)在手機(jī)中首次運(yùn)行程序時(shí),應(yīng)用程序會(huì)調(diào)用微軟的推送通知服務(wù),請(qǐng)求一個(gè)用于通信的定制URI。

2.當(dāng)在你的Web Service中激發(fā)了一個(gè)事件時(shí),你應(yīng)該向那個(gè)URI傳遞信息(附帶一個(gè)特定的負(fù)載),然后推送通知服務(wù)會(huì)以活動(dòng)瓷磚更新,吐司(Toast)通知或者程序中真實(shí)數(shù)據(jù)的方式將數(shù)據(jù)發(fā)送到用戶(hù)的手機(jī)中。

本文就是要講解上述要點(diǎn)如何來(lái)做。如果你想看一個(gè)可以按部就班構(gòu)建的例子,請(qǐng)參見(jiàn)Windows Phone開(kāi)發(fā)人員訓(xùn)練包。其中有一個(gè)非常出色的關(guān)于推送通知的教程。

從推送通知服務(wù)(Push Notification Service)中獲取定制的URI

非常感謝,微軟將這部分內(nèi)容做得非常簡(jiǎn)單。我們得使用Microsoft.Phone.Notification程序集,不過(guò)我還是得用10行代碼來(lái)從推送通知服務(wù)中(PNS)獲取一個(gè)定制的URI。首先,我得創(chuàng)建一個(gè)HttpNotificationChannel。它將自動(dòng)與PNS通信(在另一個(gè)線(xiàn)程中),并且還得通過(guò)一個(gè)事件來(lái)捕獲服務(wù)返回的內(nèi)容。

  1. HttpNotificationChannel channel;  
  2.  
  3. void GetPushChannel()  
  4. {  
  5.     channel = new HttpNotificationChannel("BLANKENSOFT_" + DateTime.Now.Ticks.ToString());  
  6.     channel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(channel_ChannelUriUpdated);  
  7.     channel.Open();  
  8. }  
  9.  
  10. void channel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)  
  11. {  
  12.     Dispatcher.BeginInvoke(delegate  
  13.     {  
  14.         URIBlock.Text = channel.ChannelUri.ToString();  
  15.     });  

在這個(gè)例子中我得到的URI是這樣的:

http://sn1.notify.live.net/throttledthirdparty/01.00/AAHsLicyiJgtTaiDbJoSgmFiAgAAAAADAwAAAAQUZm52OjlzOEQ2NDJDRkl5MEVFMEQ

一旦你有了URI,就可以在Web Service中保存它了。Web Service會(huì)初始化將要發(fā)送到你手機(jī)上的信息,我們有3種方法來(lái)實(shí)現(xiàn):瓷磚(Tile)通知,吐司(Toast)通知和原生通知。

不同的需求,不同的消息

我剛才提到了你可以向手機(jī)發(fā)送3種不同類(lèi)型的消息。下面是一個(gè)概述:

原生通知(Raw Notification)- 原生通知用于設(shè)備中真正在運(yùn)行的程序。它允許你在用戶(hù)使用時(shí)實(shí)時(shí)更新用戶(hù)界面。

吐司通知(Toast Notification)– 無(wú)論程序是否在運(yùn)行都會(huì)收到這個(gè)消息,但在程序運(yùn)行時(shí)彈出吐司消息可能會(huì)有點(diǎn)兒討人厭。我會(huì)在下面的例子中演示。吐司通知不能更新你程序的數(shù)據(jù)。想做到這一點(diǎn)還是需要傳遞一個(gè)原生通知。

瓷磚通知(Tile Notification)– 如果你的程序被釘在了開(kāi)始界面中,你可以用瓷磚通知來(lái)更新瓷磚。你可以改變背景圖片以及一個(gè)0-99的整數(shù)。

發(fā)送一個(gè)吐司通知

一旦我們得到了推送URI,剩下的就是組合HTTP消息的事了,然后將消息發(fā)送給這個(gè)URI。下面是代碼示例:

  1. HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(channel.ChannelUri.ToString());  
  2.             sendNotificationRequest.Method = "POST";  
  3.             //Indicate that you'll send toast notifications!  
  4.             sendNotificationRequest.ContentType = "text/xml";  
  5.             sendNotificationRequest.Headers = new WebHeaderCollection();  
  6.             sendNotificationRequest.Headers.Add("X-NotificationClass", "2");  
  7.             if (string.IsNullOrEmpty(txtMessage.Text)) return;  
  8.  
  9.             //Create xml envelope  
  10.             string data = "X-WindowsPhone-Target: toast\r\n\r\n" +  
  11.                     "<?xml version='1.0' encoding='utf-8'?>" +  
  12.                     "<wp:Notification xmlns:wp='WPNotification'>" +  
  13.                     "<wp:Toast>" +  
  14.                     "<wp:Text1>{0}</wp:Text1>" +  
  15.                     "</wp:Toast>" +  
  16.                     "</wp:Notification>";  
  17.  
  18.             //Wrap custom data into envelope  
  19.             string message = string.Format(data, txtMessage.Text);  
  20.             byte[] notificationMessage = Encoding.Default.GetBytes(message);  
  21.  
  22.             // Set Content Length  
  23.             sendNotificationRequest.ContentLength = notificationMessage.Length;  
  24.  
  25.             //Push data to stream  
  26.             using (Stream requestStream = sendNotificationRequest.GetRequestStream())  
  27.             {  
  28.                 requestStream.Write(notificationMessage, 0, notificationMessage.Length);  
  29.             }  
  30.  
  31.             //Get reponse for message sending  
  32.             HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse();  
  33.             string notificationStatus = response.Headers["X-NotificationStatus"];  
  34.             string notificationChannelStatus = response.Headers["X-SubscriptionStatus"];  
  35.             string deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"]; 

正如你所見(jiàn),這部分代碼很長(zhǎng)并且比較復(fù)雜。我建議你多花些時(shí)間在Windows Phone開(kāi)發(fā)人員訓(xùn)練包上,并且跟著推送通知的例子完整地走一遍。

這是一個(gè)演示推送通知(從頭到尾)如何工作的絕佳例子,同時(shí)向你展示了這些更新可以讓你的應(yīng)用程序總是保持在用戶(hù)眼前的強(qiáng)大力量。

下載示例代碼

對(duì)于本文的例子來(lái)說(shuō),上面的代碼由于缺少所需的環(huán)境所以對(duì)你沒(méi)什么幫助。本文的下載內(nèi)容實(shí)際上是Windows Phone開(kāi)發(fā)人員訓(xùn)練包中推送通知例子的最終版。

原作者:Jeff Blankenburg    譯者:金山崟霸

中文來(lái)源:http://www.cnblogs.com/porscheyin/archive/2010/12/23/1914884.html

英文來(lái)源:http://www.jeffblankenburg.com/2010/10/19/31-days-of-windows-phone-day-19-push-notifications/

【編輯推薦】

  1. IPTV會(huì)否是分眾購(gòu)對(duì)象
  2. 我國(guó)IPTV研究目全球領(lǐng)先
  3. 3G與IPTV是發(fā)展大方向
  4. 我國(guó)IPTV研究目全球領(lǐng)先
  5. 3G與IPTV是發(fā)展大方向
責(zé)任編輯:王曉東 來(lái)源: 博客園
相關(guān)推薦

2012-06-13 13:01:57

Windows Pho

2012-08-02 10:16:39

Windows Pho

2012-06-06 13:48:34

Windows Pho

2012-06-11 13:08:10

Windows Pho

2012-08-01 10:26:33

Windows Pho

2012-08-09 13:39:22

Windows Pho

2012-06-12 10:43:20

Windows Pho

2012-08-13 09:56:45

Windows Pho

2012-06-25 16:14:26

Windows Pho

2012-06-07 09:33:13

Windows Pho

2012-06-19 09:31:53

Windows Pho

2012-06-20 10:21:50

Windows Pho

2012-07-13 14:41:12

2012-07-24 10:15:34

Windows Pho

2012-06-21 10:59:31

Windows Pho

2012-07-11 09:21:35

Windows Pho

2012-07-31 09:44:27

Windows Pho

2012-06-29 14:13:10

2013-04-25 15:15:41

Windows PhoWindows PhoWindows Pho

2013-04-19 16:52:24

Windows PhoWindows Pho
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品毛片一区二区在线看 | 91成人午夜性a一级毛片 | 91毛片在线观看 | 男人av在线播放 | 日韩爱爱网站 | 亚洲伊人久久综合 | 日韩久久久久 | 毛片一区二区 | 免费av一区二区三区 | 欧美精品一区二区三区在线 | 色综合桃花网 | 亚洲精品一区二区三区蜜桃久 | 欧美一级淫片免费视频黄 | 国产在线观看一区二区 | 中文字幕一区在线观看视频 | 日韩视频在线免费观看 | 91在线一区二区三区 | 日日操操操| 一区二区三区影院 | 99精品国产一区二区三区 | 久久久黄色 | 亚洲伊人久久综合 | 久久国产亚洲精品 | 国产一区二区久久久 | 国产精品av久久久久久久久久 | 日本又色又爽又黄又高潮 | 成年免费在线观看 | 好婷婷网 | 91精品国产综合久久久久 | 日韩毛片 | 最新国产精品 | 99久久亚洲 | 中文亚洲视频 | 精品二区 | 久久精品亚洲 | 国产在线观看 | 亚洲在线一区二区 | 精品国产视频在线观看 | 一级片在线播放 | 韩三级在线观看 | 一区二区国产精品 |