Compartilhar via


Aplicativos de quiosque para acesso atribuído: práticas recomendadas

No Windows 10, você pode usar o acesso atribuído para criar um dispositivo de quiosque, que permite que os usuários interajam com apenas um único aplicativo Universal do Windows. Este artigo descreve como implementar um aplicativo de quiosque e as práticas recomendadas.

Há duas experiências diferentes que o acesso atribuído fornece:

  1. A experiência de quiosque de aplicativo único

    Atribua um aplicativo a uma conta. Quando um usuário faz login, ele terá acesso apenas a este aplicativo e nada mais no sistema. Durante esse tempo, o dispositivo do quiosque é bloqueado, com o aplicativo do quiosque sendo executado acima da tela de bloqueio. Essa experiência é frequentemente usada para máquinas de quiosque voltadas para o público. consulte Configurar um quiosque no Windows 10 Pro, Enterprise ou Education para obter mais informações.

  2. A experiência de quiosque de vários aplicativos (disponível no Windows 10, versão 1709 e posterior)

    Você pode atribuir um ou mais aplicativos a uma conta. Quando um usuário faz logon, o dispositivo é iniciado em uma experiência de shell restrita com acesso apenas aos aplicativos selecionados. Consulte Criar um quiosque do Windows 10 que executa vários aplicativos para obter mais informações.

Este artigo descreve apenas a experiência de quiosque de aplicativo único. Na experiência de vários aplicativos, os aplicativos selecionados são executados em um contexto de área de trabalho regular e não exigem manipulação ou modificação especial.

Termos

Termo Descrição
Acesso atribuído Um recurso que permite que um administrador do sistema gerencie a experiência do usuário limitando os pontos de entrada do aplicativo expostos ao usuário do dispositivo. Por exemplo, você pode restringir os clientes da sua empresa a usar um aplicativo para que seu computador funcione como um quiosque. Sempre que alguém entrar com a conta especificada, só poderá usar esse aplicativo. Eles não poderão alternar ou fechar o aplicativo usando gestos de toque, mouse, teclado ou botões de hardware. Eles também não verão nenhuma notificação do aplicativo.
aplicativo de tela de bloqueio (ou aplicativo de bloqueio) Um aplicativo que aproveita a capacidade de definir um papel de parede dinâmico ou que aproveita a nova estrutura de extensibilidade de bloqueio.
aplicativo de tela de bloqueio acima (ou aplicativo de bloqueio acima) Um aplicativo que é iniciado acima da tela de bloqueio enquanto o aplicativo da tela de bloqueio está em execução (por exemplo, quando a área de trabalho está bloqueada).
em Bloquear aplicativo Um aplicativo que é executado normalmente, em um contexto desbloqueado do Windows.
LockApplicationHost Uma classe WinRT que permite que os aplicativos da tela de bloqueio acima solicitem que o dispositivo seja desbloqueado e permite que o aplicativo se registre para ser notificado quando o dispositivo começar a desbloquear.
Modo de Exibição ou Exibição do Aplicativo Cada modo de exibição é uma janela separada para o aplicativo. Um aplicativo pode ter uma exibição principal e criar várias exibições secundárias sob demanda. Consulte ApplicationView para obter mais informações.

A extensão windows.aboveLockScreen

O acesso atribuído no Windows 10 usa a estrutura de bloqueio. Quando um usuário de acesso atribuído faz logon, uma tarefa em segundo plano bloqueia a área de trabalho e inicia o aplicativo de quiosque acima do bloqueio. O comportamento do aplicativo pode ser diferente, dependendo se ele usa a extensão windows.aboveLockScreen.

O uso de windows.aboveLockScreen permite que seu aplicativo de quiosque acesse a classe de tempo de execução LockApplicationHost, o que permite que o aplicativo saiba quando está sendo executado acima do bloqueio (e, portanto, executado como uma experiência de quiosque). Se uma instância não puder ser retornada, o aplicativo será executado em um contexto de área de trabalho regular.

