Este artigo foi traduzido por máquina.

Windows Phone

Crie um aplicativo de hub da empresa para o Windows Phone 8

Champion Tony

Baixar o código de exemplo

Antes do lançamento do Windows Phone 8, as empresas tinham apenas algumas opções para implantar aplicativos empresariais para dispositivos de seus empregados. Poderiam liberar os apps para o Windows Phone loja e exigir autenticação de usuário, permitindo que os aplicativos a serem implantados com sucesso ao mesmo tempo protegendo o seu uso. Claro, o app seria então disponível na loja e disponível ao público em geral para download. A outra abordagem foi usar uma solução de gerenciamento (MDM) do dispositivo móvel para gerenciar diretamente os dispositivos. Atualmente, a Microsoft oferece duas Mlle: Windows Intune e System Center 2012 Configuration Manager. Enquanto Mlle é, ainda, a abordagem preferencial para muitas empresas em grande escala, eles não podem alinhar com metas de implantação de uma empresa.

Windows Phone 8 traz uma opção nova, não gerenciada para implantar aplicativos empresariais que permite que dispositivos instalar apps diretamente de um anexo de email ou baixando o app de uma URL. Esta abordagem direta ao implantar aplicativos empresariais abre empresa app desenvolvimento e implantação de mais empresas.

Uma desvantagem dessa abordagem não gerenciado é essa instalação e gerenciamento de aplicativo para o usuário não é completamente intuitivo. Quando se trata de dispositivos móveis, usuários esperam poder instalar apps com o premir de um botão. Ter que manualmente instalar apps de um e-mail ou um Web site que vai contra o app normal experiência e pode causar incerteza em usuários e problemas de treinamento para a equipe de ti. Felizmente, há uma solução — um app hub de empresa.

Windows Phone 8 inclui algumas adições ao SDK que oferecem suporte a esse novo conceito. Uma empresa hub app dá a empresa um mecanismo para a apresentação e entrega de aplicativos para o usuário para a instalação. E isso dá aos usuários uma experiência familiar para descobrir e instalar aplicativos da empresa.

Requisitos para empresa Hub Apps

Antes de publicar um app hub de companhia para seus empregados, existem algumas etapas administrativas que precisam ser tomadas. O primeiro passo é se inscrever para uma conta da companhia sobre a Windows Phone Dev Center. O processo de registro é semelhante a uma conta de desenvolvimento regular, mas uma conta de empresa passa por uma verificação de conta adicional.

Depois de criar uma conta, você deve adquirir um certificado de assinatura do código empresa móvel da Symantec Corp. O processo de compra de certificado requer um ID válido do Symantec do centro colaborador, então isso só pode ser concluído depois que a conta da companhia foi estabelecida e verificada. Uma vez que o certificado é comprado e instalado em uma máquina, você precisará exportar o certificado em um formato PFX que inclui o chave particular. Este certificado será usado para gerar um aplicativo de inscrição token (AET) e para a assinatura de todos os apps desenvolvidos pela empresa. Ao instalar o certificado em sua máquina de desenvolvimento, é importante seguir os passos descritos em bit.ly/1287H8j. Caso contrário, você vai acabar com um arquivo. PFX incompleto que não valida corretamente durante a implantação. Pular essas etapas é uma dor de cabeça comum para muitos desenvolvedores.

Uma AET deve ser instalado em um dispositivo antes que o dispositivo pode instalar qualquer apps desenvolvidos por uma empresa. Instalando o AET, o dispositivo está matriculado na conta empresa estabelecida anteriormente. O Windows Phone SDK 8.0 inclui uma ferramenta, AETGenerator, que pode ser usado para criar o AET do certificado exportado. O gerador cria três formas diferentes do AET: uma versão crua contendo o AET no formato XML (. xml), uma versão codificada na Base64, usado com um MDM tais como o Windows Intune ou o System Center 2012 Configuration Manager (.aet) e um formato XML que pode ser instalado diretamente no dispositivo através de e-mail ou Internet Explorer (.aetx).

