2012-04-24 6 views
15

Gibt es eine Möglichkeit, sich bei Live für eine App anzumelden (Silverlight, WP7), ohne auf die SignIn-Schaltfläche klicken zu müssen.Live SDK - Versuch, dich ohne SignInButton anzumelden

Ich möchte mich dynamisch anmelden, zum Beispiel: wenn Sie die App starten, möchte ich mich einloggen. Wie geht das, ohne auf den Knopf zu greifen?

Antwort

29

habe ich herausgefunden, wie zu tun, so habe ich beschlossen, zu teilen:

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

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

+2

Danke. Microsoft sollte es dokumentieren. – ashraf

+0

Vielen Dank für dieses kurze und süße Stück Code. Ich hatte keine klare Vorstellung davon, wie LiveAuthClient verwendet werden sollte. Die neue MSDN-Dokumentation für Live SDK ist so falsch, [LiveAuthClient (String) -Methode] [1] besagt, dass der Zeichenfolgenparameter The redirect URI ist. Es erwähnt nichts über ClientID. [1] http://msdn.microsoft.com/en-us/library/live/microsoft.live.liveauthclient.aspx – Adarsha

1

Danke für das Code-Beispiel - hatte mir geholfen, 8 für Windows Phone mit der Update-Version von Code zu kommen, usw. :)


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

Dieser Code enthält folgenden Fehler: Eine Ausnahme des Typs 'Microsoft.Live.LiveAuthException' ist in mscorlib.ni.dll aufgetreten, wurde jedoch nicht im Benutzercode verarbeitet –

10

Große Antwort Richard. Das hat mir sehr geholfen.

Ich bemerkte ein paar Kommentare von Leuten, die sich beschweren, dass sie das InitializedCompleted Event nicht finden konnten. Wenn Sie in .Net 4.5 codieren, müssen Sie dem async/await-Muster für asynchrone Methoden folgen. Die Klasse oben würde wie folgt aussehen:

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 haben einen Asynchron warten Primer here

Verwandte Themen