7

Live Connect SDK(http://msdn.microsoft.com/en-us/live/)の上にMetro C#SkyDrive APIを構築しています。デフォルト) - Windows 8では、LOCALアカウントまたはLIVEアカウントのいずれかを使用してWindows 8マシンにSignInを選択することができます。Metro App - ライブ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のアカウントを使用しているとき、私は同じコードを呼び出すと、それは(素晴らしい)

私をログアウトし、私はunhanded例外を取得 - 私はこのエラーの周りに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にログインすると、別のアカウントまたはローカルアカウントに切り替えるまで「ログアウト」できません。私は同意する、彼らはこれを公開することはできませんが、その後、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; 
    } 
関連する問題