Ao decidir qual método usar para distribuir o AET e seus aplicativos de empresa, há um ponto importante a considerar. Quando um dispositivo instala uma AET, é válido até sua data de vencimento, que por padrão é de um ano. Uma vez que a AET expira, o dispositivo não será capaz de rodar qualquer apps assinado e distribuído pela empresa — incluindo apps hub — até uma AET novo, válido está instalado. Isto cria dois itens, que você precisa adicionar ao seu planejamento de estratégia de implantação.

A primeira é como lidar com a expiração da eIa. Se você estiver usando um MDM para gerenciar seus dispositivos, uma AET atualizado pode ser publicado para os dispositivos diretamente a partir do MDM Isso ajudará a minimizar o impacto do restabelecimento da eIa original nos dispositivos. Se a AET é instalado através de um processo gerenciado — e-mail ou o Internet Explorer — a nova AET precisará ser instalado manualmente pelo usuário. Porque o usuário não será capaz de executar todos os apps da companhia, incluindo a app hub, uma vez que a AET expira, é uma boa prática para criar e distribuir uma nova AET antes que expire o original. Isto irá impedir que o usuário perder o acesso aos aplicativos da empresa.

O segundo item a considerar é a remoção da AET, bem como qualquer empresa de apps instalados no dispositivo. No atual mundo traga seu próprio dispositivo (BYOD), isso pode ser uma consideração principal. Usando um MDM dá a empresa controle total sobre seus apps instalado em um dispositivo. Apps e a AET podem ser remotamente retirado diretamente do MDM No entanto, em uma implantação não gerenciada, isso não é possível. Uma vez que uma AET é adicionado para o dispositivo, é válido e não pode ser removido antes da sua expiração. Da mesma forma, o SDK não fornece uma maneira de remover um app de um dispositivo por meio de código. A melhor prática para abordar esta questão é exigir que os usuários se autentiquem para todos os aplicativos da empresa. Isso permite que você impedir que uma conta de usuário lançar um app. Enquanto isso não é o mesmo que ser capaz de remover o app, dá-lhe uma maneira de gerenciar a segurança do seu aplicativo quando ele é implantado para um dispositivo.

Depois de ter completado os passos iniciais, você está pronto para começar a criar aplicativos que podem ser implantados para os funcionários da sua empresa sem a necessidade de percorrer a loja. Você encontrará uma olhada mais completa criando uma conta de empresa, obtendo um certificado de assinatura do código Enterprise Mobile e gerando uma AET no bit.ly/SBN6Tf.

Preparando-se para o desenvolvimento

Uma empresa hub app requer configuração um pouco mais do que a maioria dos apps do Windows Phone. Por um lado, é bastante útil para ter pelo menos alguns apps disponível para instalar e usar como casos de teste dentro do aplicativo. Enquanto os apps se podem ser em branco apps do Windows Phone, todos têm que ter uma coisa em comum: um ID de editor.

Se você já tiver criado um aplicativo do Windows Phone, você provavelmente está familiarizado com o Windows Phone app arquivo de manifesto, que por padrão é o arquivo WMAppManifest, localizado na pasta de propriedades da solução. Este arquivo contém informações de Windows Phone e a loja precisa saber sobre seu aplicativo. Abrindo o arquivo WMAppManifest de dentro do Visual Studio lança um designer para torná-lo mais fácil de manter o arquivo. O designer contém quatro abas, um dos quais é o guia de empacotamento.

O guia de empacotamento fornece informações sobre o desenvolvedor do app, informação de versionamento e idiomas suportados. Para efeitos do presente artigo, a versão, identificação do produto e ID de editor são os itens mais importantes sobre este guia. Por padrão, os modelos de projeto do Windows Phone geram um novo GUID para o ID do produto e ID de editor, quando o projeto é criado. Quando estiver trabalhando com um app como um hub da empresa, o app terá visibilidade apenas em outros apps que têm a mesma ID de editor que ele faz. Este ID de editor é comumente definida como editora GUID que é atribuído à sua conta de desenvolvedor no centro colaborador. O GUID do Publisher pode ser encontrado na sua página de Resumo de conta no centro de Dev.

