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:

 

图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:

 

图5-2

(5) F5运行。

单击产生uri,注册uri,如图5-3

 

图5-3

拷贝URI值,运行服务程序,并复制到云端服务器的URI中,如图图5-4:

 

图5-4

选择城市、温度,单击“发送”,在Windows Phone会有相应显示,如图5-5:

 

图5-5

本文出自 “蓝海战术” 博客,请务必保留此出处http://wanxl.blog.51cto.com/2129901/590388


分享给朋友:
您可能感兴趣的文章:
随机阅读: