博客园客户端(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);

// 写入内容
await FileIO.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-9c9692d1

时间: 2024-10-18 08:27:03

博客园客户端(Universal App)开发随笔 - 应用漫游数据(roaming)的相关文章

博客园客户端(Universal App)开发随笔 – App也需要物流前的打包

想起来一个笑话:唐僧一行千辛万苦来到佛祖面前,准备取经,佛祖轻声问了一句:汝等带U盘了吗?师徒4人立刻昏倒在地.好吧,扯远了,不过是想告诉大家准备工作一定要到位. Universal App 的打包发布其实与传统的 Windows Phone / Windows Store App 项目并无太大不同,但是鉴于总有人会在这些步骤中遇到问题,而且即使是发布过几个应用的开发者也不例外,所以对这个看起来比较繁琐的过程做一个小结还是必要的. 打包前的准备工作 1. 修改编译模式 在调试程序时,我们通常会选

博客园客户端(Universal App)开发随笔 - Setting Page的实现方法与经验

前言 几乎所有的移动 App 都会为用户提供一个设置页面(Setting Page 或 Preference Page),来满足大家对于一个 App 众口难调的需求.虽然有一种说法表示,最好的 App 不需要设置,一切默认呈现给用户的就是最好的选择.但是对于大多数开发人员来说,这样的境界不是可以简单达到的:而且对于部分“设置控”用户来说,没有设置页面怎么看都觉得少了些什么.所以对于大部分 App 来说,设置页面还是一个必备品. 本文将分别介绍 Windows 和 Windows Phone 的设

博客园客户端(Universal App)开发随笔 - UAP中的项目和目录组织

前言 本篇随笔主要是分享一下做一个Universal App的目录组织结构,说明什么样的结构才能适合一个团队开发,使开发成员之间的相互影响最小.这些组织好的项目和目录会成为一个公共的规约,大家都能知道什么东西应该放在哪里,或者在什么地方能找到什么功能.这对于避免重复写code或者最大限度地复用code来说是至关重要的. 这种工程结构和目录划分虽然没有什么理论基础,但是是经过我们很多项目的经验总结出来的,如果是个人开发者,也严重建议参考此组织结构,能够帮助你理清思路,做好功能设计和类设计. 项目组

博客园客户端(Universal App)开发随笔 -- 样式管理与夜间模式

以今天的眼光来看,一个好应用首先是要有好的用户体验.而好的用户体验最直观的就来自于用户界面.好的用户界面则需要好的设计,更需要好的实现.今天我们就向大家分享一下我们在使用Xaml实现界面设计上的一点心得. 样式管理 我们拿到的设计,大多是一张红线图,布满了距离,字号,色号,事无巨细的量化了我们的用户界面.如果我们就这样把各种属性照搬到上Xaml文件中,那看起来就非常不妙了,比如这样: <TextBlock Text="首页"FontFamily =" Segoe WP

博客园客户端(Universal App)开发随笔 – UAP 项目的发布

在费尽无数脑细胞开发出一款 App 并且通过测试,自我感觉良好的时候,我们一定希望我们的 App 能够尽快出现在商店的首页上,被人下载,使用,打分,评价,反馈,甚至是被无情地喷.但据本人经验,通常从项目打包好(打包的具体注意事项,请参见前文),到通过审核,其他用户在商店可以看到,往往都像新手第一次编译程序一样,一波三折,弹出不同的错误和警告,这个时候,只有耐下性子,一个一个问题都解决了,才能顺利通过审核.所以我觉得还是很有必要写点什么,讲一下 App 发布时的注意事项,省得大家多走弯路. 虽说开

博客园客户端(Universal App)开发随笔 -- 数据基础准备

在开始之前,我们先了解下博客园提供的接口: 博客: http://wcf.open.cnblogs.com/blog/help新闻: http://wcf.open.cnblogs.com/news/help 以博客园_48小时阅读排行为例,返回的Xml如下图(RSS,如果你用IE打开的话,会提示你订阅..). 博客园的大部分API返回的都是RSS(还提供分页!),如果只是做一个简单的RSS reader,可以直接用SyndicationClient,在RetrieveFeedAsync后会把X

博客园客户端(Universal App)开发随笔 -- App的精灵:自定义控件

前言 拿到一个App的需求后,对于前端工程师来说,第一步要干什么?做Navigation规划!第二步要干什么?做页面分解!页面分解如何做?首先要确定UI Element的容器,其次要抽象UI Element本身,也就是要做一堆自定义控件,最终组成整个页面.今天我们就说说自定义控件如何实现吧. 感性认识 在我们的博客园UAP的Windows Phone的版本中,一个最重要的自定义控件就是PostControl,它的样子如下图中红色矩形内所示. 这个控件在无数页面中都要用到,而且有几种变种.上面看到

博客园客户端(Universal App)开发随笔 -- 增量加载 (incremental loading)

在我们的应用(博客园UAP)中,加入了ListView上拉获取更多内容的功能(GridView也可以),这个功能是通过ISupportIncrementalLoading接口实现的,这是个从Windows 8就开始提供的接口(当然你可以通过ScrollViewer来实现这个功能,只不过稍微麻烦点,还要自己再封装..). 这个接口的定义十分简单: public interface ISupportIncrementalLoading { bool HasMoreItems { get; } IAs

博客园客户端(Universal App)开发随笔 - Hello, Universal

在移动和云成为微软的主题之后,Windows Phone 8.1 手机和Windows 8.1平板也渐渐成熟,吸引了越来越多的开发者.为了让开发者们高效的开发一款跨手机和平板的应用,微软顺势推出了Universal应用的概念. 今天我们想向大家分享怎样用C#和XAML语言开始开发一个跨Windows 8.1和 Windows Phone 8.1 的 Universal 应用. 准备 首先硬件方面我们的计算机要支持Hyper-V功能或者有一部运行Windows Phone 8.1 操作系统的手机.