O arquivo para download deste artigo contém sete soluções. Os seis primeiros são denominados CDSAPP [1-6]. Cada um destes apps foi criado a partir do modelo de projeto Windows Phone App e só tem o título de app na página principal e a editora ID modificados. Se você vai usar esses aplicativos para o seu teste, é importante usar a mesma ID de editor para sua empresa hub app ou para alterar o IDs app para o seu.

A versão e o ID do produto são duas importantes peças de informação para saber quando criar uma solução do cubo de companhia. A versão permite que você determine quando aplicativos precisam ser atualizados em um dispositivo, e a ID do produto é usada para identificar o app.

A próxima coisa a considerar é o seu método de teste. Geralmente, você pode fazer a maioria dos seus ensaios com o emulador do Windows Phone. Ele faz um ótimo trabalho e permite que você teste a maioria das coisas que você precisa testar durante o processo de desenvolvimento. A dificuldade com testando um app hub de empresa é que seu aplicativo precisa ter apps adicionais instalados no emulador para testar com. No entanto, cada vez que você iniciar uma nova instância do emulador, começa a partir de uma versão limpa do sistema operacional. Isto significa que qualquer coisa que você instalou anteriormente para o teste não está mais lá.

Existem duas maneiras de abordar esse problema. A primeira é para deixar o emulador rodando, instalar alguns apps de teste e depois fazer desenvolvimento de sua empresa app hub enquanto o emulador ainda está em execução. Claro, se o emulador fica reiniciado por qualquer motivo, você tem que reinstalar os aplicativos para iniciar os testes novamente.

A abordagem preferencial é para fazer seu teste contra um dispositivo real de desenvolvimento. Isto fornece uma plataforma mais estável para seus testes. Se você vai fazer o seu teste em um dispositivo ao vivo, você precisará certificar-se de que a editora ID do dispositivo que corresponde a ID de editor da sua conta.

O Hub da empresa SDK

O Windows Phone SDK 8.0 inclui duas classes que são os principais responsáveis pela gestão e interagindo com as empresa apps instalados na máquina. Enquanto existem alguns objetos de suporte que você vai ser introduzido ao longo do caminho, compreender essas duas classes é crítico para seu app hub.

A classe de pacote cada app instalado no dispositivo é representado pela classe de pacote, que está localizado no namespace Windows.ApplicationModel. A classe de pacote contém um par de membros importantes que discutirei aqui. A primeira é a propriedade de Id, que retorna uma classe PackageId. A classe contém a maior parte da informação de manifesto que foi inserida na guia de empacotamento em designer de manifesto, incluindo a identificação do produto que foi atribuído para o app, o nome do app, informações sobre a editora e a versão atual.

O outro importante membro da classe de pacote é o método de lançamento, que permite que você iniciar o aplicativo que o pacote representa a partir do aplicativo atual. Não só isto é uma grande ferramenta para a construção de uma empresa hub app, também pode ser útil para outros aplicativos de linha de negócios (LOB).

Classe de InstallationManager InstallationManager, no namespace Windows.Phone.Management.Deployment, é a classe responsável por instalar pacotes no dispositivo. Isso é realizado através do método AddPackageAsync. Uma lista de todos os apps do PublisherId mesmo que o app atual, incluindo o pacote representando o app atual, é retornada pelo método FindPackagesFromCurrentPublisher. Além disso, a classe também pode ser usada para obter o progresso da instalação de quaisquer aplicativos com a mesma PublisherId.

Construindo uma App Hub de empresa

Eu vou te apresentar os princípios fundamentais de desenvolver um app hub de empresa, usando o demo mostrado na Figura 1. O demo contém um app panorama de três páginas que lista de apps disponíveis da empresa em três categorias: apps que não estão atualmente apps instalados, com uma atualização disponível e apps que possuem a versão mais recente instalada. Além disso, o aplicativo terá uma página de detalhes que apresenta as informações sobre o aplicativo e fornece os comandos para instalar a versão mais recente e iniciar o aplicativo de dentro do cubo. A solução pode ser encontrada como um recurso para download a partir archive.msdn.microsoft.com/mag201307Hub.

The Company Hub App
Figura 1 o App Hub de empresa

O que está faltando por uma questão de integridade, é importante destacar alguns itens que não estão incluídos no app demo, mas teriam que ser criado para qualquer solução do mundo real. A primeira é a fonte dos apps disponíveis da empresa. Se você examinar a classe CompanyPackage, você verá que ele contém um método GenerateData. Este método é usado para falsificar os apps disponíveis da empresa gerando uma lista dos apps empresa instalada no dispositivo, modificando alguns dos dados e criando alguns dados fictícios, bem como.

A segunda peça que falta é um site da Web para hospedar os arquivos XAP para ser baixado e instalado no dispositivo. Para o hub da companhia ser funcional, deve ser capaz de baixar os apps de algum local. Esta solução Web que precisa ser criado também.

A classe CompanyPackage a fim de representar a lista de apps disponíveis para instalar no dispositivo, a primeira coisa a definir é uma classe de CompanyPackage que é modelada após a classe de pacote. A classe CompanyPackage contém as informações de exibição e a localização do pacote de instalação:

public class CompanyPackage
{
  public string Id { get; set; }
  public string Name { get; set; }
  public string Description { get; set; }
  public string Thumbnail { get; set; }
  public string Version { get; set; }
  public Uri SourceUri { get; set; }
  public CompanyPackageStatus Status { get; set; }
}

A propriedade Status é usada para determinar se o aplicativo está atualmente instalado no dispositivo, e se houver uma versão mais recente. CompanyPackageStatus é um enum que explorarei posteriormente neste artigo:

public enum CompanyPackageStatus
{
  Unknown,
  New,
  Update,
  Installed
};

Criando um modelo de exibição para este app hub de empresa, você tem que criar um modelo de visão única, CompanyPackageViewModel, mostrado na Figura 2. O modelo de exibição deve ter três propriedades que retornam um IEnumerable coleção de objetos de CompanyPackage: NewPackage, UpdatePackages e InstalledPackages. A propriedade NewPackage contém todos os apps que estão disponíveis que não são atualmente instalado na máquina. UpdatePackages representa todos os apps que estão instalados na máquina, mas tem uma versão mais recente disponível. Finalmente, InstalledPackages contém todos os aplicativos que estão atualmente instalados e actualizados sobre o dispositivo.

Figura 2 o modelo de exibição de CompanyPackage

public class CompanyPackageViewModel : INotifyPropertyChanged
{
  private IEnumerable<CompanyPackage> _packages;
  public CompanyPackageViewModel()
  {
    LoadData();       
  }
  private void LoadData()
  {
    // Get list of packages and populate properties
    _packages = CompanyPackage.GenerateData();
    UpdatePackageStatus();
  }
  private IEnumerable<CompanyPackage> _newPackages;
  public IEnumerable<CompanyPackage> NewPackages
  {
    get
    {
      return _newPackages;
    }
  }
  private IEnumerable<CompanyPackage> _updatePackages;
  public IEnumerable<CompanyPackage> UpdatePackages
  {
    get
    {
      return _updatePackages;
    }
  }
  private IEnumerable<CompanyPackage> _installedPackages;
  public IEnumerable<CompanyPackage> InstalledPackages
  {
    get
    {
      return _installedPackages;
    }
  }
  public event PropertyChangedEventHandler PropertyChanged;
  private void NotifyPropertyChanged(String propertyName)
  {
    PropertyChangedEventHandler handler = PropertyChanged;
    if (null != handler)
    {
      handler(this, new PropertyChangedEventArgs(propertyName));
    }
  }
}

