介紹
重新想象 Windows 8 Store Apps 之 微軟賬號
獲取微軟賬號的用戶相關的信息
獲取或設置微軟賬號的圖片和視頻
微軟賬號的驗證,和相關信息的獲取
示例
1、演示如何獲取微軟賬號的用戶相關的信息
Account/AccountInfo.xaml
<Page x:Class="XamlDemo.Account.AccountInfo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:XamlDemo.Account" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="120 0 0 0"> <TextBlock Name="lblMsg" FontSize="14.667" /> </StackPanel> </Grid> </Page>
Account/AccountInfo.xaml.cs
/* * 演示如何獲取微軟賬號的用戶相關的信息 */ using System; using Windows.System.UserProfile; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; namespace XamlDemo.Account { public sealed partial class AccountInfo : Page { public AccountInfo() { this.InitializeComponent(); } protected async override void OnNavigatedTo(NavigationEventArgs e) { if (UserInformation.NameAccessAllowed) // 是否允許訪問用戶名 { // 獲取用於顯示的名稱 lblMsg.Text = "display name: " + await UserInformation.GetDisplayNameAsync(); lblMsg.Text += Environment.NewLine; // 獲取 first name lblMsg.Text += "first name: " + await UserInformation.GetFirstNameAsync(); lblMsg.Text += Environment.NewLine; // 獲取 last name lblMsg.Text += "last name: " + await UserInformation.GetLastNameAsync(); lblMsg.Text += Environment.NewLine; } // 如果需要獲取 GetDomainNameAsync(), GetPrincipalNameAsync(), GetSessionInitiationProtocolUriAsync() 等信息 // 則需要在 Package.appxmanifest 中增加配置 <Capability Name="enterpriseAuthentication" />,且必須使用公司賬號上傳 app } } }
2、演示如何獲取或設置微軟賬號的圖片和視頻
Account/AccountPicture.xaml
<Page x:Class="XamlDemo.Account.AccountPicture" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:XamlDemo.Account" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="120 0 0 0"> <StackPanel Orientation="Horizontal"> <Button x:Name="btnSetImage" Content="設置當前微軟賬號的圖片(可以分別指定小圖,大圖,視頻)" Click="btnSetImage_Click_1" /> </StackPanel> <StackPanel Orientation="Horizontal" Margin="0 10 0 0"> <Image x:Name="imgSmall" Width="96" Height="96" HorizontalAlignment="Left" /> <Image x:Name="imgLarge" Width="448" Height="448" Margin="10 0 0 0" HorizontalAlignment="Left" /> <MediaElement x:Name="mediaElement" Width="200" Height="200" Margin="10 0 0 0" HorizontalAlignment="Left" /> </StackPanel> </StackPanel> </Grid> </Page>
Account/AccountPicture.xaml.cs
/* * 演示如何獲取或設置微軟賬號的圖片和視頻 */ using System; using Windows.Storage; using Windows.Storage.Pickers; using Windows.Storage.Streams; using Windows.System.UserProfile; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media.Imaging; using Windows.UI.Xaml.Navigation; using XamlDemo.Common; namespace XamlDemo.Account { public sealed partial class AccountPicture : Page { public AccountPicture() { this.InitializeComponent(); } protected override void OnNavigatedTo(NavigationEventArgs e) { GetSmallImage(); GetLargeImage(); GetVideo(); // 當微軟賬號的圖片或視頻發生變化時觸發的事件 UserInformation.AccountPictureChanged += PictureChanged; } protected override void OnNavigatedFrom(NavigationEventArgs e) { UserInformation.AccountPictureChanged -= PictureChanged; } private void PictureChanged(object sender, object e) { GetSmallImage(); GetLargeImage(); GetVideo(); } // 獲取小圖片 private async void GetSmallImage() { // UserInformation.GetAccountPicture(AccountPictureKind.SmallImage) - 獲取當前微軟賬號的小圖片 StorageFile image = UserInformation.GetAccountPicture(AccountPictureKind.SmallImage) as StorageFile; if (image != null) { try { IRandomAccessStream imageStream = await image.OpenReadAsync(); BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(imageStream); imgSmall.Source = bitmapImage; } finally { } } } // 獲取大圖片 private async void GetLargeImage() { // UserInformation.GetAccountPicture(AccountPictureKind.LargeImage) - 獲取當前微軟賬號的大圖片 StorageFile image = UserInformation.GetAccountPicture(AccountPictureKind.LargeImage) as StorageFile; if (image != null) { try { IRandomAccessStream imageStream = await image.OpenReadAsync(); BitmapImage bitmapImage = new BitmapImage(); bitmapImage.SetSource(imageStream); imgLarge.Source = bitmapImage; } finally { } } } // 獲取視頻 private async void GetVideo() { // UserInformation.GetAccountPicture(AccountPictureKind.Video) - 獲取當前微軟賬號的視頻 StorageFile video = UserInformation.GetAccountPicture(AccountPictureKind.Video) as StorageFile; if (video != null) { try { IRandomAccessStream videoStream = await video.OpenAsync(FileAccessMode.Read); mediaElement.SetSource(videoStream, "video/mp4"); } finally { } } } // 設置圖片 private async void btnSetImage_Click_1(object sender, RoutedEventArgs e) { if (Helper.EnsureUnsnapped()) { FileOpenPicker imagePicker = new FileOpenPicker { ViewMode = PickerViewMode.Thumbnail, SuggestedStartLocation = PickerLocationId.PicturesLibrary, FileTypeFilter = { ".jpg", ".jpeg", ".png", ".bmp" } }; StorageFile imageFile = await imagePicker.PickSingleFileAsync(); if (imageFile != null) { // UserInformation.SetAccountPicturesAsync() - 設置微軟賬號的圖片和視頻(可以分別指定:小圖片,大圖片,視頻) SetAccountPictureResult result = await UserInformation.SetAccountPicturesAsync(null, imageFile, null); if (result == SetAccountPictureResult.Success) { } } } } } }
查看本欄目
3、演示微軟賬號的驗證,和相關信息的獲取
Account/AccountAuthorization.xaml
<Page x:Class="XamlDemo.Account.AccountAuthorization" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:XamlDemo.Account" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="120 0 0 0"> <TextBlock Name="lblMsg" FontSize="14.667" /> <Button Name="btnSignIn" Content="登錄" Margin="0 10 0 0" Click="btnSignIn_Click_1" /> <Button Name="btnSignOut" Content="注銷" Margin="0 10 0 0" Click="btnSignOut_Click_1" /> </StackPanel> </Grid> </Page>
Account/AccountAuthorization.xaml.cs
/* * 演示微軟賬號的驗證,和相關信息的獲取 * * 注: * 1、如果要使用此功能,需要先去 https://manage.dev.live.com/Applications/Index 注冊,否則會出現“應用程序請求身份驗證令牌被禁用或者配置錯誤”錯誤 * 2、關於 Live Connect 的更多東西,請參見“Live Connect 開發人員中心”: http://msdn.microsoft.com/zh-cn/live */ using System; using System.Collections.Generic; using Windows.Security.Authentication.OnlineId; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace XamlDemo.Account { public sealed partial class AccountAuthorization : Page { // OnlineIdAuthenticator - 用於身份驗證,以及信息獲取 private OnlineIdAuthenticator _authenticator; public AccountAuthorization() { this.InitializeComponent(); _authenticator = new OnlineIdAuthenticator(); } private async void btnSignIn_Click_1(object sender, RoutedEventArgs e) { lblMsg.Text += "登錄中"; lblMsg.Text += Environment.NewLine; try { // 用於身份驗證,以及獲取 token(通過此 token 可以用 rest 方式獲取指定范圍內的信息) var targetArray = new List<OnlineIdServiceTicketRequest>(); targetArray.Add(new OnlineIdServiceTicketRequest("wl.basic wl.contacts_photos wl.calendars", "DELEGATION")); /* * OnlineIdAuthenticator.AuthenticateUserAsync() - 登錄 * CredentialPromptType.DoNotPrompt - 不顯示登錄 UI(可能會導致無法登錄) * CredentialPromptType.PromptIfNeeded - 如果需要的話才顯示登錄 UI(一般來說一個 app 在登錄成功一次之後,就不必再通過 UI 登錄了) * CredentialPromptType.RetypeCredentials - 始終顯示登錄 UI */ var result = await _authenticator.AuthenticateUserAsync(targetArray, CredentialPromptType.PromptIfNeeded); if (result.Tickets[0].Value != string.Empty) { lblMsg.Text += "已登錄"; lblMsg.Text += Environment.NewLine; // 獲取 token (此 token 可以通過 rest 方式訪問 wl.basic wl.contacts_photos wl.calendars 信息) // 相關信息的訪問地址 https://apis.live.net/v5.0/me?access_token= lblMsg.Text += "token: " + result.Tickets[0].Value; lblMsg.Text += Environment.NewLine; } else { lblMsg.Text += "未得到 token ,errorCode: " + result.Tickets[0].ErrorCode.ToString(); lblMsg.Text += Environment.NewLine; } } catch (Exception ex) { lblMsg.Text += ex.ToString(); lblMsg.Text += Environment.NewLine; } } private async void btnSignOut_Click_1(object sender, RoutedEventArgs e) { lblMsg.Text += "注銷中"; lblMsg.Text += Environment.NewLine; // OnlineIdAuthenticator.SignOutUserAsync() - 注銷 await _authenticator.SignOutUserAsync(); lblMsg.Text += "已注銷"; lblMsg.Text += Environment.NewLine; } } }
OK
[源碼下載]:http://files.cnblogs.com/webabcd/Windows8.rar