上一篇文章中,已经完成了用于发送通知的服务器端,接下来我们就用这个服务端来测试一下。

在开始测试之前,我们要做一个接收通知的WP应用。

1、启动VS Express for Windows,新建项目,在项目模板中选择“空白应用程序(Windows Phone)”。

2、既然要接收通知,肯定少不了Toast、磁贴这几样常用的通知的,故我们得先准备一些图片。

在“解决方案资源管理器”中,双击打开清单文件,切换到“可见资产”选项卡,这个“资产”指的不你的银行卡存款有多少,而是你的应用中的一些如图片、音乐等资源,可以不太好翻译,就按单词直译了,反正你知道它是啥就行了。

我们看到,种图标所需的尺寸都已经注明,注意每一类图标都有三种比例,分别为100%,140%和240%。所以,对于每一种图标,理论上我们需要分别准备三张图片,假设图片名字为abc,用于100%比例的图片可以命名为abc.scale-100.png;对于140%比例的图片,可以命名为abc.scale-140.png……中间多了个scale-XXX,XXX就是比例值。

如果你觉得麻烦,可以只为一种比例准备图片即可,比如我只准备100%的所有图片,不过,我们都知道,图片放大后会变模糊,但缩小后不会变模糊。所以,我们应用选用比例最大的(240%)的标准来准备图片文件。

举个例子,初始屏幕,从窗口中的提示我们看到,240%比例所需的尺寸为1152×1920,我们就设计一张这样大小的图片,命名为xxx.scale-240.png,最好用PNG图片,因为它允许背景透明,通常我们应当考虑使用透明背景,初屏幕的背景颜色可以另外设置。如下图所示,为了支持环保事业,我把初始屏幕的背景色改为绿色。

这个例子用来测试,也不用设计得太认真,打开PS,随便涂鸦几张图片就行了。为啥要用PS?有人说,用系统自带的画图不就行了吗?但是,你要知道,系统自带的 画图 程序在绘制PNG图像时,背景是非透明的,但PS在创建新内容时,可以选择透明背景,如下图所示。

有人又会问,PS是什么?PS就是PhotoShop的简称。

3、咱们干脆把锁屏也用上,切换到“应用程序”选项卡,然后找到“通知”节,开启Toast通知,并把锁屏通知改为徽章和图块文本。

4、开启锁屏提醒后,必须设置后台任务,这个我们以后再扯,本示我们不需要后台任务,但也不能空在那里,切换到“声明”选项卡,增加一个后台任务,在支持的类型处勾上“推送通知”;由于我们没有开发后台任务,因此在入口点处填上当前应用中App类的名字,包括命名空间名称。

保存并关闭清单文件。

5、打开MainPage页面的代码视图,在OnNavigatedTo方法中加入以下代码。

  1. protected async override void OnNavigatedTo(NavigationEventArgs e)
  2. {
  3. PushNotificationChannel channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
  4. // 如果本地设置中没有相关键,表明是第一次使用
  5. // 需要存储URL,并发送给服务器
  6. //if (Windows.Storage.ApplicationData.Current.LocalSettings.Values.ContainsKey("url")==false)
  7. //{
  8. // Windows.Storage.ApplicationData.Current.LocalSettings.Values["url"] = channel.Uri;
  9. // SendURL(channel.Uri);
  10. //}
  11. //else
  12. //{
  13. // string savedUrl = Windows.Storage.ApplicationData.Current.LocalSettings.Values["url"] as string;
  14. // // 当URL改变了,就重新发给服务器
  15. // if (savedUrl != channel.Uri)
  16. // {
  17. // // 再次保存本地设置
  18. // Windows.Storage.ApplicationData.Current.LocalSettings.Values["url"] = channel.Uri;
  19. // SendURL(channel.Uri);
  20. // }
  21. //}
  22.  
  23. System.Diagnostics.Debug.WriteLine(channel.Uri);
  24. SendURL(channel.Uri);
  25. }

调用CreatePushNotificationChannelForApplicationAsync方法创建推送通道,然后把通道的URL发送给我们自己写的服务器,服务器就是根据这个来向手机发送推送的。

注意被注释掉的那段代码,作用是把获取到的通道URL保存到本地设置中,如果获取到的新URL和本地设置中的URL相同,说明URL没有改变,就不必把URL发给服务器了。