Definindo o status de três antes de você pode preencher as três propriedades diferentes do modelo de exibição, você precisa gerar a lista de apps disponíveis, representado como uma coleção de CompanyPackages. No modelo mostrado na exibição Figura 2, os dados são carregados e preenchidos no método LoadData. O método LoadData puxa uma lista de dados de teste e o armazena na variável privada _packages. Em seguida, chama o método UpdatePackageStatus mostrado na Figura 3.

Figura 3 método para determinar o Status de cada CompanyPackage

public void UpdatePackageStatus()
{
  var devicePkgs = 
    InstallationManager.FindPackagesForCurrentPublisher();
  foreach (var pkg in _packages)
  {
    var qry = devicePkgs.Where(p => p.Id.ProductId == pkg.Id);
    if (qry.Count() > 0)
    {
      var devicePkg = qry.First();
      var devicePkgVersion =
        PackageVersionHelper.VersionToString(devicePkg.Id.Version);
      pkg.Status = PackageVersionHelper.IsNewer(
        pkg.Version, devicePkgVersion) ?
CompanyPackageStatus.Update : CompanyPackageStatus.Installed;
    }
    else
    {
      pkg.Status = CompanyPackageStatus.New;
    }
  }
  _newPackages = _packages.Where(
     p => p.Status == CompanyPackageStatus.New).ToList();
  _updatePackages = _packages.Where(
     p => p.Status == CompanyPackageStatus.Update).ToList();
  _installedPackages = _packages.Where(
     p => p.Status == CompanyPackageStatus.Installed).ToList();
  // Fire notifications for all properties
  NotifyPropertyChanged("NewPackages");
  NotifyPropertyChanged("UpdatePackages");
  NotifyPropertyChanged("InstalledPackages");
}

O método UpdatePackageStatus tem duas responsabilidades: determinar o status atual de cada classe de CompanyPackage disponível e em seguida, preencher as propriedades de coleção de três do modelo de exibição com base em tal estado.

A propriedade Status é determinada comparando cada CompanyPackage contra os apps que estão atualmente instalados no dispositivo. Uma lista de apps instalados é obtida a partir do método estático InstallationManager.FindPackagesForCurrentPublisher. Se não existir um objeto de pacote com a mesma identificação como a CompanyPackage, ela é marcada com um status de "Novo".

Se existir um pacote com a mesma Id, em seguida, a propriedade versão do pacote é em relação à versão do CompanyPackage. A propriedade PackageId versão retorna uma struct PackageVersion. Ao contrário de classe Version, este struct está faltando um par de características. A primeira característica é a capacidade de converter a struct para uma representação de seqüência de caracteres. Se você chamar o método ToString, ele retorna o nome do tipo e não o número de versão real. A segunda característica ausente é a capacidade de comparar duas instâncias de PackageVersion para determinar qual é o mais recente.

Figura 4 mostra uma classe auxiliar que implementa ambas estas características ausentes. O método VersionToString retorna uma representação de um PackageVersion sequência adequada. O método IsNewer leva duas representações de seqüência de caracteres de um número de versão e determina se o argumento newVersion é mais recente que o argumento oldVersion. Ele realiza isto convertendo as seqüências de caracteres para Version objetos e usando o método CompareTo disponível.

Figura 4 classe de Helper para PackageVersion

public static class PackageVersionHelper
{
  public static string VersionToString(PackageVersion version)
  {
    return String.Format("{0}.{1}.{2}.{3}",
                         version.Major,
                         version.Minor,
                         version.Build,
                         version.Revision);
  }
  public static bool IsNewer(string newVersion, 
    string oldVersion)
  {
    var newVer = Version.Parse(newVersion);
    var oldVer = Version.Parse(oldVersion);
    return newVer.CompareTo(oldVer) > 0;
  }
}

Uma vez que o método de UpdatePackageStatus calculou a propriedade Status para cada empresa­pacote de objeto, ele preenche as propriedades de três coleção usando consultas LINQ. Finalmente, o modelo de exibição gera o evento PropertyChanged para cada uma das propriedades.

