×
Namespaces

Variants
Actions
Revision as of 22:07, 9 October 2013 by kiran10182 (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Como enviar conteúdo para o SkyDrive a partir de uma aplicação Windows Phone

From Nokia Developer Wiki
Jump to: navigation, search

Este artigo explica como enviar ficheiros para o SkyDrive a partir de uma aplicação Windows Phone, usando o Live Connect

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

Exemplo de código
Código fonte: Noise Reduction (utiliza este código)

Testado com
Aparelho(s): Nokia Lumia 800, Nokia Lumia 820

Compatibilidade
Plataforma(s): Windows Phone
Windows Phone 8
Windows Phone 7.5

Artigo
Palavras-chave: SkyDrive
Tradução:
Por PedroQ
Última alteração feita por kiran10182 em 09 Oct 2013

Contents

Introdução

O SkyDrive é um serviço cloud da Microsoft que permite aceder a ficheiros e documentos em todos os teus telemóveis e computadores bem como partilhá-os com os teus amigos e colegas. Este serviço está disponível como uma extensão do explorador de ficheiros nativo em várias plataformas (e.g. Windows, Mac, iOS, Android) e pode também ser acedido usando a maioria dos web browsers. É também possível aceder ao serviço directamente nas tuas aplicações, usando um conjunto de controlos e APIs do SDK Live Connect (que permite aos programadores integrar as suas aplicações com o SkyDrive, Hotmail, e Messenger).

Skydrive-logo-200.png

Este artigo explica como obter o SDK LiveConnect, adicionar as APIs ao teu projecto, iniciar sessão no servico, e enviar um ficheiro. O código é compatível com Windows Phone 8. Para utilizar em Windows Phone 7, são necessários alguns passos adicionais descritos aqui.

Pré-requisitos

Até o momento em que escrevo este artigo, as APIs LiveConnect não são incluídas no SDK do Windows Phone.

Antes de começar:

Criar a aplicação

Crie uma nova aplicação Windows Phone usando o template localizado em Visual C# -> Windows Phone -> Windows Phone App e dê-lhe o nome de SkyDrive:

SkyDriveEN-step-000.png


Escolhe a última versão do OS

SkyDriveEN-step-001.png


Abra a janela Add Reference e navega até Assemblies -> Extensions. Adiciona os assemblies Microsoft.Live e Microsoft.Live.Controls ao teu projecto.

SkyDriveEN-step-002.png


Abra a MainPage.xaml na vista de design. Abre a Toolbox, clica com o botão direito do rato e selecciona Choose Items…. No separador Windows Phone Components, encontra o controlo SignInButton situado no namespace Microsoft.Live.Control e adiciona-o à Toolbox (apenas é necessário executar este passo uma vez).

SkyDriveEN-step-003.png


Se tudo estiver bem instalado o controlo SignInButton deve aparecer na Toolbox. Arrasta-o até à vista de design.

SkyDrive-step-004.png

Scopes e permissões

Antes de fazer pedidos de informações às APIs Live Connect, é necessário, na maioria dos casos, obter permissão do utilizador para aceder a essas informações ou para criar novos objectos em nome do utilizador. Nas APIs Live Connect, esta permissão tem o nome de scope. Casa scope concede um nível diferente de acesso.

Existem dois tipos de scopes:

  • Core: são a base das APIs Live Connect e estão relacionados com as informações sobre o utilizador e o seu contacto.
  • Extended: permitem aceder a um conjunto mais amplo de informações sobre o utilizador e o seu contacto.


Para o nosso projecto exemplo necessitamos dos seguintes scopes:

Core

Scope Permissões
wl.basic Ler a informação básica do perfil de um utilizador. Também concede accesso de leitura à lista de contactos do utilizador.
wl.offline_access Leitura e actualização das informações do utilizador a qualquer instante. Sem esta permissão, uma aplicação pode apenas aceder a estas informações quando o utilizador tem sessão iniciada no Live Connect e está a usar a aplicação.
wl.signin Procedimento Single sign-in. Com o single sign-in, os utilizadores com sessão iniciada no Live Connect têm também a sessão iniciada no teu website.

Extended

Scope Permissões
wl.skydrive_update Acesso de leitura e escrita aos ficheiros do utilizador armazenados no SkyDrive.

O código no ficheiro Into.xaml deve ter o seguinte aspecto:

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

ClientId

É agora necessário ligar a nossa aplicação ao Live Connect. Abre o Live Connect Developer Center e clica em Create Application. Cria uma aplicação e dá-lhe um nome.

SkyDrive-step-005.png

Se tudo correr como esperado são fornecidos um Client ID e um Client secret.

SkyDrive-step-006.png

Agora adicionamos o ClientID ao código do SignInButton:

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

Utilizar as APIs do SkyDrive

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

Gerir a sessão SkyDrive

private void skydrive_SessionChanged(object sender, LiveConnectSessionChangedEventArgs e)
{
 
if (e != null && e.Status == LiveConnectSessionStatus.Connected)
{
this.client = new LiveConnectClient(e.Session);
this.GetAccountInformations();
}
else
{
this.client = null;
InfoText.Text = e.Error != null ? e.Error.ToString() : string.Empty;
}
 
}
 
private async void GetAccountInformations()
{
try
{
LiveOperationResult operationResult = await this.client.GetAsync("me");
var jsonResult = operationResult.Result as dynamic;
string firstName = jsonResult.first_name ?? string.Empty;
string lastName = jsonResult.last_name ?? string.Empty;
InfoText.Text = "Welcome " + firstName + " " + lastName;
}
catch (Exception e)
{
InfoText.Text = e.ToString();
}
}

Screenshot do processo de autenticação

Login screenshot

Enviar um ficheiro

Em primeiro lugar criamos um ficheiro de demonstração para enviar. Neste exemplo é criado um ficheiro binário:

private string fileName = "sample.dat";
private IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
 
private void CreateFileIntoIsolatedStorage()
{
if (isf.FileExists(fileName))
{
isf.DeleteFile(fileName);
}
 
IsolatedStorageFileStream isfStream = new IsolatedStorageFileStream(fileName, FileMode.Create, IsolatedStorageFile.GetUserStoreForApplication());
 
byte[] output = new byte[25];
 
for (int i = 0; i < 25; i++)
{
output[i] = (byte)(i);
}
 
isfStream.Write(output, 0, output.Length);
 
isfStream.Close();
}

Neste exemplo chamamos este método a partir do construtor, no entanto é possível criar este ficheiro quando e onde necessário.

public MainPage()
{
InitializeComponent();
CreateFileIntoIsolatedStorage();
}

Agora podemos enviar o ficheiro

private async void btnUpload_Click(object sender, RoutedEventArgs e)
{
using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var fileStream = store.OpenFile(strSaveName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
try
{
LiveOperationResult res = await client.BackgroundUploadAsync("me/skydrive",
new Uri("/shared/transfers/"+fileName, UriKind.Relative),
OverwriteOption.Overwrite
);
InfoText.Text = "File "+fileName+" uploaded";
} catch (Exception ex) {
 
}
}
}
}

BackgroundUploadAsync

Parâmetros

  • path
Type: String

O ID da pasta no SkyDrive para onde o ficheiro será enviado, por exemplo "folder.8c8ce076ca27823f.8C8CE076CA27823F!142"

  • uploadLocation
Type: Uri

A localização onde se encontra o ficheiro que será enviado, por exemplo "/shared/transfers/myFile2.txt"

  • option
Type: OverwriteOption

Especifica se o ficheiro que será enviado deve substituir um ficheiro já existente com o mesmo nome nessa localização.

Código exemplo

Ligações

This page was last modified on 9 October 2013, at 22:07.
167 page views in the last 30 days.