當用戶在多個windows設備上使用應用時,咱們但願用戶的某些設置和數據能夠在多個之間共享,好比咱們新版本中收藏的文章。一般狀況下要實現這種功能,咱們可能須要本身弄個服務器或者使用onedrive等網站來存放文件,可是對於咱們這種小型的應用有點過了,額外增長了代碼和維護的工做。這種時候使用windows roaming就是一個比較方便的選擇。git
所謂的漫遊數據,MSDN上是這樣介紹的:github
Windows 8 可在用戶設備之間自動傳輸某些應用數據。應用開發人員無需再執行費力的工做。漫遊應用數據爲最終用戶提供使用多臺設備(例如辦公電腦和家用平板電腦)的卓越應用體驗windows
Windows應用在安裝時,系統會爲設置和文件等應用數據提供它本身的用戶數據存儲(由於windows上可能使用不一樣的帳號登錄,因此這個存儲須要按用戶分開),大概分爲4種,具體參見MSDN。服務器
本地當前設備上存在的數據將在雲中備份。網絡
漫遊存在於用戶安裝了該應用的全部設備上的數據。app
臨時可由系統在任什麼時候刻刪除的數據。測試
localcache網站
僅存在於當前設備上的持久數據。spa
其中漫遊(roaming)就是咱們須要的,能夠漫遊的數據分爲兩種:設置和文件。而咱們只須要負責寫入內容就能夠了,其餘的都由系統控制(甚至能夠在網絡異常以後自動重試,爲咱們省下不少時間和代碼啊)。設計
設置是Windows提供的key-value存儲空間,使用方法和字典差很少,但須要注意的是可存儲的類型,只支持大部分運行時(runtime)的類型,自定義的類型就不要想了。
// 對於不須要同步的設置項,使用LocalSettings // ApplicationDataContainer local = Windows.Storage.ApplicationData.Current.LocalSettings; // 須要同步的使用RoamingSettings,兩種setting的使用是同樣的 ApplicationDataContainer roaming = Windows.Storage.ApplicationData.Current.RoamingSettings; roaming.Values["key"] = "漫遊的設置";
當設置不能知足需求的時候,咱們能夠將內容寫入文件,並存放在漫遊文件夾。
// 漫遊文件夾 var roamingFolder = Windows.Storage.ApplicationData.Current.RoamingFolder; // 在漫遊文件夾內建立一個文件, var file = await roamingFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists); // 寫入內容 awaitFileIO.WriteTextAsync(file, "須要同步的內容");
以上就是使用漫遊的代碼,這樣只要用戶使用同一個帳號登錄設備,並安裝了同一個版本的應用(注意:必須是同一版本的),那麼這些數據就會被系統同步。
效果以下:
windows 端:
windows phone 端:
漫遊雖然很方便,但它的使用是有限制的。
Windows的應用數據漫遊有大小限制(應該是100KB, 雖然MSDN上沒有明確給出具體數值,可是這個值應該是和設備無關的,即便不同咱們也應該選擇最小的做爲基準。。),具體能夠經過使用Windows.Storage.ApplicationData.Current.RoamingStorageQuota來得到,單位是KB。
使用模擬器測試的同窗須要注意了,在模擬器上這個值返回的是0。。。
若是超過了這個限制,數據就不會被漫遊了。由於這個限制,咱們須要謹慎的選擇存儲的內容(但願之後能夠提升這個限制,有點不夠用啊。。),儘可能選擇必要的應用設置和小文件。
由於漫遊的自己就不是爲了及時同步設計的,因此會形成應用的數據不一致的狀況,就是說你在手機上保存了一個文件,不必定被馬上同步到其餘設備上,這個時間是由系統決定(也和網絡有關),因此對時間有要求的同窗能夠繞路了。。對於這點MSDN上有詳細的說明:
Windows 會隨機漫遊應用數據,不會保證即時同步。若是用戶脫機或位於高延遲網絡中,則漫遊可能會明顯延遲。請勿構建須要即時同步的 UI。 若是你的應用頻繁更改信息(例如,歌曲或電影中的最新位置),則請勿對此數據使用漫遊應用數據功能。而選取較不頻繁但仍可提供良好用戶體驗的表示 – 例如,當前播放的歌曲、當前播放的電影章節等。
咱們的已經發布的應用和代碼能夠在下面找到:
Windows Phone Store App link:
http://www.windowsphone.com/zh-cn/store/app/博客園-uap/500f08f0-5be8-4723-aff9-a397beee52fc
Windows Store App link:
http://apps.microsoft.com/windows/zh-cn/app/c76b99a0-9abd-4a4e-86f0-b29bfcc51059
GitHub open source link:
https://github.com/MS-UAP/cnblogs-UAP
MSDN Sample Code:
https://code.msdn.microsoft.com/CNBlogs-Client-Universal-477943ab