Ativando contratos do Windows 8 no seu aplicativo

Blog do desenvolvedor de aplicativos do Windows 8

Ideias sobre a criação de aplicativos com o estilo Metro para o Windows 8, da equipe de engenharia do Windows 8

Ativando contratos do Windows 8 no seu aplicativo

  • Comments 0

Quando começar a escrever aplicativos estilo Metro, você logo verá os contratos, um conceito novo e avançado do Windows 8. Os aplicativos estilo metro usam os contratos para declarar as manipulações a que eles dão suporte com outros aplicativos e com o Windows. Você provavelmente já ouviu falar em alguns deles: pesquisa, compartilhamento etc. O funcionamento dos aplicativos com o sistema ou entre si melhora quando os usuários instalam outros aplicativos que implementam os contratos. Nesta postagem, falarei sobre a ativação, um dos principais conceitos a se pensar quando adicionamos contratos aos aplicativos.

A plataforma de ativação do Windows é usada para iniciar aplicativos estilo Metro e notificá-los do motivo pelo qual um usuário os iniciou. Os motivos variam de um usuário ter iniciado o aplicativo usando seu mosaico na tela inicial até o aplicativo ter sido iniciado para uma tarefa específica, como mostrar a um usuário os resultados da pesquisa de uma consulta. O Windows fornece ao aplicativo o motivo da inicialização do aplicativo e, se aplicável, quaisquer informações adicionais necessárias para a execução da sua tarefa. Antes da nossa plataforma de ativação do Windows 8, você passava essas informações aos aplicativos via parâmetros de linha de comando. Com o nosso novo modelo, também damos suporte à transmissão de objetos dinâmicos, como um StorageFile, ShareOperation etc. para fornecer contexto ao aplicativo. Você verá que isso torna os contratos ainda mais avançados. Vamos pular para os detalhes do que você precisa saber para iniciar os seus aplicativos com um contrato.

Contratos: Iniciando aplicativos estilo Metro para uma finalidade e com contexto

Como você pode ver na demonstração do Windows 8 Consumer Preview, os contratos do Windows 8 são a "cola" que associa o seu aplicativo a outros aplicativos estilo Metro e à interface do usuário do sistema. Por exemplo, o contrato do Seletor de Abertura de Arquivos permite ao usuário importar arquivos de um aplicativo para outro. Com o contrato do Windows Search, os usuários podem pesquisar um aplicativo de qualquer lugar do sistema e transferir rapidamente uma consulta entre vários aplicativos. Em todos esses casos, e vários outros cenários de contrato, o Windows precisa poder ser iniciado diretamente em um local da interface do usuário do seu aplicativo em que o usuário possa executar uma tarefa específica de forma rápida e eficiente. É aí que entram a nossa plataforma de ativação e a API.

Os usuários podem dar início às manipulações de aplicativos de duas maneiras:

  1. Por meio de uma ação que leva a exibição imersiva do aplicativo a ficar em primeiro plano. Ela também é conhecida como ativação da exibição principal. Um exemplo é o contrato do Windows Search.

    Clicando-se em um aplicativo no Painel de Pesquisa, ele é iniciado na exibição dos resultados da pesquisa.
    Exemplo de ativação da exibição principal
  2. Por meio de uma ação embutida, sem sair do contexto do aplicativo em execução no momento. Isso também é conhecido como ativação da exibição hospedada. Aqui estão dois exemplos: um aplicativo no seletor de arquivos e outro sendo usado como compartilhamento de destino.
  3. Selecionar um aplicativo no Seletor inicia a interface do aplicativo, onde o usuário pode selecionar um arquivo.
    Exemplo de ativação da exibição hospedada no Seletor


    Iniciando o aplicativo Email pelo botão Compartilhar para compartilhar a foto com a qual estou interagindo.
    Exemplo de ativação da exibição hospedada do Compartilhamento de Destino

Estas são as diferenças entre as duas ativações:

Ativação da exibição principal

Ativação da exibição hospedada

É totalmente imersiva e iniciada como o aplicativo principal na tela

Renderiza a interface do usuário no cromado do sistema

Pode ser usada para muitas tarefas diferentes

É usada para uma tarefa curta e direcionada e o código se concentra exclusivamente nessa tarefa

Aparece na lista de alternância

Nunca aparece na lista de alternância

Pode ser fechada com o gesto de fechar

