Metro App - Как обнаружить, если вы вошли в систему с Live ID или локальной учетной записью

Я создаю Metro C# SkyDrive API поверх Live Connect SDK (http://msdn.microsoft.com/en-us/live/default) - в Windows 8 у пользователя есть выбор для входа на компьютер с Windows 8 либо с локальной учетной записью, либо с учетной записью 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 должен определить, использует ли текущий пользователь действующую учетную запись, чтобы я мог предотвратить вызов метода logout().

итак.... У меня вопрос, как узнать, с каким типом учетной записи пользователь вошел в Windows 8?

1 ответ

Решение

Нашел ответ: http://msdn.microsoft.com/en-us/library/windows/apps/windows.security.authentication.onlineid.onlineidauthenticator.cansignout.aspx

Ниже приводится свойство, которое нам нужно использовать:

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;
    }
Другие вопросы по тегам