在 uwp 中漫游应用程序设置的替代方法
Alternative ways of roaming of app settings in uwp
Microsoft docs 对于 windows 中不受支持的功能描述了要弃用的包状态漫游,并将在以后的版本中删除。他们是否有任何可供小型开发人员免费使用的跨设备同步设置的替代方法?
文档说您可以使用 Azure App Service。
我曾经使用 OneDrive 跨设备漫游数据。您需要首先授权您的应用程序使用 OneDrive space,然后将用户的数据存储到他们自己的 OneDrive。
我建议您看看 Microsoft Graph。有了它,您可以将数据存储在用户 OneDrive 上。这是免费的,可用于其他平台。要获得此 运行 没有简单易行的答案,但这些是您需要做的三件主要事情:
集成图形授权
在 UWP 中开始使用 Graph 和设置登录等的一个很好的起点是这个项目:
https://github.com/CommunityToolkit/Graph-Controls
设置权限
下一步是授予您应用程序访问 OneDrive 的权限。使用 Files.ReadWrite.AppFolder
权限,您只能访问 OneDrive 上的应用程序文件夹,除此之外别无其他。你可以在这里阅读:
https://docs.microsoft.com/en-us/onedrive/developer/rest-api/concepts/special-folders-appfolder
请注意,企业帐户目前不支持此权限级别。有用户语音输入:
如果需要商业账户支持,您可以使用Files.ReadWrite
权限。这使您可以访问整个 OneDrive。在编码方面,这两个选项之间没有区别。
读写文件
上述项目使用的是Graph SDK。此处记录了使用 OneDrive 的其余部分 API,并附有如何将其与 SDK 一起使用的示例:
https://docs.microsoft.com/en-us/graph/api/resources/driveitem?view=graph-rest-1.0
下面是一些代码,向您展示了如何做最重要的事情。该代码将数据存储在子文件夹 Synchronizing1 中。这使得将来可以在不破坏旧安装的情况下以不同的方式存储数据:
var provider = ProviderManager.Instance.GlobalProvider;
var client = provider.GetClient();
string path = "Synchronizing1";
Stream stream = ...;
// Upload or create a file
await client.Me.Drive.Special.AppRoot.ItemWithPath(System.IO.Path.Combine(path, fileName)).Content
.Request()
.PutAsync<DriveItem>(stream);
// Open a file for reading
var remoteStream = await client.Me.Drive.Special.AppRoot.ItemWithPath(System.IO.Path.Combine(path, fileName)).Content
.Request()
.GetAsync();
// Get all files form a folder
var childrenPage = await client.Me.Drive.Special.AppRoot.ItemWithPath(path).Children
.Request()
.GetAsync();
var children = childrenPage.ToList();
while (childrenPage.NextPageRequest != null)
{
childrenPage = await childrenPage.NextPageRequest.GetAsync();
children.AddRange(childrenPage.ToList());
}
Microsoft docs 对于 windows 中不受支持的功能描述了要弃用的包状态漫游,并将在以后的版本中删除。他们是否有任何可供小型开发人员免费使用的跨设备同步设置的替代方法?
文档说您可以使用 Azure App Service。
我曾经使用 OneDrive 跨设备漫游数据。您需要首先授权您的应用程序使用 OneDrive space,然后将用户的数据存储到他们自己的 OneDrive。
我建议您看看 Microsoft Graph。有了它,您可以将数据存储在用户 OneDrive 上。这是免费的,可用于其他平台。要获得此 运行 没有简单易行的答案,但这些是您需要做的三件主要事情:
集成图形授权
在 UWP 中开始使用 Graph 和设置登录等的一个很好的起点是这个项目:
https://github.com/CommunityToolkit/Graph-Controls
设置权限
下一步是授予您应用程序访问 OneDrive 的权限。使用 Files.ReadWrite.AppFolder
权限,您只能访问 OneDrive 上的应用程序文件夹,除此之外别无其他。你可以在这里阅读:
https://docs.microsoft.com/en-us/onedrive/developer/rest-api/concepts/special-folders-appfolder
请注意,企业帐户目前不支持此权限级别。有用户语音输入:
如果需要商业账户支持,您可以使用Files.ReadWrite
权限。这使您可以访问整个 OneDrive。在编码方面,这两个选项之间没有区别。
读写文件
上述项目使用的是Graph SDK。此处记录了使用 OneDrive 的其余部分 API,并附有如何将其与 SDK 一起使用的示例:
https://docs.microsoft.com/en-us/graph/api/resources/driveitem?view=graph-rest-1.0
下面是一些代码,向您展示了如何做最重要的事情。该代码将数据存储在子文件夹 Synchronizing1 中。这使得将来可以在不破坏旧安装的情况下以不同的方式存储数据:
var provider = ProviderManager.Instance.GlobalProvider;
var client = provider.GetClient();
string path = "Synchronizing1";
Stream stream = ...;
// Upload or create a file
await client.Me.Drive.Special.AppRoot.ItemWithPath(System.IO.Path.Combine(path, fileName)).Content
.Request()
.PutAsync<DriveItem>(stream);
// Open a file for reading
var remoteStream = await client.Me.Drive.Special.AppRoot.ItemWithPath(System.IO.Path.Combine(path, fileName)).Content
.Request()
.GetAsync();
// Get all files form a folder
var childrenPage = await client.Me.Drive.Special.AppRoot.ItemWithPath(path).Children
.Request()
.GetAsync();
var children = childrenPage.ToList();
while (childrenPage.NextPageRequest != null)
{
childrenPage = await childrenPage.NextPageRequest.GetAsync();
children.AddRange(childrenPage.ToList());
}