2012-04-24 9 views
15

Esiste un modo per accedere a Live per un'applicazione (Silverlight, WP7 può) senza dover fare clic sul pulsante Accedi.Live SDK - Prova ad accedere senza SignInButton

Desidero registrarmi dinamicamente, ad esempio: quando avvii l'app, desidero accedere a me. Come fare questo senza ricorrere al pulsante?

risposta

29

ho capito come fare, così ho deciso di condividere:

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!"); 
     } 
    } 
} 
+0

crediti a: http://social.msdn.microsoft.com/Forums/en-GB/messengerconnect/thread/ a1ae8e9c-47a5-4bd8-b821-33dc1a0d6e94 – Richard

+2

Grazie. Microsoft dovrebbe documentarlo. – ashraf

+0

Grazie mille per questo breve e dolce codice. Non avevo un'idea chiara su come utilizzare LiveAuthClient. La nuova documentazione MSDN per Live SDK è così errata, [metodo LiveAuthClient (String)] [1] dice che il parametro stringa è L'URI di reindirizzamento. Non menziona nulla su ClientID. [1] http://msdn.microsoft.com/en-us/library/live/microsoft.live.liveauthclient.aspx – Adarsha

1

Grazie per l'esempio di codice - mi ha aiutato a venire con la versione di aggiornamento di codice per Windows Phone 8, ecc :)


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 
     } 
    } 
} 
+0

Questo codice indica un errore successivo: un'eccezione di tipo "Microsoft.Live.LiveAuthException" si è verificata in mscorlib.ni.dll ma non è stata gestita nel codice utente –

10

Grande risposta Richard. Questo ha davvero aiutato molto.

Ho notato un paio di commenti da persone che si lamentavano del fatto che non potevano trovare l'evento InitializedCompleted. Se si sta codificando in .Net 4.5, è necessario seguire lo schema asincrono/attesa per i metodi asincroni. La classe di cui sopra sarebbe simile a questa:

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 hanno un asincrona attendono di primer here

Problemi correlati