【问题标题】:Alternative ways of roaming of app settings in uwp在 uwp 中漫游应用程序设置的替代方法
【发布时间】:2020-10-17 09:14:36
【问题描述】:

Microsoft docs for unsupported features in windows 描述了包状态漫游将被弃用,并将在以后的版本中删除。他们是否有任何替代方式来在小型开发人员可以免费使用的设备之间同步设置?

【问题讨论】:

    标签: uwp settings windows-10-universal application-settings windows-10-desktop


    【解决方案1】:

    文档说你可以使用Azure App Service

    我曾经使用 OneDrive 跨设备漫游数据。您需要先验证您的应用以使用 OneDrive 空间,然后将用户的数据存储到他们自己的 OneDrive。

    【讨论】:

    • 我必须付费才能使用 Azure 应用服务对吗?? OneDrive 的东西对我来说很有希望。
    • 可能需要付费,文档中没有说明是免费的。
    【解决方案2】:

    我建议您查看 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

    请注意,企业帐户目前不支持此权限级别。有关于这个的用户语音输入:

    https://onedrive.uservoice.com/forums/913708-onedrive-developer-platform/suggestions/33911101-make-files-readwrite-appfolder-work-with-onedrive

    如果需要企业账号支持,可以使用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());
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 2010-12-14
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多