[Win10应用开发] 使用 Windows 推送服务 (WNS)

前言

Windows 推送服务(WNS)也是 Win10 通知机制中的一种,今天与大家一起学习一下有关WNS的相关知识。使用 Windows 推送服务的前提是你需要有一个微软开发者账号,这样才能得到一些合法的密钥信息用于与WNS服务器完成通讯操作。

附上一张关于消息推送原理图:

图片描述

(来自 MSDN )

创建消息通道

使用 PushNotificationChannelManager 中的 CreatePushNotificationChannelForApplicationAsync() 创建 PushNotificationChannel 对象,通过订阅事件 PushNotificationReceived 接收 WNS 推送的消息。这里需要主意的是,PushNotificationChannel 内的 Url 属性。 WNS服务器怎么才能知道消息该推送给谁,就是依赖 Url 属性。

PushNotificationChannel pushNotificationChannel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
pushNotificationChannel.PushNotificationReceived += PushNotificationChannel_PushNotificationReceived;
private void PushNotificationChannel_PushNotificationReceived(PushNotificationChannel sender,PushNotificationReceivedEventArgs args)
{if (args.NotificationType == PushNotificationType.Toast){ToastNotificationManager.CreateToastNotifier().Show(args.ToastNotification);}
}

推送请求

这个过程分为两步进行:

  • OAuth 认证

  • 推送消息请求

了解OAuth认证的童鞋应该知道,我们应该具有一些合法的密钥信息,才能让目标服务器信任我们,然后我们才能进行真正的请求。而与WNS打交道时所有的密钥信息从哪来呢?这就需要微软开发者账号

登录微软开发者网站,打开你的仪表盘(DashBoard),如果你还没有应用就先创建一个应用。在应用详情里选择 服务推送通知

图片描述

打开下图中链接

图片描述

看到了么?这就是我们需要的信息

图片描述

在进行 OAuth 认证我们需要 SIDClient_Id ,下面我们模拟一下 AppServiceWNS OAuth认证过程

HttpClient httpClient = new HttpClient();
Dictionary<string, string> @params = new Dictionary<string, string>
{{"grant_type", "client_credentials"},{"client_id","ms-app://************* SID ********************"},{"client_secret", "/********** Client Id *************"},{"scope", "notify.windows.com"}
};HttpFormUrlEncodedContent httpFormUrlEncodedContent = new HttpFormUrlEncodedContent(@params);
httpFormUrlEncodedContent.Headers["Content-Type"] = "application/x-www-form-urlencoded";
var response =await httpClient.PostAsync(new Uri("https://login.live.com/accesstoken.srf"), httpFormUrlEncodedContent);string content = await response.Content.ReadAsStringAsync();

认证成功后,可以得到 access_token ,这样我们的身份就合法了。

{"access_token":"*****************/****************=", "token_type":"bearer"
} 

OAuth认证通过以后,就可以向WNS发送真正的推送请求了。下面我们模拟一下 AppService 是如何给 Client 推送 Toast消息

HttpClient httpClient2 = new HttpClient();HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, new Uri(ChannelUrl));
httpRequestMessage.Headers.Add("Authorization", "Bearer " + access_token);
httpRequestMessage.Headers.Add("X-WNS-Type", "wns/toast");string toastContent = @"<toast><visual><binding template='ToastGeneric'><text>Hello World!</text><text>This is the first Example!</text></binding></visual></toast>";HttpStringContent httpStringContent = new HttpStringContent(toastContent);
httpStringContent.Headers["Content-Type"] = "text/xml";
httpStringContent.Headers["Content-Length"] =Encoding.UTF8.GetBytes(toastContent.ToCharArray()).Length.ToString();httpRequestMessage.Content = httpStringContent;var response2 = await httpClient.SendRequestAsync(httpRequestMessage);

该注意的是 ChannelUrl 就是客户端在创建 PushNotificationChannel 对象中的 Url 的值。请求成功后,WNS就会根据Url推送给与之对应的客户端。

结束

