博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】如何发送和接收 Windows Phone 的 Raw 通知
阅读量:6471 次
发布时间:2019-06-23

本文共 9442 字,大约阅读时间需要 31 分钟。

2012/2/9

本主题介绍向 Microsoft 推送通知服务发送 Raw 通知所需的步骤以及如何在 Windows Phone 上运行的应用程序中接收这些通知。包含有关 Raw 通知以及如何使用这些通知的信息。

可以在 中找到这个已完成的示例。

重要说明重要说明:

本主题中有关从 Web 服务器上运行的 ASP.NET 网页发送 Raw 通知的一节需要安装完整版本的 Visual Studio 或免费的 。


在本节中,我们创建一个在 Windows Phone 上运行的应用程序,该应用程序创建一个推送通知通道并处理 Raw 通知事件。

重要说明重要说明:

为了简单起见,我们将 Toast 通知 URI 复制并粘贴到发送通知的网页。通常,此 URI 传递给已为应用程序创建的 Web 服务。

创建用来接收 Raw 通知的推送客户端的步骤

  1. 打开 Visual Studio 并创建一个新的应用程序。模板应该为 Silverlight for Windows Phone C# 类别下的“Windows Phone 应用程序”

  2. 将项目命名为 RawNotificationClient

  3. 向 MainPage.xaml.cs 文件的顶部添加以下 using 指令。

    C#
    using Microsoft.Phone.Notification;
  4. 用下面的代码替换 MainPage 构造函数。该代码查看在应用程序的早期实例中是否已设置 Raw 通知通道。如果找到通知通道,则通知通道连接到通知事件。如果未找到通知通道,则创建通知通道,然后将其连接到通知事件。

    C#
    public MainPage()        {            /// Holds the push channel that is created or found.            HttpNotificationChannel pushChannel;            // The name of our push channel.            string channelName = "RawSampleChannel";            InitializeComponent();            // Try to find the push channel.            pushChannel = HttpNotificationChannel.Find(channelName);            // If the channel was not found, then create a new connection to the push service.            if (pushChannel == null)            {                pushChannel = new HttpNotificationChannel(channelName);                // Register for all the events before attempting to open the channel.                pushChannel.ChannelUriUpdated += new EventHandler
    (PushChannel_ChannelUriUpdated); pushChannel.ErrorOccurred += new EventHandler
    (PushChannel_ErrorOccurred); pushChannel.HttpNotificationReceived += new EventHandler
    (PushChannel_HttpNotificationReceived); pushChannel.Open(); } else { // The channel was already open, so just register for all the events. pushChannel.ChannelUriUpdated += new EventHandler
    (PushChannel_ChannelUriUpdated); pushChannel.ErrorOccurred += new EventHandler
    (PushChannel_ErrorOccurred); pushChannel.HttpNotificationReceived += new EventHandler
    (PushChannel_HttpNotificationReceived); // Display the URI for testing purposes. Normally, the URI would be passed back to your web service at this point. System.Diagnostics.Debug.WriteLine(pushChannel.ChannelUri.ToString()); MessageBox.Show(String.Format("Channel Uri is {0}", pushChannel.ChannelUri.ToString())); } }
  5. 下面,我们添加事件处理程序的代码。第一个事件处理程序用于 事件。为了简单起见,在此处显示通道 URI,但通常此 URI 将发送回 Web 服务。

    C#
    void PushChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)        {            Dispatcher.BeginInvoke(() =>            {                // Display the new URI for testing purposes. Normally, the URI would be passed back to your web service at this point.                System.Diagnostics.Debug.WriteLine(e.ChannelUri.ToString());                MessageBox.Show(String.Format("Channel Uri is {0}",                    e.ChannelUri.ToString()));                            });        }
  6. 下一个事件处理程序用于错误处理。您的代码应该能够正常处理通知错误,因为数据连接可能因手机的位置和服务而异。

    C#
    void PushChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e)        {            // Error handling logic for your particular application would be here.            Dispatcher.BeginInvoke(() =>                MessageBox.Show(String.Format("A push notification {0} error occurred.  {1} ({2}) {3}",                    e.ErrorType, e.Message, e.ErrorCode, e.ErrorAdditionalData))                    );        }
  7. 最后一个事件处理程序用于接收您的 Raw 通知。此数据的使用完全与应用程序相关。

    C#
    void PushChannel_HttpNotificationReceived(object sender, HttpNotificationEventArgs e)        {            string message;            using (System.IO.StreamReader reader = new System.IO.StreamReader(e.Notification.Body))            {                message = reader.ReadToEnd();            }            Dispatcher.BeginInvoke(() =>                MessageBox.Show(String.Format("Received Notification {0}:\n{1}",                    DateTime.Now.ToShortTimeString(), message))                    );        }

Windows Phone 推送客户端代码现在已完成。完成用来发送通知的网页之后,我们将运行此代码。


在本节中,我们创建一个 ASP.NET 网页,该网页使用在设备上创建推送通道时返回的 URI 来发送 Raw 通知。

若要创建 ASP.NET 项目,您需要完整版本的 Visual Studio 或免费的 。

创建用来发送 Raw 通知的 ASP.NET 页面的步骤

  1. 打开 Visual Studio 的另一个实例并创建一个新的应用程序。模板应该为 Web C# 类别下的“ASP.NET Empty Web 应用程序”

  2. 将项目命名为 SendRaw

  3. 通过右键单击“SendRaw”项目名称,然后依次选择“添加”“新项”“Web 表单”向项目中添加一个新的 Web 表单。

  4. 将该表单命名为“SendRaw”,然后单击“添加”按钮。

  5. 通过在“解决方案资源管理器”中右键单击“SendRaw.aspx”,然后选择“设为起始页”使 SendRaw 表单成为起始页。

  6. 下一步是向 SendRaw.aspx Web 表单中添加以下控件。

    控件类型

    控件 ID

    控件的文本

    TextBox

    TextBoxUri

    输入 URI:

    TextBox

    TextBoxValue1

    输入值 1:

    TextBox

    TextBoxValue2

    输入值 2:

    Button

    ButtonSendRaw

    发送 Raw 通知

    TextBox

    TextBoxResponse

    响应:

    “发送 Raw”按钮将拥有 ButtonSendRaw_Click 事件处理程序。将 SendRaw.aspx 的内容替换为以下代码以创建这些控件。

    HTML
    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SendRaw.aspx.cs" Inherits="SendRaw.SendRaw" %>        
    Enter URI:
    Enter Value 1:
    Enter Value 2:
    Response:
  7. 向 SendRaw.aspx.cs 文件的顶部添加以下 using 指令。

    C#
    using System.Net;using System.IO;using System.Text;
  8. 添加 ButtonSendRaw_Click 事件处理程序的代码。该代码将获取在第一个 TextBox 中输入的 URI,形成 Toast 通知消息,然后将其发布到 Microsoft 推送通知服务。

    C#
    protected void ButtonSendRaw_Click(object sender, EventArgs e)        {            try            {                // Get the URI that the Microsoft Push Notification Service returns to the push client when creating a notification channel.                // Normally, a web service would listen for URIs coming from the web client and maintain a list of URIs to send                // notifications out to.                string subscriptionUri = TextBoxUri.Text.ToString();                HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(subscriptionUri);                // Create an HTTPWebRequest that posts the raw notification to the Microsoft Push Notification Service.                // HTTP POST is the only method allowed to send the notification.                sendNotificationRequest.Method = "POST";                // Create the raw message.                string rawMessage = "
    " + "
    " + "
    " + TextBoxValue1.Text.ToString() + "
    " + "
    " + TextBoxValue2.Text.ToString() + "
    " + "
    "; // Set the notification payload to send. byte[] notificationMessage = Encoding.Default.GetBytes(rawMessage); // Set the web request content length. sendNotificationRequest.ContentLength = notificationMessage.Length; sendNotificationRequest.ContentType = "text/xml"; sendNotificationRequest.Headers.Add("X-NotificationClass", "3"); using (Stream requestStream = sendNotificationRequest.GetRequestStream()) { requestStream.Write(notificationMessage, 0, notificationMessage.Length); } // Send the notification and get the response. HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse(); string notificationStatus = response.Headers["X-NotificationStatus"]; string notificationChannelStatus = response.Headers["X-SubscriptionStatus"]; string deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"]; // Display the response from the Microsoft Push Notification Service. // Normally, error handling code would be here. In the real world, because data connections are not always available, // notifications may need to be throttled back if the device cannot be reached. TextBoxResponse.Text = notificationStatus + " | " + deviceConnectionStatus + " | " + notificationChannelStatus; } catch (Exception ex) { TextBoxResponse.Text = "Exception caught sending update: " + ex.ToString(); } }

若要运行此示例,我们首先运行推送客户端代码以创建通道并获取 URI。然后,我们在网页中使用此 URI 来发送 Raw 通知。

运行示例的步骤

  1. 回到 RawNotificationClient 项目并运行该项目。Windows Phone 模拟器进行初始化,应用程序随后启动。一段时间之后,应用程序应该显示带有推送通道 URI 的消息。此 URI 还显示在 Visual Studio 调试器的“输出”窗口中。

    AP_Push_OutputWindow
    提示提示:

    在 Visual Studio 2010 Express for Windows Phone 中,默认设置是在调试会话期间不显示“输出”窗口。您可以通过转到“调试”菜单,选择“窗口”,然后选择“输出”来显示“输出”窗口。滚动窗口以查找 URI。

  2. 现在,已创建通知通道。将此 URI 从 Visual Studio 调试器“输出”窗口复制到剪贴板。

  3. 切换到“SendRaw”项目并运行该项目。

  4. 在 URI 文本框中,粘贴从上一个项目中复制的 URI。

  5. 为 Raw 通知数据输入一对值。单击“发送 Raw”按钮。

    AP_Push_SendRaw
  6. 在模拟器上运行的 Windows Phone 应用程序中,您应该能够收到 Raw 通知。仅当应用程序运行时才会收到此通知。

    AP_Push_RawEvent

现在,您已经了解如何将 ASP.NET 页面的原始数据传递到正在 Windows Phone 上运行的应用程序。

转载地址:http://ibvko.baihongyu.com/

你可能感兴趣的文章
Java工程师的成长路线图是什么?
查看>>
eBay通过事件溯源实现持续交付
查看>>
Google开源了Abseil,为C++和Python开发提供支持
查看>>
亚马逊发布新的AWS Step Functions集成
查看>>
Scala在挖财的应用实践
查看>>
区块链和数据科学:如果同时应用这两种技术,将会实现什么?
查看>>
天机阁——全链路跟踪系统设计与实现
查看>>
跳一跳作弊器上榜!GitHub 2018年十大新开源项目揭晓
查看>>
如何通过解决精益问题提高敏捷团队生产力
查看>>
机器学习工程师职位正在消失
查看>>
Docker再曝安全漏洞,这次是PWD的问题
查看>>
如何利用PostgreSQL的延迟复制实现灾备
查看>>
ChaosConf 2018:混沌实验的演变
查看>>
微软对macOS和Linux开放量子开发工具集
查看>>
区块链安全:2019年我们走了多远?
查看>>
聪明的头脑+有趣的灵魂,揭秘腾讯云最暖智能酒店解决方案
查看>>
通过XAML Islands使Windows桌面应用程序现代化
查看>>
老肖有话说:雾霾天带你看清Crane技术实现之路
查看>>
Bootstrap 之 Metronic 模板的学习之路 - (7)GULP 前端自动化工具
查看>>
ES6 + Webpack + React + Babel 如何在低版本浏览器上愉快的玩耍(下)
查看>>