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(() =>
{
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