Blog da Loja do Windows para desenvolvedores
Blog do desenvolvedor de aplicativos do Windows 8
IEBlog Português
Blogs da Equipe do Windows
Blog Inside Windows Live
Baixe o Windows 8 Release Preview
Dev Center - aplicativos com o estilo Metro
Siga-nos: @BuildWindows8
Conferência sobre a criação do Windows
Windows 8 Release Preview forums
Aplicativos com o estilo Metro do Windows
Developer Center de Windows Client
Um tópico que demonstramos bastante é como os aplicativos em um PC com Windows 8 podem se comunicar com outros aplicativos e serviços Web. No início do Windows 8, escolhemos uma abordagem em que os aplicativos podiam ser a origem ou o destino do dados que você desejava compartilhar, uma espécie de área de transferência, mas com um modelo de interação mais rico e uma semântica mais clara. Quando um aplicativo implementa um contrato, o Windows 8 pode fornecer a "cola" que o associa a qualquer outro aplicativo no sistema, e ao próprio sistema. Você pode ver isso acontecer quando executa uma ação simples como usar o botão Compartilhar em uma página da Web no Internet Explorer estilo Metro — com o aplicativo Email, você pode compartilhar o link com alguém cujas informações de contato armazenou no aplicativo Pessoas e assim por diante. Você pode pesquisar nos aplicativos que implementam o contrato do Windows Search. É possível abrir e salvar os arquivos de ou em qualquer lugar que implemente os contratos do Seletor de abertura e salvamento de arquivos. Essa abordagem inovadora permite que o Windows 8 funcione com qualquer par de aplicativos/serviços, em vez de "programar" um único nível de suporte para um determinado aplicativo. E para tudo isso, se você quiser, a sua conta da Microsoft dá suporte para que você conecte a serviços diferentes, do Facebook ao Twitter, linkedIn e muito mais. Nesta semana, faremos uma série de postagens sobre os novos aplicativos da Microsoft cujos principais tópicos serão compartilhamento, conexão e integração com o Windows 8. Esta matéria é uma repostagem de uma publicação voltada para desenvolvedores do nosso blog de desenvolvedores de aplicativos do Windows 8 e foi escrita por Derek Gebhard, um gerente de programas da nossa equipe de experiência do usuário. --Steven
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 bloco 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.
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:
Exemplo de ativação da exibição hospedada no Seletor
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.
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ê:
Veja os aplicativos Loja e Fotos. Eles são ótimos em seguir essas recomendações quando dão suporte à ativação do Search.
Search no aplicativo Loja
Search no aplicativo Fotos
Vamos ver como você pode dar suporte à ativação do Search de forma correta nos seus aplicativos JavaScript e XAML.
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 será disparado quando o Windows tiver de 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ê pode 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:
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 handlerWinJS.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); })); }});
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.
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 de pesquisa 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.
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.
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.
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:
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 activationWinJS.Application.addEventListener("activated", function (eventObject) { if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.fileOpenPicker) { pickerUI = eventObject.detail.fileOpenPickerUI; pickerUI.onfileremoved = fileRemovedFromPickerUI; ... }});WinJS.Application.start();
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:
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 snippetprotected 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.
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.
Para saber mais sobre ativações e contratos no Windows 8, siga este links ou faça perguntas nos nossos fóruns:
Obrigado,
Derek Gebhard Gerente de programas, experiência do usuário do Windows
Contribuíram: Jake Sabulsky, Marco Matos, Daniel Oliver