2012-06-26 14 views
7

Estoy construyendo una API Sky C de Sky Citrus sobre el SDK de Live Connect (http://msdn.microsoft.com/en-us/live/ predeterminado): en Windows 8, el usuario tiene la opción de iniciar sesión en la máquina con Windows 8 con una cuenta LOCAL o una cuenta LIVE.Metro App - Cómo detectar si ha iniciado sesión con Live ID o cuenta local

Cuando se utiliza el Conectar Live SDK, si llamo

// 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 

cuando se utiliza una cuenta local, soy yo el sistema se desconecta (gran)

Cuando llamo el mismo código cuando se utiliza una cuenta de LIVE, Recibo una excepción sin manos: ni siquiera puedo agregar una prueba {} catch {} alrededor de este error.

Excepción:

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

Obviamente ya que el usuario que se registra en menos de una cuenta de Live no puede cerrar la sesión, mi api necesita para detectar si el usuario actual está utilizando una cuenta real por lo que puede evitar que llamar al cierre de sesión () método.

así .... Mi pregunta es, ¿cómo sé con qué tipo de cuenta ha iniciado sesión el usuario en Windows 8?

+0

Por qué no puedes simplemente no registrar el usuario fuera de su cuenta? Permítales decidir. ¿Cuál es el resultado de loginResult? No creo que Microsoft exponga este tipo de información, ya que de lo contrario generaría malware que atacaría su sesión de Windows Live. –

+0

Cuando inicia sesión en Windows 8 con una cuenta real, no puede 'cerrar sesión' hasta que cambie a otra cuenta o una cuenta local ... Windows 8 lo mantiene conectado a todo. Estoy de acuerdo, es posible que no expongan esto, pero entonces el SDK está arrojando un error no manejable ... ¿cómo lo evito? –

Respuesta

5

encontrado la respuesta: http://msdn.microsoft.com/en-us/library/windows/apps/windows.security.authentication.onlineid.onlineidauthenticator.cansignout.aspx#Y0

A continuación se muestra la propiedad de que tenemos que utilizar:

Windows.Security.Authentication.OnlineId.OnlineAuthenticator.CanSignOut 

Código Ejemplo:

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; 
    } 
Cuestiones relacionadas