Não altera a exibição da janela principal para o mesmo aplicativo

Vamos analisar esses modelos de ativação e aplicá-los a dois cenários comuns que o ajudarão a criar os seus ótimos aplicativos estilo Metro.

Cenário 1: Integrando a ativação do Search ao seu aplicativo

No Windows 8, a adição da pesquisa pelo contrato do Windows Search permite aos usuários pesquisar o conteúdo do seu aplicativo de qualquer lugar do sistema e a qualquer momento. Se o seu aplicativo for o aplicativo principal na tela, os usuários poderão pesquisar seu conteúdo imediatamente usando o botão Pesquisar. Caso contrário, os usuários poderão usar o botão Pesquisar para selecionar o seu aplicativo na lista de aplicativos do Painel de Pesquisa para pesquisá-lo.

O suporte à ativação do Search significa que o seu aplicativo pode ser iniciado a qualquer momento para mostrar os resultados da pesquisa de uma determinada consulta. Assim como a inicialização na tela inicial, a inicialização no Painel de Pesquisa leva à ativação da exibição principal. Portanto, se você der suporte a vários contratos, o seu aplicativo poderá ser ativado de vários cenários diferentes. Além disso, o seu aplicativo pode acabar recebendo essa ativação quando ainda estiver em execução porque um usuário pode desejar adaptar a exibição principal para um novo cenário específico, como mostrar resultados da pesquisa. Para que isso funcione, recomendamos que você:

  • Atrase o carregamento do código que não for essencial ao contrato da exibição principal que o seu aplicativo estiver ativado para manipular.
  • Separe a lógica de inicialização geral que você usa para todos os contratos da lógica que precisa ser executada para um contrato específico.
  • Verifique se códigos que devem ser executados apenas uma vez na inicialização não estão adicionados ao seu manipulador de ativação de maneira que possam ser executados várias vezes.
  • Recarregue as configurações e estado anteriores ao inicializar após o encerramento do aplicativo para que ele apareça ao usuário como sempre conectado e em execução.

Veja os aplicativos Loja e Fotos. Eles são ótimos em seguir essas recomendações quando dão suporte à ativação do Search.

O aplicativo Loja é mostrado com os resultados da pesquisa para "calendar". O Painel de Pesquisa está aberto e o usuário está inserindo uma nova consulta de pesquisa.

Search no aplicativo Loja

 

O aplicativo Fotos está em execução e mostrando os resultados da pesquisa para Vancouver. O Painel de Pesquisa está aberto com a consulta de pesquisa para "vancouver".

Search no aplicativo Fotos

Vamos ver como você pode dar suporte à ativação do Search de forma correta nos seus aplicativos JavaScript e XAML.

Aplicativos JavaScript

Para aplicativos estilo Metro JavaScript, a ativação é exposta por meio do evento WinJS.Application.onactivated. Esse evento é disparado após a conclusão do DOMContentLoaded se o aplicativo ainda não estiver em execução ou não estiver suspenso. Caso contrário, o evento é disparado assim que o Windows precisar ativar o aplicativo. As ferramentas do Visual Studio para aplicativos JavaScript cuidam desse registro de eventos no default.js e oferecem uma área em que você possa adicionar código a ser executado quando ocorrer uma ativação de inicialização genérica, que é quando o usuário inicia o seu aplicativo na tela inicial.

Para que o seu aplicativo dê suporte à ativação do Search:

  1. Adicione a declaração Search ao seu manifesto usando o designer de manifesto do Visual Studio.
  2. Coloque no escopo global do JavaScript todo código de inicialização geral que precisa ser executado sempre que o seu aplicativo for iniciado independentemente do motivo. Se algum código desses precisar acessar o DOM, adicione o código no manipulador de eventos DOMContentLoaded .
  3. Registre-se para manipulação ativado para o Search.
  4. Quando o seu aplicativo estiver ativado para o Search, navegue até a página de resultados da pesquisa e insira o queryText recebido dos argumentos do evento de ativação.

Se você for como eu, provavelmente está procurando uma forma mais fácil de fazer isso que não seja manualmente. Felizmente, você pode usar as ferramentas do Visual Studio para executar isso tudo clicando com o botão direito no seu projeto, selecionando Adicionar > Novo Item e escolhendo Contrato do Windows Search na caixa de diálogo. A maior parte dos códigos que você vê aqui e uma interface do usuário de pesquisa que exibe os resultados de acordo com as nossas diretrizes sobre a experiência do usuário de pesquisa são criadas automaticamente para você. Mas você precisa usar a estrutura de navegação WinJS.Navigation com essas ferramentas.

