2012-06-26 47 views
7

我在Live Connect SDK之上構建Metro C#SkyDrive API(http://msdn.microsoft.com/zh-cn/live/默認) - 在Windows 8中,用戶可以選擇使用LOCAL帳戶或LIVE帳戶登錄Windows 8計算機。Metro App - 如何檢測是否使用Live ID或本地帳戶登錄

當使用實時連接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需要檢測,如果當前用戶使用真實賬戶這樣我就可以防止調用註銷( ) 方法。

so ....我的問題是,如何知道用戶在Windows 8中使用哪種帳戶類型登錄?

+0

爲什麼你就不能正常登錄了用戶不在他們的賬戶?讓他們決定。 loginResult的結果是什麼?我不相信微軟會公開這類信息,否則它會導致針對你的Windows Live會話的惡意軟件。 –

+0

當您使用真實帳戶登錄到Windows 8時,在切換到另一個帳戶或本地帳戶之前,您不能「註銷」...... windows 8會讓您登錄到所有內容。我同意,他們可能不公開這個,但然後SDK拋出了一個不可處理的錯誤......那麼我該如何防範呢? –

回答

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; 
    } 
相關問題