0

我正在开发一个 UWP 应用程序,我正在考虑从旧的LiveSDK(已停产,最后一次更新是在 2015 年左右)迁移到新的 OneDriveSDK(图形 API),特别是使用 UWP 社区工具包服务包及其API .

就登录和文件/文件夹管理而言,该库似乎很容易使用,但到目前为止,我还没有找到一种方法来检索用户全名、用户电子邮件和个人资料图片。

这是我目前使用 LiveSDK 执行此操作的代码(此处简化了代码):

public static async Task<(String username, String email)> GetUserProfileNameAndEmailAsync(LiveConnectSession session)
{
    LiveConnectClient connect = new LiveConnectClient(session);
    LiveOperationResult operationResult = await connect.GetAsync("me");
    IDictionary<String, object> results = operationResult.Result;
    String username = results["name"] as String;
    if (!(results["emails"] is IDictionary<string, object> emails)) return default;
    String email = emails["preferred"] as String ?? emails["account"] as String;
    return (username, email);
}

public static async Task<ImageSource> GetUserProfileImageAsync([NotNull] LiveConnectSession session)
{
    LiveConnectClient liveClient = new LiveConnectClient(session);
    LiveOperationResult operationResult = await liveClient.GetAsync("me/picture");
    String url = operationResult.Result?["location"] as String;

    // The URL points to the raw image data for the user profile picture, just download it
    return default;
}

我查看了此处的指南,发现似乎可以替代上述所有内容,但我无法将其与 UWP Toolkit 服务集成。例如,要检索用户信息,这是我尝试过的:

HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "https://graph.microsoft.com/v1.0/me/");
await OneDriveService.Instance.Provider.AuthenticationProvider.AuthenticateRequestAsync(request);
using (HttpResponseMessage response = await OneDriveService.Instance.Provider.HttpProvider.SendAsync(request))    
{
    String content = await response.Content.ReadAsStringAsync();    
}

但这失败了,SendAsync通话时出现异常。

注意:我知道 UWP 工具包中也有Graph API,具有现成的方法来检索用户信息和个人资料图片,但显然您需要 Office 365 订阅才能使用这些 API(作为开发人员和可能也是用户),所以我想这不是我在这里寻找的,因为我一直能够使用普通的 OneDrive 客户端检索这些信息。

有没有办法在 UWP 上执行此操作,或者通过 UWP 工具包中的某种方法,或者使用其他一些解决方案?

谢谢!

编辑:我重用了示例应用程序中的代码,注册了我的应用程序以获取 clientID 并进行了快速测试,但它没有按预期工作,我收到了这个异常:

在此处输入图像描述

固定,见下文

编辑#2:根据这个问题,我不得不切换到https://graph.microsoft.com/beta获取个人资料图片,因为1.0API 的版本现在不支持普通的 MS 帐户。考虑到所有因素,它现在似乎工作得很好

4

1 回答 1

0

我按照MSDN文档为 Microsoft Graph 注册了我的应用程序。之后,我将获得一个应用程序 ID(在 API 中称为 clientId)。

然后,我使用Microsoft Graph Connect Sample for UWP使用我的通用 MS 帐户登录。它运作良好。我可以得到usernameemail

请注意,如果您想成功运行此示例,您需要使用应用程序 ID 来PublicClientApplication初始化AuthenticationHelper.cs.

public static PublicClientApplication IdentityClientApp = new PublicClientApplication("your client id");
于 2018-02-07T08:58:57.873 回答