到此为止,我们已经实现一个远程推送的 DEMO。当然 WNS 里还有许多知识没有提及到,比如除了Toast通知外,我们可以推送Tile等其他类型的通知。推荐大家去仔细阅读一下官方的说明文档,后续我也会补充WNS额外的内容。

参考链接

Windows 推送通知服务 (WNS) 概述
推送通知服务请求和响应头

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/284636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 11 新版 25158 推送!全新搜索框和图标、小组件动态内容和通知标记

面向 Dev 频道的 Windows 预览体验成员&#xff0c;微软现已推送 Windows 11 预览版 Build 25158。主要变化1.微软宣布为 Windows 11 搜索引入全新视觉体验&#xff0c;由搜索框或重新设计的搜索图标呈现。目前该功能仅向部分 Windows 预览体验成员推出&#xff0c;将在未来向所…

【BIM入门实战】Revit创建地形的几种方法及优缺点

Revit在体量和场地选项卡的【地形表面】工具可以创建三维地形,有三种方法:放置点、指定点文件和导入实例文件、倾斜摄影点云技术和InfraWorks地形生成。 文章目录 1. 放置点2. 指定点文件3. 导入实例文件4. 倾斜摄影点云技术5. InfraWorks地形生成1. 放置点 放置点功能位于体…

2024年起重机司机(限门式起重机)证考试题库及起重机司机(限门式起重机)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年起重机司机(限门式起重机)证考试题库及起重机司机(限门式起重机)试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作…

微服务架构下的统一身份认证和授权

一、预备知识 本文讨论基于微服务架构下的身份认证和用户授权的技术方案&#xff0c;在阅读之前&#xff0c;最好先熟悉并理解以下几个知识点&#xff1a; 微服务架构相关概念&#xff1a;服务注册、服务发现、API 网关身份认证和用户授权&#xff1a;SSO、CAS、OAuth2.0、JW…

使用vh来制作高度自适应页面和元素垂直居中

为什么80%的码农都做不了架构师&#xff1f;>>> vh单位 vh是CSS3中的一个长度单位&#xff0c;其值为&#xff1a;100vh 视窗高度。即如果窗口高度为500px&#xff0c;那么 1vh 5px。具体的值会随着浏览器视窗高度的改变而实时改变&#xff0c;因此可以利用这个单…

传智168期JavaEE struts2杜宏 day32~day33(2017年2月15日23:27:09)

struts2学习完毕&#xff0c;寒假学习效率还不错。 笔记链接 链接&#xff1a;http://pan.baidu.com/s/1boBJLVp 密码&#xff1a;wwl4转载于:https://www.cnblogs.com/huangtao1996/p/6403886.html

GitLab的安装、配置、使用

前言上周去参与“中国数字经济创新发展大会”了&#xff0c;然后又忙新项目的事情&#xff0c;博客又有一段时间没有更新&#xff0c;今天周一事情比较少&#xff0c;立刻开始写文&#xff0c;最近有挺多值得记录的东西~进入正文&#xff0c;最近我们搭了个Gitlab&#xff0c;并…

【BIM入门实战】Navisworks2018简体中文安装教程(附安装包下载)

Navisworks是Autodesk公司开发的一款三维模型可视化软件,它以轻量化的运行方式进行BIM成果的后期处理及整合,是一款非常实用的软件。基于Navisworks,项目的参建方可以在施工前进行模拟施工,以达到减少返工、缩短工期、提供经济效益的目的。 Navisworks同时支持4D和5D模拟,…

微软 Windows11 Build 22000.71 更新(KB5004252)发布

微软推出了一个全新的娱乐小工具。这一部件允许用户查看 Microsoft Store 中可用的新电影和精选电影。选择一部电影会引导用户到 Microsoft Store 查看有关该影片的更多信息。 7 月 16 日消息 今日凌晨&#xff0c;微软宣布向预览体验计划用户发布 Windows 11 Build22000.71 更…

【BIM入门实战】Revit模型导入到第三方软件方法汇总

