【完全開源】知乎日報UWP版:增加Live磁貼、Badge、以及Toast通知


目錄

 

說明

之前網上有人建議增加磁貼(tile)、徽章(badge)功能。利用周末的時間,將這兩個功能添加上去了。如果將磁貼固定到開始屏幕,磁貼就會循環播放首頁5條“頭條文章”所包含的的圖片及標題,並且會顯示還未閱讀的條數(badge)。另外,當用戶點亮屏幕,后台任務自動執行刷新首頁數據,如果有新的“頭條文章”,便會向用戶發送Toast通知。下面是效果圖:

  

  

 

背景了解

【完全開源】知乎日報UWP(上篇):界面設計、官方API分析。

【完全開源】知乎日報UWP(下篇):商店APP、github源碼。Windows APP良心出品。

github源碼

商店APP(寫這篇文章的時候,最新版還沒有審核完畢)

 

注:點擊通知,只能喚醒APP主界面,並不能跳轉到指定頁面(該功能后期完善)。

 

實現方法

實現方法其實很簡單,主要用到了“后台任務”(后面會講到),當用戶點亮屏幕時,會觸發后台任務,后台任務刷新數據,更新磁貼、badge以及看情況是否發送通知:

  • 點亮屏幕(可以設置成每隔30分鍾、1小時);
  • 請求數據;
  • 更新磁貼。將頭條文章的圖片、標題update到tile中(注意這里是指定tile更新計划:ScheduledTileNotification);
  • 更新badge。如果頭條文章有未閱讀的,則將未閱讀條數更新到Badge;
  • 顯示Toast通知。如果有未閱讀的文章並且還未曾向用戶提醒,那么發出Toast通知。

具體實現:

1.指定tile更新計划:

2.更新badge:

3.顯示toast通知:

 

用到的庫:

NotificationsExtensions

主要用來操作顯示tile、badge以及toast的xml,如果不用它的話,那么我們需要使用XmlDocument來手動構建xml(很麻煩),使用NotificationsExtensions的話,寫代碼時帶智能提示,比如提示你使用到的tile模板需要兩個text、一個image等等。

 

APP生命期

其實這塊本來想單獨寫一篇文章的,只是光前面的內容感覺湊不齊一篇文章。

移動設備有很多資源限制,比如內存、存儲、電量等,它不同於傳統PC等設備,可以24小時插上交流電源,日夜工作不關機、不關屏幕,移動設備顯然做不到這樣。既然它存在短板,那么設備中運行的軟件也必須做出讓步(妥協)。怎樣妥協呢?就是讓你的APP代碼大部分時間不運行。是的,沒錯,你手機APP的代碼運行時間只占一小部分。

傳統桌面軟件運行狀態:

APP運行狀態:

如上圖所示,APP的狀態有三個。只有當APP界面處於手機屏幕最前端時,它才處於Runing狀態,其余時間要么是Suspended(或即將進入Suspended)狀態、要么就是沒運行(Not Runing)。APP運行機制只有設置成這樣才會避免移動設備的短板,因為它只要不運行就能夠相對性地節約資源啊。

那么現在有一個問題,男刀系統中真的同一時間只能運行一個APP嗎?如果是這樣,那么大部分APP怎樣完成一些實時功能呢?比如怎樣接收短信、怎樣接收QQ消息?不可能讓QQ APP一直處於手機屏幕最前端吧?萬一屏幕關閉了呢?為了解決這個問題,Windows 10(Mobile)中引入了“后台任務”的概念,即使APP沒有運行(not running或者suspended),后台任務還是可以運行的,也就是說它的運行不受APP運行狀態的影響。

 

后台任務

什么是后台任務?說白了,后台任務就是一個被系統回調的代碼塊,當系統滿足某個條件時自動調用,而這完全不受APP本身運行狀態的影響(哪怕APP都沒有啟動過)。

有了后台任務,我們就能開發出具備實時功能的APP了,首先向系統注冊一個后台任務,給定后台任務執行的條件,這樣就OK了。下次不管APP本身狀態如何,一旦條件滿足(比如收到QQ消息),后台任務立即執行。

(請忽略圖中手機)

 

使用后台任務步驟:

  • 檢查系統中是否已存在該后台任務,若否;
  • 創建后台任務;
  • 指定后台任務入口;
  • 指定后台任務觸發器(回調的條件);
  • 向系統注冊。

之后就OK了。需要注意的是,注冊前必須檢查是否已經存在、后台任務的定義(入口)必須放在一個單獨的Windows Runtime Component項目中。

后台任務和APP本身可以被看做是兩個相互獨立的Process,所以他們之間的數據交互最好通過永久性存儲介質(比如文件)來傳遞,具體內容這篇文章不講了。關於后台任務的內容可以看MSDN。后面如果有計划再細說。

特殊提示:

在Windows 10開發中,我們要充分利用Tile(磁貼)、Badge(徽章)以及Toast 通知,這些東西是誘導用戶打開APP查看信息的主要方式。因為一個APP可能被用戶遺忘了從來不會處於手機屏幕的最前端,我們只能通過后台任務接收一些推送信息、實現一些實時功能,然后再通過tile、badge以及toast的方式誘導用戶打開app。

 

開源有益,多謝點贊!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM