Se avete bisogno di accedere ai dati dell'account Live configurato sul telefono, come primo passo dovete aggiungere il package LIVE SDK tramite NuGet al vostro progetto e bisogna associare il progetto ad un'App dello store, altrimenti i servizi Live non funzionano.
Inoltre è necessario richiedere l'autorizzazione all'utente affinché la vostra APP possa usare i dati dell'account Live. Ognuno può organizzare come preferisce questa richiesta, di seguito l'implementazione fatta da me
if (CUtility.getSetting("LIVEID", "").ToString() == "" && CUtility.getSetting("LIVEID_CANASKAGAIN", "Y").ToString() == "Y")
{
var messageDialog = new MessageDialog("Can this app use your Live Account data?" , "Permission request");
messageDialog.Commands.Add(new UICommand("YES", new UICommandInvokedHandler(this.CommandInvokedHandler)));
messageDialog.Commands.Add(new UICommand("NO", new UICommandInvokedHandler(this.CommandInvokedHandler)));
messageDialog.DefaultCommandIndex = 0;
messageDialog.CancelCommandIndex = 1;
await messageDialog.ShowAsync();
}
else
{
//DO SOMETHING WITH CUtility.getSetting("LIVEID", "").ToString();
}
Nel momento in cui l'utente concede l'autorizzazione, si può procedere con il login al servizio Live e recuperare così le informazioni sull'account
CLiveId myLive = new CLiveId();
try
{
await myLive.SignIn();
CUtility.setSetting("LIVEID", myLive.username.ToLower());
myLive.SignOut();
}
catch
{
//DO SOMETHING
}
Il codice della classe CLiveId è il seguente. Nell'esempio inserisco come recuperare il campo "username"
using Microsoft.Live;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace NSPolipone
{
class CLiveId
{
private bool isSignedIn = false;
private LiveConnectClient client;
public string username { get; set; }
/// <summary>
/// EFFETTUA IL SIGN-IN A WINDOWS LIVE
/// </summary>
public async Task SignIn()
{
if (!this.isSignedIn)
{
try
{
LiveAuthClient auth = new LiveAuthClient();
LiveLoginResult loginResult = await auth.LoginAsync(new string[] { "wl.signin" });
if (loginResult.Status == LiveConnectSessionStatus.Connected)
{
this.client = new LiveConnectClient(loginResult.Session);
this.isSignedIn = (loginResult.Status == LiveConnectSessionStatus.Connected);
LiveOperationResult operationResult = await this.client.GetAsync("me");
// determino se le informazioni sono state recuperate con successo
dynamic result = operationResult.Result;
// in caso di successo viene recuperato il nome utente
if (result != null) username = result.name;
}
}
catch (LiveAuthException ex)
{
//DO SOMETHING
}
catch (Exception ex)
{
//DO SOMETHING
}
}
}
public void SignOut()
{
//Non si può fare logout dalla modalità SSO, quindi si imposta a null il client
this.client = null;
}
}
}