しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Live Connect SDK でユーザーの Microsoft アカウント情報を参照する

Windows 8 でストアからアプリをダウンロードする場合、Microsoft アカウントが必要になります

したがってストアアプリのユーザーは原則このアカウントを持っていることになるので、この情報と連携できればユーザー認証の仕組みを独自に用意しなくてよいので便利です

では Microsoft アカウント情報を参照するにはどうするか

それには Live Connect SDK という開発ツールで連携できるのですが、Windows ストアのダッシュボードで開発するアプリの登録も必要です

f:id:matatabi_ux:20140212203451p:plain

こんな画面でとりあえずアプリ名の予約まで済ませておけば動作確認はできます

アプリ名の予約まで完了したら、Visual Studio 上でストアアプリのプロジェクトルートを選択し、コンテキストメニューの [ストア]-[アプリケーションをストアと関連付ける] を選び、ダッシュボードに登録したアプリと目の前の開発中のアプリを結びつけます

これをやらずに Live Connect SDK を利用してもエラーになるのでご注意を

f:id:matatabi_ux:20140212203507p:plain

関連付けができたら以下のような感じで Microsoft アカウントのサインインを行いクライアントをインスタンス化します

サインインする際には、Live SDK によりユーザーにアクセス許可を求めるダイアログが表示されます

ここで許可が得られないと当然ながらサインインに失敗してアカウント情報への連携はできません;

/// <summary>
/// Live Connect サービス
/// </summary>
public class LiveConnectService
{
    #region Privates

    /// <summary>
    /// アクセス機能範囲
    /// </summary>
    private static readonly List<string> AccessScopes = new List<string>() { "wl.basic", "wl.signin" };

    /// <summary>
    /// Live Connect クライアント
    /// </summary>
    private LiveConnectClient client = null;

    /// <summary>
    /// Live Connect セッション
    /// </summary>
    private LiveConnectSession session = null;

    #endregion //Privates

    /// <summary>
    /// Microsoft アカウントで Live Connect サービスにサインインする
    /// </summary>
    /// <returns>成功した場合は true、それ以外は false</returns>
    public async Task<bool> SignIn()
    {
        try
        {
            var authClient = new LiveAuthClient();

            var result = await authClient.LoginAsync(AccessScopes);

            if (LiveConnectSessionStatus.Connected.Equals(result.Status))
            {
                this.session = result.Session;
                this.client = new LiveConnectClient(this.session);

                return true;
            }

            Debug.WriteLine(result.State);
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.ToString());
        }

        return false;
    }
}

ここでアクセスしている機能はユーザーの基本情報の参照(wl.basic)とシングルサインオン(wl.signin)だけですが他にもいろいろあります

詳しくは スコープとアクセス許可 (Live Connect) を参照ください!

たとえばユーザーの名前を参照する場合はこんな感じです

var response = await this.client.GetAsync("me");
dynamic result = response.Result;
await new MessageDialog(string.Format("こんにちは {0} さん!", result.name)).ShowAsync();

簡単ですね!