SendURL方法的作用是把通道URL发送给服务器,代码如下:

  1. private async void SendURL(string url)
  2. {
  3. using (HttpClient client =new HttpClient())
  4. {
  5. byte[] data = System.Text.Encoding.UTF8.GetBytes(url);
  6. ByteArrayContent content = new ByteArrayContent(data);
  7. try
  8. {
  9. await client.PostAsync("http://192.168.1.100:85/svr/", content);
  10. }
  11. catch { }
  12. }
  13. }

好了,我们就剩下最重要的一步,就是设置应用程序的清单文件。还记得上一文章中,我们创建应用时得到的SID,App ID等几个ID吗?

在服务器端,使用这些信息来申请access token,在WP应用中我们也同样需要把这些信息写到清单文件中,这样推送服务器才能进行推送,如果标识不匹配,就不会进行推送,防止有些别有用心的人自作多情,到处推送垃圾情书,造成信息污染。

那我们是不是打开清单文件,然后一个个改吗?你要是原意的话,也无所谓。但是,我们是21世纪的高大上,不需要机械劳动,下面我给大家演示一下,如何智能地把商店中的应用信息同步到清单文件(如果你的应用已上传到应用商店,就不需要这样做了,但是在测试或学习阶段,不要上传)。

在“解决方案资源管理器”中右击项目名,从快捷菜单中选择“应用商店”->“将应用程序与应用商店关联”,如下图

或者,在VS的菜单栏中依次执行“应用商店”>“将应用程序与应用商店关联”菜单。

这时候会出现一个向导,点 下一步。

这时需要输入开发者帐号进行验证。

验证成功后,正在连接应用商店。

然后,在应用列表中选择你需要同步的应用,这里我还是选上次创建的“示例应用”。

然后一路 下一步 ,直到完成为止。应用程序清单文件会自动修改。

================================================================

下面我们就可以测试了,首先记得要以管理员身份运行我们前面写的服务器。输入SID和客户端密钥,获取access token。

运行WP手机客户端应用,会获取到通道URL并发送给服务器。

测试Toast通知

对WP来说,Toast只有ToastText02这个模板可用,就算你使用其他模板,它依然强制使用ToastText02模板。

修改XML模板,id为1的text无素设置toast标题,标题将以粗体显示;id为2的text元素为内容,显示为正常字体。

点击发送后,在手机上你会看到奇迹的发生。

如果使用X-WNS-SuppressPopup标头并设为true,Toast通知不会弹出,而是直接扔进操作中心队列中了。

测试磁贴

要看到磁贴通知,先要把应用固定到“开始”屏幕。

然后选择一个模板,并修改好XML内容,然后发送。

这时候,会看到手机“开始”屏幕上的磁贴已经更新。

也可以试试宽磁贴。

      

测试锁屏通知

先到系统设置中,把应用程序加入到锁屏序列中。

然后把手机锁屏,就可以测试了。

请看屏幕下方。

源码下载:http://files.cnblogs.com/tcjiaan/NotificationWPClApp.rar

对于RAW通知,可以与后台任务结合起来,即通过后台任务在后台来接收。关于这个,我们下一篇文章再扯。

