15

[サインイン] ボタンをクリックせずに、Live for an App (Silverlight、WP7 で可能) にログインする方法はありますか。

たとえば、動的にログインしたい: アプリを起動したときにログインしたい。ボタンに頼らずにこれを行う方法は?

4

3 に答える 3

29

方法を理解したので、共有することにしました:

using System.Windows;
using Microsoft.Live;

public class LiveLogin
{

    private static readonly string[] scopes = 
        new string[] { 
            "wl.signin", 
            "wl.basic", 
            "wl.calendars", 
            "wl.calendars_update", 
            "wl.contacts_calendars", 
            "wl.events_create" };

    private LiveAuthClient authClient;
    private LiveConnectClient liveClient;


    public LiveLogin()
    {
        this.authClient = new LiveAuthClient("**your client id here**");
        this.authClient.InitializeCompleted += authClient_InitializeCompleted;
        this.authClient.InitializeAsync(scopes);
    }

    private void authClient_InitializeCompleted(object sender, LoginCompletedEventArgs e)
    {
        if (e.Status == LiveConnectSessionStatus.Connected)
        {
            this.liveClient = new LiveConnectClient(e.Session);
        }
        else
        {
            this.authClient.LoginCompleted += authClient_LoginCompleted;
            this.authClient.LoginAsync(scopes);
        }
    }

    private void authClient_LoginCompleted(object sender, LoginCompletedEventArgs e)
    {
        if (e.Status == LiveConnectSessionStatus.Connected)
        {
            this.liveClient = new LiveConnectClient(e.Session);
            MessageBox.Show("Signed");
        }
        else
        {
            MessageBox.Show("Failed!");
        }
    }
}
于 2012-04-24T19:01:40.757 に答える
10

すばらしい答えリチャード。これは本当に助かりました。

InitializedCompleted イベントが見つからないと不平を言う人々からのコメントがいくつかあることに気付きました。.Net 4.5 でコーディングしている場合は、非同期メソッドの async/await パターンに従う必要があります。上記のクラスは次のようになります。

public class LiveLogin
    {
        private static readonly string[] Scopes =
            new[]
                {
                    "wl.signin",
                    "wl.basic",
                    "wl.calendars",
                    "wl.calendars_update",
                    "wl.contacts_calendars",
                    "wl.events_create"
                };

        private LiveAuthClient _authClient;



        public async Task<LiveConnectClient> Login()
        {
            _authClient = new LiveAuthClient("**your client id here**");

            LiveLoginResult result = await _authClient.InitializeAsync(Scopes);
            if (result.Status == LiveConnectSessionStatus.Connected)
            {
                return new LiveConnectClient(result.Session);
            }
            result = await _authClient.LoginAsync(Scopes);
            if (result.Status == LiveConnectSessionStatus.Connected)
            {
                return new LiveConnectClient(result.Session);
            }
            return null;
        }


    }

MS には async await プライマーがここにあります

于 2013-04-07T08:42:00.673 に答える
1

コード例をありがとう - Windows Phone 8 などのコードの更新バージョンを考え出すのに役立ちました:)


using System.Windows;
using Microsoft.Live;

public class LiveLogin : PhoneApplicationPage
{
    private static readonly string[] _scopes =
        new[] { 
        "wl.signin", 
        "wl.basic", 
        "wl.calendars", 
        "wl.calendars_update", 
        "wl.contacts_calendars", 
        "wl.events_create" };

    private LiveConnectClient _connection;
    private LiveLoginResult _login;

    public LiveLogin()
    {
        this.Loaded += this.OnLoaded;
    }

    private async void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
    {
        //----------------------------------------------------------------------
        // Login to skydrive
        //----------------------------------------------------------------------
        await SkydriveLogin();
    }

    private async Task SkydriveLogin()
    {
        try
        {
            //----------------------------------------------------------------------
            // Initialize our auth client with the client Id for our specific application
            //----------------------------------------------------------------------
            LiveAuthClient authClient = new LiveAuthClient("**your client id here**");

            //----------------------------------------------------------------------
            // Using InitializeAsync we can check to see if we already have an connected session
            //----------------------------------------------------------------------
            _login = await authClient.InitializeAsync(_scopes);

            //----------------------------------------------------------------------
            // If not connected, bring up the login screen on the device
            //----------------------------------------------------------------------
            if (_login.Status != LiveConnectSessionStatus.Connected)
            {
                _login = await authClient.LoginAsync(_scopes);
            }

            //----------------------------------------------------------------------
            // Initialize our connection client with our login result
            //----------------------------------------------------------------------
            _connection = new LiveConnectClient(_login.Session);
        }
        catch (Exception ex)
        {
            //TODO: Add connection specific exception handling
        }
    }
}
于 2013-02-10T05:51:41.413 に答える