7

我正在 Live Connect SDK (http://msdn.microsoft.com/en-us/live/default) 之上构建 Metro C# SkyDrive API - 在 Windows 8 中,用户可以选择登录到 Windows 8 机器使用 LOCAL 帐户或 LIVE 帐户。

使用 Live Connect SDK 时,如果我调用

// assume wlscopes is properly set

LiveAuthClient liveAuthClient = new LiveAuthClient();
LiveLoginResult loginResult = await liveAuthClient.LoginAsync(wlscopes);

// do some stuff on skydrive

liveAuthClient.Logout();   // <-- issue only with live account, not local

使用本地帐户时,它会注销我(很棒)

当我在使用 LIVE 帐户时调用相同的代码时,我得到了一个未经处理的异常——我什至无法围绕这个错误添加一个 try {} catch {}。

例外:

Cannot sign out from the application since the user account is connected. (Exception from HRESULT: 0x8086000E)

显然,由于在 Live 帐户下登录的用户无法注销,我的 api 需要检测当前用户是否正在使用 live 帐户,以便我可以防止调用 logout() 方法。

所以....我的问题是,我如何知道用户在 Windows 8 中登录的帐户类型?

4

1 回答 1

5

找到答案:http: //msdn.microsoft.com/en-us/library/windows/apps/windows.security.authentication.onlineid.onlineidauthenticator.cansignout.aspx#Y0

下面是我们需要使用的属性:

Windows.Security.Authentication.OnlineId.OnlineAuthenticator.CanSignOut

代码示例:

    public async Task<bool> Logout()
    {
        // Check to see if the user can sign out (Live account or Local account)
        var onlineIdAuthenticator = new OnlineIdAuthenticator();
        var serviceTicketRequest = new OnlineIdServiceTicketRequest("wl.basic", "DELEGATION");
        await onlineIdAuthenticator.AuthenticateUserAsync(serviceTicketRequest);

        if (onlineIdAuthenticator.CanSignOut)
        {
            LiveAuthClient.Logout();               
        }

        return true;
    }
于 2012-06-27T05:10:03.060 回答