【WP 8.1开发】手机客户端应用接收推送通知的更多相关文章

  1. Windows Phone开发(45):推送通知大结局——Raw通知

    原文:Windows Phone开发(45):推送通知大结局--Raw通知 为什么叫大结局呢?因为推送通知服务就只有三种,前面扯了两种,就剩下一种--Raw通知. 前面我们通过两节的动手实验,相信大家 ...

  2. Windows Phone开发(43):推送通知第一集——Toast推送

    原文:Windows Phone开发(43):推送通知第一集--Toast推送 好像有好几天没更新了,抱歉抱歉,最近"光荣"地失业,先是忙于寻找新去处,唉,暂时没有下文.而后又有一 ...

  3. Windows Phone开发(44):推送通知第二集——磁贴通知

    原文:Windows Phone开发(44):推送通知第二集--磁贴通知 前面我们说了第一个类型--Toast通知,这玩意儿不知大家是不是觉得很新鲜,以前玩.NET编程应该没接触过吧? 其实这东西绝对 ...

  4. 使用Google Cloud Messaging (GCM),PHP 开发Android Push Notifications (安卓推送通知)

    什么是GCM? Google Cloud  Messaging (GCM) 是Google提供的一个服务,用来从服务端向安卓设备发送推送通知. GCM分为客户端和服务端开发. 这里我们只介绍服务端开发 ...

  5. 【WP 8.1开发】推送通知测试服务端程序

    所谓推送通知,用老爷爷都能听懂的话说,就是: 1.我的服务器将通知内容发送到微软的通知服务器,再由通知服务器帮我转发消息. 2.那么,微软的推送服务器是如何知道我的服务器要发消息给哪台手机呢?手机客户 ...

  6. 推送通知iOS客户端编写实现及推送服务器端编写

    http://blog.csdn.net/tonny_guan/article/details/8963262 1.iOS客户端编程 推送通知技术在Mac OS X和iOS系统上都可以运行,我们本章主 ...

  7. (转)在SAE使用Apple Push Notification Service服务开发iOS应用, 实现消息推送

    在SAE使用Apple Push Notification Service服务开发iOS应用, 实现消息推送 From: http://saeapns.sinaapp.com/doc.html 1,在 ...

  8. iOS 10推送通知开发

    原文地址:Developing Push Notifications for iOS 10,译者:李剑飞 虽然通知经常被过度使用,但是通知确实是一种获得用户关注和通知他们需要更新或行动的有效方式.iO ...

  9. Android:开机自启动并接收推送消息

    接收推送消息部分我们通过ZeroMQ实现,可以参考http://www.cnblogs.com/ilovewindy/p/3984283.html. 首先是开机自启动的功能实现,代码如下:1.     ...

随机推荐

  1. Android addHeaderView和setAdapter的调用顺序后报错

    在4.4之前的系统,setAdapter后再设置addHeaderView会爆 ListView想要添加headerview的话,就要通过addHeaderView这个方法,然后想要为ListView ...

  2. datax+hadoop2.X兼容性调试

    以hdfsreader到hdfswriter为例进行说明: 1.datax的任务配置文件里需要指明使用的hadoop的配置文件,在datax+hadoop1.X的时候,可以直接使用hadoop1.X/ ...

  3. 前端html、Javascript、CSS技术小结

    简单地总结了一下前端用过的html.javascript.css技术,算是清点一下,做个大略的小结,为进一步的学习给个纲领. 一.HTML 由于HTML5的兴起,简单地判断一个网页是否是html5网页 ...

  4. android简单登陆和注册功能实现+SQLite数据库学习

    最近初学android,做了实验室老师给的基本任务,就是简单的登陆和注册,并能通过SQLite实现登陆,SQlLite是嵌入在安卓设备中的 好了下面是主要代码: 数据库的建立: 这里我只是建立了一个用 ...

  5. Android Studio 无法启动模拟器的一种可能是你装的是Ghost版的系统

    我遇到的问题是,打开模拟器,进度条走到最后,突然出现了emulator error,然后模拟器就无法启动(不好意思当时没有截图).我是在Ghost版 win7系统下运行Android Studio 的 ...

  6. CentOs笔记

    系统 CentOs7,最小安装,使用 Ext4,/ ,/boot,/swap 使用标准分区,另一个分区做为数据分区,使用 LVM. 更新: http://mirrors.163.com/.help/c ...

  7. 【Bugly技术干货】那些年我们用过的显示性能指标

    Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创,转载请标明出处. 前言: 注:Google 在自己文 ...

  8. JDBC学习1:详解JDBC使用

    什么是JDBC JDBC(Java Database Connectivity),即Java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供同一访问,它由一组用Java ...

  9. 使用SQLIO测试磁盘性能

    SQLIO 是一个用于测试存储系统能力的命令行工具,用以获取存储系统相关的性能指标,以判断系统的 I/O 处理能力. 在微软的网站可以下载 SQLIO 的安装包,安装后目录中会出现如下文件: EULA ...

  10. 技术渣如狗,面试虐成猴——本科楼主UC笔试加处女一面全纪录

    背景——楼主为广州某校小本一枚,学习成绩渣(班里排名几乎倒数),技术基础渣(算是会敲代码,但很多计算机网络.操作系统的知识都只有模糊的印象).在舍友的鼓励下,收到广州UC的面试通知后,勇敢来到公司直面 ...