Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries. Thanks for all your past and future contributions.

Revision as of 11:00, 6 September 2012 by galazzo (Talk | contribs)

SkyDrive - How to upload content on Windows Phone

From Wiki
Jump to: navigation, search
WP Metro Icon File.png
WP Metro Icon Web.png
SignpostIcon XAML 40.png
WP Metro Icon WP8.png
SignpostIcon WP7 70px.png
Article Metadata
Tested with
Devices(s): Nokia Lumia 800
Platform(s): Windows Phone
Windows Phone 8
Windows Phone 7.5
Keywords: SkyDrive
Created: galazzo (06 Sep 2012)
Last edited: galazzo (06 Sep 2012)

Skydrive-logo-200.png is a Microsoft service that allow you to store files into a cloud in order to be automatically available from your phone and computers. You can share large files and photos or documents with your friends or collegues. Although the service is available for many platforms such as Windows, Mac, iOS, Android all you need to access to your content is a web browser.
This article is focused on the most interesting feature, the mobile access.


Live Connect

Live Connect provides developers a set of controls and APIs that enable applications to integrate sign in with the user’s Microsoft account and enable users to access information from SkyDrive, Hotmail, and Messenger. At time of writing these APIs are not included by default on Windows Phone SDK.

Before start developing

Creating the application

Create a new HelloWorldPhone Windows Phone application in Microsoft Visual Studio 2010 Express for Windows Phone using the Visual C# -> Silverlight for Windows Phone -> Windows Phone Application project template and name it SkyDrive SkyDrive-step-000.png
Choose last OS version
Bring up the Add Reference dialog and go to the .Net tab. Scroll down to find the Microsoft.Live and Microsoft.Live.Controls assemblies. Add them to your project.
Open MainPage.xaml in the designer. Bring the Toolbox in view and right-click to select Choose Items… Under Windows Phone Components tab, find the SignInButton control in the Microsoft.Live.Control namespace and add to your toolbox (You only need to do this once).
If everything is well installed you should see the SignInButton control in your toolbox. Drag it onto your designer surface.

Scopes and permissions

Before your app makes requests of the Live Connect APIs to work with Live Connect info, in most cases you must get permission from the user to access that info or to create new objects on behalf of the user. In the Live Connect APIs, this permission is called a scope. Each scope grants a different permission level.
There are three types of scopes:

  • Core scopes are central to the Live Connect APIs and involve users' core profile and contact data.
  • Extended scopes allow you to work with users' extended profile and contact data.
  • Developer scopes allow you to work with developers' client IDs.

For our sample project we need the following scopes

Core scopes

Scope Enables
wl.basic Read access to a user's basic profile info. Also enables read access to a user's list of contacts.
wl.offline_access The ability of an app to read and update a user's info at any time. Without this scope, an app can access the user's info only while the user is signed in to Live Connect and is using your app.
wl.signin Single sign-in behavior. With single sign-in, users who are already signed in to Live Connect are also signed in to your website.

Extended scopes

Scope Enables
wl.skydrive_update Read and write access to a user's files stored in SkyDrive.

Into .xaml file your code should look like that:

<my:SignInButton Content="Button" Name="skydrive" Scopes="wl.basic wl.signin wl.offline_access wl.skydrive_update" SessionChanged="skydrive_SessionChanged"  />


Now we need to connect our application to Live Connect. Go to the application management site and click the Create Application. Create an application and provide a name for it.
If everything goes well you will be provided with a ClientID and a Client secret code
Now let's add the ClientID to our SignInButton code

<my:SignInButton Content="Button" Name="skydrive" ClientId="00000000440xxxxx" Scopes="wl.basic wl.signin wl.offline_access wl.skydrive_update" SessionChanged="skydrive_SessionChanged"  />

Using SkyDrive APIs

using Microsoft.Live;
using Microsoft.Live.Controls;
// SkyDrive session
private LiveConnectClient client;

SkyDrive LogIn session management

private void skydrive_SessionChanged(object sender, Microsoft.Live.Controls.LiveConnectSessionChangedEventArgs e)
if (e.Session != null && e.Status == LiveConnectSessionStatus.Connected)
client = new LiveConnectClient(e.Session);
MessageBar.Text = "Signed in.";
client.GetCompleted += new EventHandler<LiveOperationCompletedEventArgs>(signin_GetCompleted);
client.UploadCompleted += new EventHandler<LiveOperationCompletedEventArgs>(uploadClient_UploadCompleted);
client.GetAsync("me", null);
MessageBar.Text = "Not signed in:" + e.Status.ToString();
client = null;
void signin_GetCompleted(object sender, LiveOperationCompletedEventArgs e)
if (e.Error == null)
MessageBar.Text = "Hello, signed-in user!";
MessageBar.Text = "Error calling API: " + e.Error.ToString();

Uploading a file

private void uploadButton_Click(object sender, EventArgs e)
if (client != null)
MessageBar.Text = "Uploading to SkyDrive";
IsolatedStorageFileStream fileStream = null;
using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
fileStream = store.OpenFile(fileName, FileMode.Open, FileAccess.Read);
catch (Exception ex)
client.UploadAsync("me/SkyDrive", strSaveName, fileStream, OverwriteOption.Overwrite);
MessageBox.Show("You must be signed for SkyDrive");
void uploadClient_UploadCompleted(object sender, LiveOperationCompletedEventArgs e)
if (e.Error == null)
MessageBar.Text = "File uploaded with success!";
MessageBox.Show("File uploaded with success!");
MessageBar.Text = "File uploading failed!";
MessageBox.Show("File uploading failed!");
506 page views in the last 30 days.