Lavorare con più utenti nella Universal Windows Platform

di Matteo Tumiati, in Windows 10, Universal Windows Platform,

Fin dalla prima versione di Windows 10 è disponibile una API, all'interno del namespace Windows.System, che permette di lavorare con gli utenti: in questo modo è più semplice realizzare applicazioni i cui dati da mostrare devono essere diversi in base all'utente loggato.

Gli utenti si possono recuperare direttamente dal sistema operativo, è sufficiente aggiungere una capability chiamata "User Account Information" e un paio di righe di codice:

IReadOnlyList<User> users = await User.FindAllAsync(UserType.LocalUser, UserAuthenticationStatus.LocallyAuthenticated);
var currentUser = users.FirstOrDefault();

var firstName = (string)await currentUser.GetPropertyAsync(KnownUserProperties.FirstName);
var lastName = (string)await currentUser.GetPropertyAsync(KnownUserProperties.LastName);

E' anche possibile recuperare l'eventuale immagine associata all'account, per poi mostrarla in un controllo Image nell'interfaccia grafica:

// recupero l'immagine specificando una dimensione
var picture = await currentUser.GetPictureAsync(UserPictureSize.Size424x424);

// creo una bitmapimage e gli assegno lo stream
var bi = new BitmapImage();
await bi.SetSourceAsync(await picture.OpenReadAsync());

// assegno la bitmapimage all'immagine sulla UI
UserImage.Source = bi;

La cosa interessante è che, nel codice appena mostrato, gli utenti vengono recuperati da una lista dei Microsoft Account registrati e si considera il primo come l'utente che ha avviato l'applicazione: potrebbe non essere sempre vero, pertanto è consigliato leggere l'utente direttamente allo startup, nel metodo OnLaunched:

protected override async void OnLaunched(LaunchActivatedEventArgs e)
{
    var currentUser = e.User;
    ...
}

Nel caso l'applicazione venga però sospesa, non è possibile risalire all'utente poiché passa da un metodo differente che non ha la proprietà User, ma è sufficiente salvare nello storage locale (o dovunque si preferisca) l'identificativo dell'utente, chiamato NonRoamableId, così che possa essere sempre recuperato a runtime tramite:

var localSettings = ApplicationData.Current.LocalSettings;
var oldUserId = localSettings.Values["userId"];
var currentUser = User.GetFromId(oldUserId);

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi