7

Sto costruendo un'API SkyDrive Metro C# sopra il Live Connect SDK (http://msdn.microsoft.com/en-us/live/ impostazione predefinita): in Windows 8 l'utente ha la possibilità di accedere al computer Windows 8 con un account LOCAL o un account LIVE.Metro App - Come rilevare se sei loggato con Live ID o Account locale

Quando si utilizza il Live Connect SDK, se chiamo

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

quando si utilizza un account locale, mi si disconnette (grande)

Quando chiamo lo stesso codice quando si utilizza un account LIVE, Ricevo un'eccezione non gestita: non riesco nemmeno ad aggiungere un try {} catch {} a questo errore.

Eccezione:

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

Ovviamente in quanto l'utente che ha effettuato l'accesso con un account Live non può effettuare il logout, il mio api ha bisogno di rilevare se l'utente corrente sta usando un conto Live in modo da può impedire di chiamare il Logout () metodo.

quindi .... La mia domanda è, come faccio a sapere con quale tipo di account l'utente ha effettuato l'accesso con Windows 8?

+0

Perché non puoi semplicemente non registrare il utente dal proprio account? Lascia che decidano. Qual è il risultato di loginResult. Non credo che Microsoft esporterà questo tipo di informazioni altrimenti porterebbe a malware che si rivolge alla tua sessione di Windows Live. –

+0

Quando si accede a Windows 8 con un account live, non è possibile "disconnettersi" fino a quando non si passa a un altro account o a un account locale ... windows 8 mantiene l'accesso a tutto. Sono d'accordo, non possono esporre questo, ma poi l'SDK sta generando un errore non gestibile ... quindi come posso evitarlo? –

risposta

5

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

riportano di seguito le proprietà che abbiamo bisogno di usare:

Windows.Security.Authentication.OnlineId.OnlineAuthenticator.CanSignOut 

Esempio di codice:

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; 
    } 
Problemi correlati