博客園客戶端(Universal App)開發隨筆 - 應用漫游數據(roaming)


當用戶在多個windows設備上使用應用時,我們希望用戶的某些設置和數據可以在多個之間共享,比如我們新版本中收藏的文章。通常情況下要實現這種功能,我們可能需要自己弄個服務器或者使用onedrive等網站來存放文件,但是對於我們這種小型的應用有點過了,額外增加了代碼和維護的工作。這種時候使用windows roaming就是一個比較方便的選擇。

所謂的漫游數據,MSDN上是這樣介紹的:

Windows 8 可在用戶設備之間自動傳輸某些應用數據。應用開發人員無需再執行費力的工作。漫游應用數據為最終用戶提供使用多台設備(例如辦公電腦和家用平板電腦)的卓越應用體驗

Windows應用在安裝時,系統會為設置和文件等應用數據提供它自己的用戶數據存儲(因為windows上可能使用不同的賬號登陸,所以這個存儲需要按用戶分開),大概分為4種,具體參見MSDN

本地當前設備上存在的數據將在雲中備份。

 

漫游存在於用戶安裝了該應用的所有設備上的數據。

 

臨時可由系統在任何時刻刪除的數據。

 

localcache

僅存在於當前設備上的持久數據。

其中漫游(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 端:

cnblog_roaming_windows

windows phone 端:

cnblog_roaming_wp

漫游雖然很方便,但它的使用是有限制的。

Windows的應用數據漫游有大小限制(應該是100KB, 雖然MSDN上沒有明確給出具體數值,但是這個值應該是和設備無關的,即使不一樣我們也應該選擇最小的作為基准。。),具體可以通過使用Windows.Storage.ApplicationData.Current.RoamingStorageQuota來獲得,單位是KB。

cnblog_size

使用模擬器測試的同學需要注意了,在模擬器上這個值返回的是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


免責聲明!

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



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