Metro应用 - 如何检测如果登录与Live ID或本地帐户(Metro App - How to

2019-07-30 02:55发布

我建立一个地铁C#的SkyDrive API的实时连接SDK(http://msdn.microsoft.com/en-us/live/default)的顶部 - 在Windows 8中,用户有选择登入到Windows 8机器与一个本地帐户或Live帐户。

当使用实时连接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帐户时调用相同的代码,我得到一个unhanded例外 - 我甚至不能将一个try {}赶上{}解决这个错误。

例外:

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

很明显,因为这是下Live帐户登录的用户无法注销,我的API需要,如果当前用户使用真实账户这样我就可以防止调用注销()方法来检测。

所以....我的问题是,我怎么知道该帐户的用户已经在Windows 8签订?

Answer 1:

找到了答案: 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;
    }


文章来源: Metro App - How to detect if logged in with Live ID or Local Account