我正在开发一个 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.0
API 的版本现在不支持普通的 MS 帐户。考虑到所有因素,它现在似乎工作得很好