Veja um trecho de código do arquivo default.js do meu aplicativo de fotos que mostra o suporte à ativação do Search:

// Register activated event handler
WinJS.Application.addEventListener("activated", function (eventObject) {
...
if (eventObject.detail.kind === appModel.Activation.ActivationKind.launch) {
...
} else if (eventObject.detail.kind === appModel.Activation.ActivationKind.search) {
uri = searchPageURI;
pageParameters = { queryText: eventObject.detail.queryText };
}
// Indicate to the system that the splash screen must not be torn down
// until after processAll and navigate complete asynchronously.
if (uri) {
eventObject.setPromise(ui.processAll().then(function () {
return nav.navigate(uri, pageParameters);
}));
}
});

Aplicativos XAML

Nos aplicativos estilo Metro XAML, a classe Windows.UI.Xaml.Application faz grande parte do trabalho necessário para que o seu aplicativo dê suporte à ativação. Essa classe expõe um conjunto de métodos de ativação fortemente tipado que você pode substituir para dar suporte a contratos comuns como o do Windows Search. Para todas as ativações de contrato que não possuem um método fortemente tipado, você pode substituir o método OnActivated e inspecionar o tipo de ativação para determinar o contrato para o qual o seu aplicativo está ativado.

Novos projetos de aplicativo XAML no Visual Studio vêm com código gerado que usa a classe Windows.UI.Xaml.Application para que o aplicativo possa ser ativado em uma inicialização genérica. O código para manipular essa ativação se encontra na representação de classe do seu aplicativo, nos arquivos App.xaml.cs/cpp/vb.

Para que o seu aplicativo dê suporte à ativação do Search:

  1. Adicione a declaração Search ao seu manifesto usando o designer de manifesto do Visual Studio.
  2. Coloque no construtor de aplicativos do App.xaml.cs/cpp/vb qualquer código de inicialização geral que precise ser executado sempre que o seu aplicativo for iniciado independentemente do motivo.
  3. Substitua o método OnSearchActivated fortemente tipado no App.xaml.cs/cpp/vb para manipular a ativação da pesquisa.
  4. Carregue a interface do usuário do Search e mostre os resultados de pesquisa da consulta recebida no SearchActivatedEventArgs.

Novamente, assim como ocorre nos aplicativos JavaScript, há uma forma mais fácil de fazer isso do que manualmente. Você pode usar as ferramentas do Visual Studio para fazer grande parte desse trabalho. Basta clicar com o botão direito do mouse no projeto, selecionar Adicionar > Novo Item e escolher Contrato do Windows Search na caixa de diálogo. A maior parte dos códigos que você vê aqui e uma interface do usuário de pesquisa que exibe os resultados de acordo com as nossas diretrizes sobre a experiência do usuário no Search são criadas automaticamente para você.

Veja trechos de código C# do meu aplicativo de fotos que mostra suporte à ativação do Search.

Devemos substituir o método OnSearchActivated para dar suporte à ativação do Search:

protected override void OnSearchActivated(SearchActivatedEventArgs args)
{
// Load Search UI
PhotoApp.SearchResultsPage.Activate(args.QueryText);
}

O método Ativar da SearchResultsPage configura uma interface do usuário que mostra os resultados da consulta de pesquisa de um usuário:

// SearchResultsPage.xaml.cs code snippet 
public static void Activate(String queryText)
{
// If the window isn't already using Frame navigation, insert our own frame
var previousContent = Window.Current.Content;
var frame = previousContent as Frame;
if (frame == null)
{
frame = new Frame();
Window.Current.Content = frame;
}
// Use navigation to display the results, packing both the query text and the previous
// Window content into a single parameter object
frame.Navigate(typeof(SearchResultsPage1),
new Tuple<String, UIElement>(queryText, previousContent));
// The window must be activated in 15 seconds
Window.Current.Activate();
}

A lógica e os princípios demonstrados aqui não se aplicam apenas à adição de suporte para a ativação do Search. Você pode usar as mesmas técnicas ao adicionar suporte para Protocolos, Associações de arquivos e Reprodução Automática de dispositivos porque eles também são contratos de ativação da exibição principal.