本文以案例的方式,汇总展示了Revit模型导入到ArcGIS Pro、3ds max、Navisworks、Lumion、InfraWorks等的方法。 文章目录 1. Revit导入ArcGIS Pro2. Revit导入3ds Max3. Revit导入Navisworks4. Revit导入Lumion5. Revit导入InfraWorks1. Revit导入ArcGIS Pro ArcGIS Pro2.8可…

Blazor University (37)JavaScript 互操作 —— JavaScript 启动过程

原文链接&#xff1a;https://blazor-university.com/javascript-interop/javascript-boot-process/JavaScript 启动过程在 Blazor 启动过程中&#xff0c;浏览器将在 Blazor 初始化之前创建 HTML 文档&#xff0c;这意味着从引导 HTML 引用的任何 JavaScript 都将立即加载&…

时代聚焦AI安全——可解释性

今年的NIPS多集中在人工智能安全上&#xff0c;此外精彩的部分还有凯特克劳福德关于人工智能公平性问题上被忽视的主题演讲、ML安全研讨会、以及关于“我们是否需要可解释性&#xff1f;”可解释ML讨论会辩论。 值校准文件 逆向奖励设计是为了解决RL代理根据人类设计的代理奖励…

【BIM入门实战】渲染器Vray for 3d max 2018图文安装教程

VRay是由chaosgroup和asgvis公司出品的一款高质量渲染软件。VRay是业界最受欢迎的渲染引擎。基于V-Ray 内核开发的有VRay for 3ds max、Maya、Sketchup、Rhino等诸多版本,为不同领域的优秀3D建模软件提供了高质量的图片和动画渲染。方便使用者渲染各种图片。 Vray for 3d max …

Android--Activity四种启动模式

launchMode在多个Activity跳转的过程中扮演着重要的角色&#xff0c;它可以决定是否生成新的Activity实例&#xff0c;是否重用已存在的Activity实例&#xff0c;是否和其他Activity实例公用一个task里。这里简单介绍一下task的概念&#xff0c;task是一个具有栈结构的对象&…

Hibernate初探

Hibernate对数据库结构提供了较为完整的封装&#xff0c;Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射&#xff0c;以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系&#xff0c;即可通过Hibernate 提供的方法完成持久层操作。程序员甚至…

【BIM入门实战】InfraWorks2018图文安装教程

Autodesk InfraWorks是易于使用的草图绘制工具,适用于土地规划师和基础设施设计师。AutodeskInfraWorks可以生成可视化的高级模型,而无需借助辅助,可以独立进行建模的BIM可视化软件。 InfraWorks2018软件预览: 双击安装包进行安装。 自解压中,等待即可。 点击【安装】。 点…

有点酷,使用 .NET MAUI 探索太空

设计 我准备用 .NET Maui 实现一个非常有意思的 "前往太空" 的程序。第一步&#xff0c;需要图片素材&#xff0c;我使用了 Aan Ragil 的一组非常棒的 Dribbble 素材图片。当然&#xff0c;你也可以在最下面的链接进行下载。实现 这个应用程序的完整源代码可以在 G…

实例讲解——系统登录

一&#xff0c;程序分析 首先使用参数的方式输入用户名和密码&#xff0c;所以&#xff0c;首先要判断输入参数的个数是否合法&#xff0c;如果不合法&#xff0c;则必须提示程序执行不对&#xff0c;并退出。 如果正确输入&#xff0c;则可以进行密码和用户名的验证&#xff0…

【Microsoft Office】Word 2019空格下划线不显示的解决办法

解决办法&#xff1a;点击【文件】→【选项】→【高级】选项卡→勾选【为尾部空格添加下划线(U)】&#xff0c;解决&#xff01;

1.安装

转自&#xff1a;http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html Mocha&#xff08;发音"摩卡"&#xff09;诞生于2011年&#xff0c;是现在最流行的JavaScript测试框架之一&#xff0c;在浏览器和Node环境都可以使用。 所谓"测试框…