[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.pswp.cn/news/284636.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284636.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284636.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows 11 新版 25158 推送!全新搜索框和圖標、小組件動態內容和通知標記

面向 Dev 頻道的 Windows 預覽體驗成員&#xff0c;微軟現已推送 Windows 11 預覽版 Build 25158。主要變化1.微軟宣布為 Windows 11 搜索引入全新視覺體驗&#xff0c;由搜索框或重新設計的搜索圖標呈現。目前該功能僅向部分 Windows 預覽體驗成員推出&#xff0c;將在未來向所…

Python之路【第一篇】:環境搭建

虛擬機安裝 下載VMwareWorkstation以及centos,安裝完VMwareWorkstation&#xff0c;創建一個虛擬機&#xff0c;然后在新創建的虛擬機上運行centos linux環境搭建 公司開發使用linux的原因&#xff1a;穩定、安全、開源 在虛擬機中使用centos這個版本&#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 更…

Python入門教程之Python保留字符大全

Python中的保留字不能用作常數或變數&#xff0c;或任何其他標識符名稱。所有 Python 的關鍵字只包含小寫字母。 andexecnotassertfinallyorbreakforpassclassfromprintcontinueglobalraisedefifreturndelimporttryelifinwhileelseiswithexceptlambdayield轉載于:https://blog.…

Linux操作系統基礎解析之(五)——grep命令家族及正則表達式初識

grep號稱文本處理三劍客之一&#xff0c;雖然說是三劍客中功能最少也是最簡單的&#xff0c;但仍然不能小覷。 grep的全稱為&#xff1a;Global search REgular expression and Print out the line&#xff0c;即&#xff1a;全面查找正則表達式并將匹配的行顯示出來。 那么這…

Ubuntu16.04換源

Ubuntu16.04換源 轉載于:https://www.cnblogs.com/xielisen/p/6404607.html

【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 都將立即加載&…

git clone出現 fatal: unable to access ‘https://github.com/...‘的解決辦法

錯誤信息&#xff1a; fatal: unable to access https://github.com/JackieZheng/**.git/: OpenSSL SSL_read: Connection was reset, errno 10054 清除代理即可 git config --global --unset http.proxy git config --global --unset https.proxy

時代聚焦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是一個具有棧結構的對象&…

常用SEO優化之META標簽

之前對meta標簽的理解只有<meta charset"UTF-8">和移動端適口<meta name"viewport" content"widthdevice-width,initial-scale1.0, minimum-scale1.0, maximum-scale1.0, user-scalableno"/> 組成 meta標簽共有兩個屬性&#xff0c…