Cenário 2: Integrando a ativação do Seletor de abertura de arquivos ao seu aplicativo

Um aplicativo estilo Metro pode chamar o seletor de arquivos para permitir que o usuário navegue em seu sistema e selecione arquivos ou pastas a serem usados pelo aplicativo ou para permitir que o usuário salve um arquivo usando um novo nome, tipo de arquivo ou local ("Salvar como"). Os aplicativos também podem usar o seletor de arquivos como uma interface para fornecer arquivos, um local para salvamento ou até mesmo atualizações de arquivos para outros aplicativos. Incorporando o contrato do Seletor de abertura de arquivos, você pode ajudar os usuários a selecionar arquivos do seu aplicativo diretamente dentro de outro aplicativo. Os usuários têm liberdade e flexibilidade para escolher os arquivos armazenados e apresentados no seu aplicativo.

A inicialização de um aplicativo para o contrato do Seletor de abertura de arquivos gera a ativação da exibição hospedada. A interface do usuário do aplicativo é hospedada no seletor de arquivos e o código executado para essa ativação deve se concentrar exclusivamente na tarefa de permitir que os usuários selecionem seus arquivos. É importante que o seu aplicativo seja o mais rápido possível aqui para proporcionar uma ótima experiência aos usuários. Não carregue nenhum código ou biblioteca que sejam desnecessários à tarefa específica de ativação da exibição hospedada.

Recomendo uma análise do aplicativo SkyDrive, porque ele é um ótimo exemplo de suporte à ativação do Seletor de abertura de arquivos, e a concentração exclusiva na tarefa de permitir que os usuários selecionem arquivos.

O Seletor está em execução e permitindo que o usuário selecione um arquivo no aplicativo SkyDrive.

Suporte ao Seletor de abertura de arquivos no aplicativo SkyDrive

Vamos ver como você pode dar suporte ao Seletor de abertura de arquivos corretamente nos seus aplicativos JavaScript e XAML.

Aplicativos JavaScript

Nos aplicativos estilo Metro JavaScript, a ativação da exibição hospedada se comporta da mesma maneira que a ativação da exibição principal, exceto por uma diferença fundamental: a ativação da exibição hospedada sempre ocorre em uma nova janela e contexto de script. Isso significa que o seu código para manipular essa ativação não pode acessar bibliotecas, variáveis globais ou o DOM do seu aplicativo principal.

Para que o seu aplicativo dê suporte à ativação do Seletor de abertura de arquivos:

  1. Crie uma nova página HTML que seja projetada especificamente para manipular somente o contrato do Seletor de abertura de arquivos.
  2. Adicione a declaração do Seletor de abertura de arquivos no designer de manifesto do Visual Studio e defina a página HTML recém-criada como a página inicial.
  3. Carregue nessa página somente o JavaScript e outros recursos que sejam necessários para dar suporte ao contrato do Seletor de abertura de arquivos a fim de aumentar o desempenho.
  4. Estruture o manipulador de eventos de ativação de modo que manipule somente a ativação do contrato do Seletor de abertura de arquivos. Esse manipulador é chamado somente uma vez durante o tempo de vida da tarefa de seleção de arquivos.
  5. Use os argumentos do evento de ativação para interagir com o seletor de arquivos.

Para economizar tempo, você pode usar as ferramentas do Visual Studio para executar esse trabalho. Basta clicar com o botão direito do mouse no projeto, selecionar Adicionar > Novo Item e escolher Contrato do Seletor de Arquivos na caixa de diálogo. A maior parte do que você vê a seguir é criada automaticamente para você no seu projeto.

Veja um trecho de código do arquivo fileOpenPicker.js do meu aplicativo de fotos para a manipulação da ativação do Seletor de abertura de arquivos:

// Register activated event handler for handling File Open Picker activation
WinJS.Application.addEventListener("activated", function (eventObject) {
if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.fileOpenPicker) {
pickerUI = eventObject.detail.fileOpenPickerUI;
pickerUI.onfileremoved = fileRemovedFromPickerUI;
...
}
});

WinJS.Application.start();

Aplicativos XAML

Nos aplicativos estilo Metro XAML, você dá suporte à ativação da exibição hospedada no seu aplicativo de forma semelhante à ativação da exibição principal. A maior diferença é que agora o seu aplicativo precisa criar um novo thread e uma nova janela para manipular a ativação. O código de modelo do Visual Studio gerencia todo o trabalho para criar para você o novo thread e a nova janela para ativações da exibição hospedada.

