Live SDK — попробуйте войти без SignInButton

Есть ли способ войти в Live для приложения (Silverlight, WP7) без необходимости нажимать кнопку «Войти».

Я хочу войти в меня динамически, например: когда вы запускаете приложение, я хочу войти в меня. Как это сделать, не прибегая к кнопке?


person richardaum    schedule 24.04.2012    source источник


Ответы (3)


Я разобрался как это сделать, поэтому решил поделиться:

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!");
        }
    }
}
person richardaum    schedule 24.04.2012
comment
кредиты: social.msdn .microsoft.com/Forums/en-GB/messengerconnect/thread/ - person richardaum; 26.04.2012
comment
Спасибо. Microsoft должна задокументировать это. - person ashraf; 11.05.2012
comment
Большое спасибо за этот короткий и приятный фрагмент кода. У меня не было четкого представления о том, как использовать LiveAuthClient. Новая документация MSDN для Live SDK настолько неверна, что [метод LiveAuthClient(String)][1] говорит, что строковым параметром является URI перенаправления. Он ничего не говорит о ClientID. [1]msdn.microsoft.com/en-us /библиотека/вживую/ - person Adarsha; 07.10.2012
comment
Этот код не работает с текущим пакетом SDK. В LiveAuthClient отсутствует событие InitializeCompleted. - person Mikael Koskinen; 01.12.2012
comment
Привет, мне просто интересно, работали ли вы с iOS SDK, и сработало ли это для вас там. Звучит как отличный ответ, и я пробовал, но не сработал. - person Septronic; 21.11.2015

Отличный ответ Ричард. Это действительно очень помогло.

Я заметил пару комментариев от людей, жалующихся на то, что они не могут найти событие 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 есть руководство по асинхронному ожиданию здесь

person Faster Solutions    schedule 07.04.2013

Спасибо за пример кода - помог мне придумать версию кода обновления для 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
        }
    }
}
person Lance Larsen - Microsoft MVP    schedule 10.02.2013
comment
Этот код дает следующую ошибку. Исключение типа «Microsoft.Live.LiveAuthException» произошло в mscorlib.ni.dll, но не было обработано в пользовательском коде. - person Pravesh Singh; 10.12.2013