重新想象 Windows 8 Store Apps (58) - 微软账号

简介: 原文:重新想象 Windows 8 Store Apps (58) - 微软账号[源码下载] 重新想象 Windows 8 Store Apps (58) - 微软账号 作者:webabcd介绍重新想象 Windows 8 Store Apps 之 微软账号 获取微软账号的用户相关的信息 ...
原文: 重新想象 Windows 8 Store Apps (58) - 微软账号

[源码下载]


重新想象 Windows 8 Store Apps (58) - 微软账号



作者:webabcd


介绍
重新想象 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
[源码下载]

目录
相关文章
|
4月前
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
1月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
44 11
|
2月前
|
边缘计算 安全 网络安全
|
4月前
|
Java 应用服务中间件 开发工具
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
|
4月前
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
|
4月前
|
PHP Windows
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
|
4月前
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
|
4月前
|
Shell PHP Windows
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
|
4月前
|
存储 Linux Windows
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
【应用服务 App Service】App Service For Windows 如何挂载Storage Account File Share 示例
|
4月前
|
应用服务中间件 nginx Windows
【Azure 应用服务】在App Service for Windows中实现反向代理
【Azure 应用服务】在App Service for Windows中实现反向代理

热门文章

最新文章