Quando a estrutura de bloqueio inicia o aplicativo de quiosque acima do bloqueio e o aplicativo tem a extensão windows.aboveLockScreen , a estrutura de bloqueio cria automaticamente uma nova exibição secundária acima do bloqueio. A vista principal está localizada sob a fechadura. Esse modo de exibição secundário contém o conteúdo do seu aplicativo e é o que o usuário vê. Essa visualização adicional pode ser usada com a extensão para personalizar sua experiência de quiosque. Por exemplo, você pode:

  • Proteja sua experiência de quiosque criando uma página separada para exibir conteúdo somente de quiosque.

  • Chame o método LockApplicationHost.RequestUnlock() do seu aplicativo para Adicionar uma saída do modo Acesso Atribuído e volte para a tela de login.

  • Adicione um manipulador de eventos ao evento *LockApplicationHost.Unlocking que é acionado quando um usuário pressiona Ctrl+Alt+Del para sair da experiência de quiosque. O manipulador também pode ser usado para salvar quaisquer dados antes de sair.

Se o aplicativo não tiver a extensão windows.aboveLockScreen , nenhum modo de exibição secundário será criado e o aplicativo será iniciado como se estivesse sendo executado normalmente. Além disso, como o aplicativo não terá acesso a uma instância de LockApplicationHost, ele não poderá determinar se está sendo executado em um contexto regular ou para uma experiência de quiosque. Não incluir a extensão tem benefícios, como ser capaz de suportar vários monitores

Independentemente de seu aplicativo usar a extensão, certifique-se de proteger seus dados. Consulte as diretrizes para aplicativos de acesso atribuídos para obter mais informações.

A partir do Windows 10, versão 1607, não há mais uma restrição na extensão da Plataforma Universal do Windows (UWP), portanto, a maioria dos aplicativos pode ser mostrada em Configurações quando o usuário configura o acesso atribuído.

Práticas recomendadas

Esta seção se aplica a um aplicativo de quiosque que usa a extensão windows.aboveLockScreen .

Proteja suas informações

Se o aplicativo de quiosque for executado tanto acima do bloqueio no acesso atribuído quanto no contexto desbloqueado do Windows, convém criar uma página diferente para renderizar acima do bloqueio e outra página para sob o bloqueio. Isso permite que você evite mostrar informações confidenciais no modo quiosque, já que o modo quiosque geralmente significa acesso anônimo. Aqui estão as etapas que você seguiria para usar duas páginas diferentes, uma para baixo do bloqueio e outra para acima do bloqueio:

  1. Dentro da substituição da função OnLaunched no App.xaml.cs, tente obter uma instância da classe LockApplicationHost antes da navegação rootFrame.

  2. Se a chamada falhar, o aplicativo de quiosque deve ser iniciado normalmente, sob o bloqueio.

  3. Se a chamada for bem-sucedida, o aplicativo de quiosque deve ser iniciado acima do cadeado em execução no modo de acesso atribuído. Você pode querer que esta versão do aplicativo de quiosque tenha uma página principal diferente para ocultar informações confidenciais.

O exemplo a seguir demonstra como fazer isso. AssignedAccessPage.xaml é predefinido e o aplicativo navega até AssignedAccessPage.xaml quando detecta que está sendo executado no modo de bloqueio acima. Como resultado, a página normal seria exibida somente no cenário de bloqueio.

Você pode usar esse método para determinar se o aplicativo está sendo executado acima da tela de bloqueio a qualquer momento no ciclo de vida do aplicativo e reagir de acordo.

using Windows.ApplicationModel.LockScreen;

// inside the override OnLaunched function in App.xaml.cs

if (rootFrame.Content == null)
{
    LockApplicationHost host = LockApplicationHost.GetForCurrentView();
    if (host == null)
    {
        // if call to LockApplicationHost is null, this app is running under lock
        // render MainPage normally
        rootFrame.Navigate(typeof(MainPage), e.Arguments);
    }
    else
    {
        // If LockApplicationHost was successfully obtained
        // this app is running as a lock screen app, or above lock screen app
        // render a different page for assigned access use
        // to avoid showing regular main page to keep secure information safe
        rootFrame.Navigate(typeof(AssignedAccessPage), e.Arguments);
    }
}

Vários modos de exibição, janelas e threads

A partir do Windows 10, versão 1803, há suporte para vários modos de exibição na experiência de quiosque para aplicativos que não têm a extensão windows.aboveLockScreen . Para usar vários modos de exibição, verifique se a opção Vários monitores do dispositivo de quiosque está definida como Estender esses monitores.

Quando um aplicativo com várias exibições (e sem windows.aboveLockScreen) é iniciado durante uma experiência de quiosque, a exibição principal do aplicativo será renderizada no primeiro monitor. Se um novo modo de exibição for criado pelo aplicativo usando CreateNewView(), ele será renderizado no segundo monitor. Se o aplicativo criar outro modo de exibição, ele irá para o terceiro monitor e assim por diante.

Importante

Os dispositivos de quiosque só podem exibir uma exibição por monitor. Por exemplo, se o dispositivo de quiosque tiver apenas um monitor, ele sempre mostrará a exibição principal do aplicativo de quiosque. Novos modos de exibição criados pelo aplicativo não serão exibidos.

Quando um aplicativo de quiosque tem a extensão windows.aboveLockScreen e está sendo executado acima do bloqueio, ele é inicializado de forma diferente. Sua vista principal está localizada sob a fechadura, com uma vista secundária acima dela. Essa exibição secundária é o que o usuário vê. Mesmo que você não crie explicitamente novos modos de exibição, ainda terá dois modos de exibição na instância do aplicativo.

ordem z para exibições quando o aplicativo está sendo executado no modo de bloqueio.

Você pode executar o código a seguir na janela principal do seu aplicativo (no modo de acesso atribuído) para ver a contagem de exibição e se a tela atual é a exibição principal.

using Windows.ApplicationModel.Core;

CoreApplication.GetCurrentView().IsMain //false
CoreApplication.Views.Count //2

Despachante

Cada vista ou janela tem seu próprio despachante. Como o modo de exibição principal está oculto para o usuário, use GetCurrentView() para acessar o modo de exibição secundário do aplicativo em execução acima do cadeado em vez de MainView().

using Windows.ApplicationModel.Core;

private async void Button_Click(object sender, RoutedEventArgs e)
{
    button.IsEnabled = false;

    // start a background task and update UI periodically (every 1 second)
    // using MainView dispatcher in below code will end up with app crash
    // in assigned access mode, use GetCurrentView().Dispatcher instead
    await CoreApplication.GetCurrentView().Dispatcher.RunAsync(
        CoreDispatcherPriority.Normal,
        async () =>
        {
            for (int i = 0; i < 60; ++i)
            {
                // do some background work, here we use Task.Delay to sleep
                await Task.Delay(1000);
                // update UI
                textBlock1.Text = "   " + i.ToString();
            }
            button.IsEnabled = true;
        });
}

Quando o aplicativo tiver windows.aboveLockScreen e for executado como uma experiência de quiosque, a criação de novos modos de exibição causará uma exceção dentro do aplicativo:

Windows.ApplicationModel.Core.CoreApplication.CreateNewView(); //causes exception

Devido a isso, você não pode ter várias exibições ou executar em vários monitores. Se o seu aplicativo precisar oferecer suporte a qualquer um deles, você precisará remover a extensão windows.aboveLockScreen do seu aplicativo.

Adicionar uma saída para o acesso atribuído

Em algumas situações, o botão liga/desliga, o botão de escape ou outros botões usados para parar um aplicativo podem não estar habilitados ou disponíveis no teclado. Nessas situações, forneça uma maneira de interromper o acesso atribuído, por exemplo, uma chave de software. O manipulador de eventos a seguir mostra como interromper o modo de acesso atribuído respondendo ao evento de seleção de botão que pode ser acionado por uma chave de software.

LockApplicationHost^ lockHost = LockApplicationHost::GetForCurrentView();
    if (lockHost != nullptr)
    {
        lockHost->RequestUnlock();
    }

Gerenciamento do ciclo de vida

O ciclo de vida de um aplicativo de quiosque é tratado pela estrutura de acesso atribuída. Se o aplicativo terminar inesperadamente, a estrutura tentará reiniciá-lo. Se, no entanto, um usuário pressionar Ctrl+Alt+Del para abrir a tela de login, um evento de desbloqueio será acionado. A estrutura de acesso atribuída escuta o evento e tentará encerrar o aplicativo.

Seu aplicativo de quiosque também pode registrar um manipulador para esse evento e executar ações antes de sair. Salvar todos os dados é um exemplo disso. Consulte o código abaixo para obter um exemplo de registro de um manipulador.

using Windows.ApplicationModel.LockScreen;

