7

Live Connect SDK (http://msdn.microsoft.com/en-us/live/default) の上に Metro C# SkyDrive API を構築しています。Windows 8 では、ユーザーは Windows 8 マシンにサインインすることを選択できます。 LOCAL アカウントまたは 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

LOCALアカウントを使用すると、ログアウトされます(素晴らしい)

LIVE アカウントを使用しているときに同じコードを呼び出すと、未処理の例外が発生します。このエラーの周りに try {} catch {} を追加することさえできません。

例外:

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

明らかに、ライブ アカウントでログインしているユーザーはログアウトできないため、現在のユーザーがライブ アカウントを使用しているかどうかを API で検出する必要があるため、logout() メソッドの呼び出しを防ぐことができます。

そう....私の質問は、ユーザーが Windows 8 でサインインしたアカウントの種類をどのように知ることができるかということです。

4

1 に答える 1

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;
    }
于 2012-06-27T05:10:03.060 に答える