Exibindo a lista de Apps três listas de apps disponíveis são exibidas em um controle de Panorama com três Panorama­itens, cada um contendo um LongList­seletor acoplado a uma das listas. Cada um usa o mesmo DataTemplate para a exibição de um CompanyPackage, e o XAML do Panorama completo pode ser encontrado em Figura 5. O projeto para download, você verá que o DataContext do controle Panorama herda o DataContext do pai PhoneApplicationPage, que é definida como uma instância do CompanyPackageViewModel. Você viu o resultado em Figura 1.

Figura 5 Panorama para exibir os Apps disponíveis

<phone:Panorama Title="my company hub">
  <phone:Panorama.Resources>
    <DataTemplate x:Key="listItemTemplate">
      <StackPanel Margin="0,-6,0,12" Orientation="Horizontal">
        <Image  Source="{Binding Thumbnail,
          Converter={StaticResource debugConv}}"/>
        <TextBlock Text="{Binding Name}" TextWrapping="Wrap"
          VerticalAlignment="Center"
          Style="{StaticResource PhoneTextExtraLargeStyle}"
          FontSize="{StaticResource PhoneFontSizeExtraLarge}"/>
      </StackPanel>
    </DataTemplate>
  </phone:Panorama.Resources>
  <!--Panorama New Apps-->
  <phone:PanoramaItem Header="New Apps">
    <!--Single line list with text wrapping-->
    <phone:LongListSelector Margin="0,0,-22,0"
      ItemsSource="{Binding NewPackages}"
      SelectionChanged="ItemSelected"
      ItemTemplate="{StaticResource listItemTemplate}"/>
  </phone:PanoramaItem>
  <!--Panorama Update Apps-->
  <phone:PanoramaItem Header="Update Apps">
    <!--Single line list with text wrapping-->
    <phone:LongListSelector Margin="0,0,-22,0"
      ItemsSource="{Binding UpdatePackages}"
      SelectionChanged="ItemSelected"
      temTemplate="{StaticResource listItemTemplate}"/>
  </phone:PanoramaItem>
  <!--Panorama Installed Apps-->
  <phone:PanoramaItem Header="Installed Apps">
    <!--Single line list with text wrapping-->
    <phone:LongListSelector Margin="0,0,-22,0"
      ItemsSource="{Binding InstalledPackages}"
      SelectionChanged="ItemSelected"
      ItemTemplate="{StaticResource listItemTemplate}"/>
  </phone:PanoramaItem>
</phone:Panorama>

A vista de detalhe de CompanyPackage

Cada LongListSelector compartilha o mesmo manipulador de eventos para o evento SelectionChanged, ItemSelected. O manipulador de eventos usa o NavigationService para navegar para um detalhe PhoneApplicationPage, PackagePage e passa a Id do CompanyPackage. Porque a página atual será armazenada na navegação, o SelectedItem da LongListSelector é redefinido para nulo para garantir adequado evento disparando cada vez:

private void ItemSelected(object sender, 
  SelectionChangedEventArgs e)
{
  if (e.AddedItems.Count > 0 && e.AddedItems[0] != null)
  {
    var pkg = e.AddedItems[0] as CompanyPackage;
    NavigationService.Navigate(
      new Uri("/PackagePage.xaml?id=" + pkg.Id, 
      UriKind.Relative));
    (sender as LongListSelector).SelectedItem = null;
  }
}

Porque a classe PackagePage só recebe a identificação do CompanyPackage a ser exibido, tem que usar esse Id para encontrar o objeto apropriado. Isso é feito adicionando um método de FindPackage para o CompanyPackageViewModel:

public CompanyPackage FindPackage(string id)
{
  return _packages.Where(p => p.Id == id).FirstOrDefault();
}

O projeto Windows Phone App de Panorama expõe um modelo de visão global, adicionando uma propriedade ViewModel para a classe App. Este projeto usa essa propriedade para expor seu modelo de vista para o principal e páginas de detalhes.