public AssignedAccessPage()
{
    this.InitializeComponent();

    LockApplicationHost lockHost = LockApplicationHost.GetForCurrentView();
    if (lockHost != null)
    {
        lockHost.Unlocking += LockHost_Unlocking;
}
}

private void LockHost_Unlocking(LockApplicationHost sender, LockScreenUnlockingEventArgs args)
{
    // save any unsaved work and gracefully exit the app
    App.Current.Exit();
}

Depois que o usuário pressionar Ctrl+Alt+Del e uma tela de login for exibida, duas coisas podem acontecer:

  1. O usuário sabe a senha da conta de acesso atribuída e desbloqueia a área de trabalho. A estrutura de acesso atribuída é iniciada, bloqueia a área de trabalho e o aplicativo da tela de bloqueio é iniciado que, por sua vez, inicia o aplicativo de quiosque.

  2. O usuário não sabe a senha ou não toma nenhuma ação adicional. A tela de login expira e a área de trabalho rebloqueia; O aplicativo da tela de bloqueio é iniciado que, por sua vez, inicia o aplicativo do quiosque.

Não crie novas janelas ou exibições no modo de acesso atribuído

A chamada de função a seguir termina com uma exceção de tempo de execução se for chamada no modo de acesso atribuído. Se o mesmo aplicativo, quando usado sob bloqueio, chamar a função, ele não causará uma exceção de tempo de execução. É útil usar LockApplicationHost para determinar o modo de acesso atribuído ao aplicativo e codificar seu aplicativo de acordo, como não criar novos modos de exibição se o aplicativo estiver no modo de acesso atribuído.

Windows.ApplicationModel.Core.CoreApplication.CreateNewView(); //causes exception

Apêndice 1: Extensão UWP

O manifesto de aplicativo de exemplo a seguir usa a extensão UWP windows.aboveLockScreen.

A partir do Windows 10, versão 1607, não há mais uma restrição na extensão da Plataforma Universal do Windows (UWP), portanto, a maioria dos aplicativos pode ser mostrada em Configurações quando o usuário configura o acesso atribuído.

<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp">
  <Identity Name="bd4df68b-dc18-4748-a14e-bc21dac13736" Publisher="Contoso" Version="1.0.0.0" />
  <mp:PhoneIdentity PhoneProductId="bd4df68b-dc18-4748-a14e-bc21dac13736" PhonePublisherId="00000000-0000-0000-0000-000000000000" />
  <Properties>
    <DisplayName>AboveLock</DisplayName>
    <PublisherDisplayName>Contoso</PublisherDisplayName>
    <Logo>Assets\StoreLogo.png</Logo>
  </Properties>
  <Dependencies>
    <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
  </Dependencies>
  <Resources>
    <Resource Language="x-generate" />
  </Resources>
  <Applications>
    <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="AboveLock.App">
      <uap:VisualElements DisplayName="AboveLock" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="AboveLock" BackgroundColor="transparent">
        <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png">
        </uap:DefaultTile>
        <uap:SplashScreen Image="Assets\SplashScreen.png" />
      </uap:VisualElements>
      <Extensions>
        <uap:Extension Category="windows.lockScreenCall" />
        <uap:Extension Category="windows.aboveLockScreen" />
      </Extensions>
    </Application>
  </Applications>
  <Capabilities>
    <Capability Name="internetClient" />
  </Capabilities>
</Package>

Apêndice 2: Solução de problemas

Normalmente, se um aplicativo de quiosque não for ativado acima do aplicativo da tela de bloqueio, você poderá encontrar o código de erro de ativação na tela de bloqueio. Use o código de erro para descobrir o problema pesquisando Códigos de erro do sistema Windows. Além disso, o Visualizador de Eventos contém mais informações sobre falhas de ativação. Para fazer isso:

  1. Abra o Visualizador de Eventos. Há dois lugares prováveis para encontrar erros de ativação.

  2. No painel Visualizador de Eventos (Local), expanda Logs do Windows e selecione Aplicativo.

  3. Além disso, no Visualizador de Eventos (local), expanda Logs de Aplicativos e Serviços, expanda Windows, expanda Aplicativos e selecione Microsoft-Windows-TWinUI/Operational.

Como os aplicativos de quiosque com acesso atribuído não são executados no modo de tela inteira, ApplicationView.GetForCurrentView(). IsFullScreenMode retorna false.

Acesso atribuído

Mostrar vários modos de exibição para um aplicativo