LiveSDKは自記事記載時点ではVer5.5となっています。
ダウンロードはLive Connect デベロッパー センターのLive SDK downloadsからダウンロードページへ
現在SDKは非同期API化(async/await)されているため、以前のバージョンを元にした説明では動作しないAPIがあります。
ただ、非同期API化されたことで扱いそのものは楽になっているものの、サンプルなどが中途半端でRESTで扱う以外では嵌る箇所が見受けられるというか、嵌りました。
構築メモがてら記事にしようと思います。
WindowsPhone8としていますが、Windowsストアアプリでも基本的に同じように行えるはずです。
アプリでSDKを使用する場合MyApp(マイアプリ)にアプリ登録をして「クライアントID」を取得する必要があります。

サインインの際に表示される使用許諾ページ(MS標準)に表示されるアプリ名などを指定します。

WindowsPhone等のモバイルデバイスを使用する場合は「モバイルクライアントアプリ」を「はい」に指定する必要があります。

ここで表示される「クライアントID」をアプリに組み込むことで使用できるようになります。

また、各国語対応のための設定もあるので、アプリが多言語の場合は登録しておくことで各国語向けに表示されるようになるはずです。
LiveSDKインストール後、ソリューションの参照設定で「Microsoft.Live」「Microsoft.Live.Controls」を参照します。
コード内では「using Microsoft.Live;」を宣言します。
「サインインボタン」コントロールをXAMLに貼り付けます。

<Controls:SignInButton Content="SignInButton" VerticalAlignment="Top" ClientId="取得したクライアントID" Scopes="wl.basic wl.skydrive wl.offline_access wl.signin wl.skydrive_update" SessionChanged="buttonSignin_SessionChanged" Margin="10" />
「Scopes」は「スコープとアクセス許可」で確認可能です。
OneDrive向けなので「wl.basic」「wl.skydrive」「wl.offline_access」「wl.signin」「wl.skydrive_update」を指定しています。
「SessionChanged」にイベント駆動でセッションの状態が返ってきます。
そのため、初期状態でもセッションがないという情報が起動時に発生します。
private async void buttonSignin_SessionChanged(object sender, Microsoft.Live.Controls.LiveConnectSessionChangedEventArgs e)
{
if (e.Session != null && e.Status == LiveConnectSessionStatus.Connected)
{
(Application.Current as App).LiveSession = e.Session;
セッションがConnectedになった際にセッションを確保しておく
アップロードのコード
LiveConnectClient client = new LiveConnectClient((Application.Current as App).LiveSession);
var upResult = await client.UploadAsync("/me/skydrive/", "hogehoge", streamData, OverwriteOption.Overwrite);
OneDriveのルートにファイルを作成する。
「OverwriteOption」は上書き指定。
ダウンロードのサンプルコード
LiveConnectClient client = new LiveConnectClient((Application.Current as App).LiveSession);
// ファイルの確認
LiveOperationResult operationResult = await client.GetAsync("me/skydrive/files");
// [data]から必要な項目を取得する
dynamic dyResult = ((dynamic)operationResult.Result).data;
foreach (var item in dyResult)
{
// ファイルの有無を確認してOneDrive上のIDを取得してパスとする
if (((dynamic)item).name == "hogehoge")
{
// idのパラメーターに「/content/」を付けないとDLされない模様
path = ((dynamic)item).id + "/content/";
_isize = int.Parse(((dynamic)item).size.ToString());
break;
}
}
// ファイルの有無を確認
if (path != null)
{
// ファイルがあったのでダウンロードしてストリームへ
var dlResult = await client.DownloadAsync(path);
var downloadStream = dlResult.Stream;
if(downloadStream != null)
{
// ストリームをファイルとして保存する
// 略
// LiveOperationResultで取得した際に「Microsoft.Live.DynamicDictionary」で取得できるデータ
[0] “id” string // OneDrive判別用ID これを元にダウンロードなどを行う
[1] “from” string
[2] “name” string // フォルダ/ファイルの名前
[3] “description” string
[4] “parent_id” string // 親フォルダID
[5] “size” string // ファイルサイズ
[6] “upload_location” string // Upload先
[7] “comments_count” string // コメントの文字数
[8] “comments_enabled” string // コメントの有無
[9] “is_embeddable” string // 組み込めるかどうか
[10] “source” string // DLリンクURL
[11] “link” string // OneDrive上での位置
[12] “type” string // オブジェクトの種類
[13] “shared_with” string
[14] “created_time” string // ファイル作成日時
[15] “updated_time” string // ファイル更新日時
[16] “client_updated_time” string // client上での更新日時
※もう少しいろいろ探る予定です。