Para manipular a ativação do Seletor de abertura de arquivos, um aplicativo XAML precisa:

  1. Adicionar a declaração do Seletor de abertura de arquivos ao seu manifesto usando o designer de manifesto do Visual Studio.
  2. Substituir o método OnFileOpenPickerActivated no App.Xaml.cs/cpp/vb e carregar a sua página que manipulará esse contrato.
  3. Inserir o FileOpenPickerActivatedEventArgs na página que estiver manipulando esse contrato para que possa interagir com o seletor de arquivos.

Para economizar tempo, você pode usar as ferramentas do Visual Studio para executar esse trabalho. Basta clicar com o botão direito do mouse no projeto, selecionar Adicionar > Novo Item e escolher Contrato do Seletor de Arquivos na caixa de diálogo. A maior parte do que você vê a seguir é criada automaticamente para você no seu projeto.

Veja um trecho de código C# do meu aplicativo de fotos para a manipulação da ativação do Seletor de abertura de arquivos:

// App.xaml.cs code snippet
protected override void OnFileOpenPickerActivated(FileOpenPickerActivatedEventArgs args)
{
var fileOpenPickerPage = new PhotoApp.FileOpenPickerPage();
fileOpenPickerPage.Activate(args);
}

// FileOpenPickerPage.xaml.cs code snippet
public void Activate(FileOpenPickerActivatedEventArgs args)
{
this._fileOpenPickerUI = args.FileOpenPickerUI;
this._fileOpenPickerUI.FileRemoved += FileOpenPickerUI_FileRemoved;

// Show the user’s photos in the Picker UI
...

Window.Current.Content = this;
// The window must be activated in 15 seconds
Window.Current.Activate();
}

A lógica e os princípios demonstrados aqui não se aplicam apenas à adição de suporte para a ativação do Seletor de abertura de arquivos. Você pode usar as mesmas técnicas ao adicionar suporte para Compartilhamento de Destino, Seletor de salvamento de arquivos, Seletor de contatos, Configurações de câmera e Configurações de tarefas de impressão porque eles também são contratos de ativação da exibição hospedada.

Resumo

Mostrei como contratos do Windows 8, como o do Windows Search e Seletor de Arquivos oferecem a capacidade de direcionar usuários para o seu aplicativo para que executem uma determinada tarefa de outras partes do sistema e até mesmo de outros aplicativos em determinados cenários. Os usuários esperam que essas experiências sejam rápidas e fluidas no seu aplicativo porque o Windows e o seu aplicativo sabem o que os usuários desejam e qual tarefa estão executando. A implementação correta da ativação do seu aplicativo é essencial para a criação de uma ótima experiência para esses contratos. Mesmo que você esteja apenas trabalhando com a base de um aplicativo e não esteja usando contratos, é bom ter essas dicas em mente ao definir a ativação de inicialização genérica. Dessa forma, futuramente, você poderá incluir suporte a contratos no seu aplicativo de forma fácil e sem precisar recriar o seu código.

Lembre-se:

  1. Coloque toda lógica geral de inicialização de aplicativos em um local em que ele seja executado independentemente de como o seu aplicativo for ativado.
  2. Os seus manipuladores de ativação podem ser executados mesmo quando o seu aplicativo já estiver em execução ou suspenso. Verifique se isso não causará nenhuma consequência indesejada para o seu aplicativo.
  3. As ferramentas do Visual Studio podem trabalhar bastante por você para dar suporte aos contratos do Windows Search, Compartilhamento de Destino e Seletor de abertura de arquivos. Basta clicar com o botão direito do mouse no projeto e selecionar Adicionar > Novo Item.
  4. Ao receber uma ativação da exibição hospedada, carregue apenas o código necessário para a tarefa associada à ativação.

Para saber mais sobre ativações e contratos no Windows 8, siga este links ou faça perguntas nos nossos fóruns:

Documentação

Exemplos

Obrigado,

Derek Gebhard
gerente de programas, experiência do usuário do Windows

Contribuíram: Jake Sabulsky, Marco Matos, Daniel Oliver

  • Loading...
Leave a Comment
  • Please add 5 and 4 and type the answer here:
  • Post