A classe PackagePage substitui o método OnNavigatedTo para definir seu DataContext para a CompanyPackage correspondência a identificação fornecido. Em seguida, chama um método UpdateUI que alterna a visibilidade e o conteúdo de dois botões que são adicionados à tela baseada no estatuto do CompanyPackage. Os resultados de cada tipo de Status podem ser vistos em Figura 6.

The Different Detail Pages
Figura 6 detalhe diferentes páginas

Os dois botões exponham as duas ações disponíveis dentro das classes de hub da empresa. O primeiro é a capacidade de iniciar o aplicativo. Se o aplicativo está atualmente instalado no dispositivo, o botão de lançamento é visível. O manipulador do botão localiza o objeto correto do pacote que coincide com o atual CompanyPackage e chama o método de lançamento:

private void btnLaunch_Click(
  object sender, RoutedEventArgs e)
{
  var pkg = DataContext as CompanyPackage;
  var devicePkgs = InstallationManager.
FindPackagesForCurrentPublisher();
  var devicePkg = devicePkgs.Where(p =>
    p.Id.ProductId == pkg.Id).FirstOrDefault();
  if (devicePkg != null)
  {
    devicePkg.Launch("");
  }        
}

Se o Status de CompanyPackage é "Novo" ou "Update", um botão de instalar é visível na página. O manipulador de eventos para este botão tenta instalar a versão mais recente do app de Uri fornecido na fonte de­Propriedade Uri do CompanyPackage. Isso é realizado com o método de InstallationManager.AddPackageAsync. O mesmo método é chamado se o aplicativo está sendo atualizado ou é uma nova instalação. Esse método pode ser muito temperamental e você precisa certificar-se de cuidar de todos os erros que são gerados. Figura 7 mostra o manipulador de eventos e o processo de instalação. Se o aplicativo é instalado com êxito, o UpdatePackage­Status método da CompanyPackageView­modelo é chamado para atualizar as coleções de status a ser exibidas na página principal e o método UpdateUI da página para atualizar a página.

Figura 7-instalação e atualização botão manipulador de eventos

private async void btnInstall_Click(object sender, RoutedEventArgs e)
{
  var pkg = DataContext as CompanyPackage;
  if (MessageBox.Show("Install " + pkg.Name + "?", "Install app",  
   MessageBoxButton.OKCancel) == MessageBoxResult.OK)
  {
    try
    {
      var result =
        await InstallationManager.AddPackageAsync(pkg.Name, pkg.SourceUri);
      if (result.InstallState ==
        Windows.Management.Deployment.PackageInstallState.Installed)
      {
        MessageBox.Show(pkg.Name + " was installed.");
        App.ViewModel.UpdatePackageStatus();
        UpdateUI();
      }
      else
      {
        MessageBox.Show("An error occurred during installation.");
      }
    }
    catch (Exception)
    {
      MessageBox.Show("An error occurred during installation.");
    }
  }
}

Próximas Etapas

Neste artigo eu dei uma olhada rápida no desenvolvimento de uma empresa hub app ao expor os detalhes necessários para criar uma solução mais robusta. Alguns dos detalhes que foram omitidos em nome da brevidade podem ser encontrado no download incluído. No entanto, é importante lembrar que este é apenas o começo.

Há um monte de recursos que podem ser adicionados a um hub da empresa para proporcionar grandes benefícios para seus usuários, tais como tirando vantagem das telhas ao vivo para informar ao usuário quando novas aplicações estão disponíveis. Você pode criar soluções que expõem somente determinados apps para determinados usuários com base em suas funções dentro da empresa. Um aplicativo pode fornecer funcionalidade adicional, como notícias da empresa e notificações. Enquanto as possibilidades não podem ser ilimitadas, há mais do que suficiente para mantê-lo ocupado por algum tempo.

Tony Champion é presidente da DS campeão, é um Microsoft MVP e ativo na Comunidade como um alto-falante, blogueiro e autor. Ele mantém um blog em tonychampion.net e pode ser contatado via e-mail no tony@tonychampion.net.

AGRADECEMOS ao seguinte especialista técnico pela revisão deste artigo: Cliff Strom (Microsoft)