Windows Phone 7 推送通知Demo
推送服務端代碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.IO; namespace PushNotifications_CloudServer { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 發送消息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { byte[] msg = null; String type = notificationType.Text; switch (type) { case "Raw": msg = Encoding.UTF8.GetBytes(txtSendMsg.Text); break; case "Tile": { string tileMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<wp:Notification xmlns:wp=\"WPNotification\">" + "<wp:Tile>" + "<wp:BackgroundImage>/Images/Cloudy.png</wp:BackgroundImage>" + "<wp:Count>28</wp:Count>" + "<wp:Title>AnthemSord</wp:Title>" + "</wp:Tile>" + "</wp:Notification>"; msg = Encoding.UTF8.GetBytes(tileMessage); } break; case "Toast": { string toastMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<wp:Notification xmlns:wp=\"WPNotification\">" + "<wp:Toast>" + "<wp:Text1>AnthemSord:</wp:Text1>" + "<wp:Text2>" + txtSendMsg.Text + "</wp:Text2>" + "</wp:Toast>" + "</wp:Notification>"; msg = Encoding.UTF8.GetBytes(toastMessage); } break; default: break; } SendNotifications(msg, type); } private void SendNotifications(byte[] strBytes, String type) { HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(notificationUriTextBox.Text); //創建請求對象 sendNotificationRequest.Method = WebRequestMethods.Http.Post; sendNotificationRequest.Headers["X-MessageID"] = Guid.NewGuid().ToString(); sendNotificationRequest.ContentType = "text/xml;charset=utf-8"; switch (type) { case "Raw": { sendNotificationRequest.Headers.Add("X-NotificationClass", "3"); } break; case "Tile": { sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "token"); sendNotificationRequest.Headers.Add("X-NotificationClass", "1"); } break; case "Toast": { sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "toast"); sendNotificationRequest.Headers.Add("X-NotificationClass", "2"); } break; default: break; } using (Stream stream = sendNotificationRequest.GetRequestStream()) { stream.Write(strBytes, 0, strBytes.Length); } HttpWebResponse respones = (HttpWebResponse)sendNotificationRequest.GetResponse(); string notificationStatus = respones.Headers["X-NotificationStatus"]; string notificationChannelStatus = respones.Headers["X-SubscriptionStatus"]; string deviceConnectionStatus = respones.Headers["X-DeviceConnectionStatus"]; msgLabel.Text = string.Format("通知狀態: {0} ,管道狀態:{1} , 設備狀態: {2} , ", notificationStatus, notificationChannelStatus, deviceConnectionStatus); } } }
WP7 終端代碼:
只需要一個啟動按鈕一個信息接受顯示TextBlock
XAML:
<phone:PhoneApplicationPage x:Class="PushNotifications.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True"> <!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle" Text="Demo" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock FontSize="50" x:Name="PageTitle" Text="Push Notification" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - place additional content here--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <Button Content="connect" Height="72" HorizontalAlignment="Left" Margin="6,6,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click" /> <TextBlock Height="227" HorizontalAlignment="Left" Margin="12,115,0,0" Name="msgtextblock" Text="TextBlock" VerticalAlignment="Top" Width="438" FontSize="28" /> </Grid> </Grid> </phone:PhoneApplicationPage>
cs:
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls; using Microsoft.Phone.Notification; using System.Diagnostics; using System.IO; namespace PushNotifications { public partial class MainPage : PhoneApplicationPage { private HttpNotificationChannel httpChannel; private const string channelName = "Channel1"; // Constructor public MainPage() { InitializeComponent(); } private void button1_Click(object sender, RoutedEventArgs e) { httpChannel = HttpNotificationChannel.Find(channelName); if (httpChannel != null) { httpChannel.Close(); httpChannel.Dispose(); } //create the channel; httpChannel = new HttpNotificationChannel(channelName, "NotificationService"); httpChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(httpChannel_ChannelUriUpdated); httpChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(httpChannel_ErrorOccurred); httpChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(httpChannel_HttpNotificationReceived); httpChannel.Open(); } /// <summary> /// 收到訊息 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void httpChannel_HttpNotificationReceived(object sender, HttpNotificationEventArgs e) { using (var reader = new StreamReader(e.Notification.Body)) { string msg = reader.ReadToEnd(); Dispatcher.BeginInvoke(() => { msgtextblock.Text = msg; }); } } /// <summary> /// 顯示錯誤 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void httpChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e) { Dispatcher.BeginInvoke(() => { msgtextblock.Text = e.Message; }); } /// <summary> /// 獲取uri /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void httpChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e) { Debug.WriteLine("Channel Uri:{0}", e.ChannelUri); } } }

浙公网安备 33010602011771号