Visão geral de notificação de dados brutos
As notificações brutas são notificações por push curtas com finalidade geral. Elas são estritamente para instrução e não incluem componente de interface do usuário. Assim como acontece com outras notificações por push, o recurso WNS (Serviços de Notificação por Push do Windows) fornece notificações brutas do serviço de nuvem para o aplicativo.
Você pode usar notificações brutas para várias finalidades, inclusive para acionar seu aplicativo para executar uma tarefa em segundo plano se o usuário tiver dado permissão ao aplicativo para fazer isso. Usando o WNS para se comunicar com seu aplicativo, você pode evitar a sobrecarga de processamento de criar conexões de soquete persistentes, enviar mensagens HTTP GET e outras conexões de serviço para aplicativo.
Importante
Para entender as notificações brutas, é melhor estar familiarizado com os conceitos discutidos na visão geral do WNS (Serviços de Notificação por Push do Windows).
Assim como acontece com as notificações por push de brinde, bloco e notificação, uma notificação bruta é enviada por push do serviço de nuvem do aplicativo por um URI (Uniform Resource Identifier) de canal atribuído ao WNS. O WNS, por sua vez, entrega a notificação ao dispositivo e à conta de usuário associada a esse canal. Ao contrário de outras notificações por push, as notificações brutas não têm um formato especificado. O conteúdo da carga é totalmente definido pelo aplicativo.
Como ilustração de um aplicativo que pode se beneficiar de notificações brutas, vejamos um aplicativo teórico de colaboração de documentos. Considere dois usuários que estão editando o mesmo documento ao mesmo tempo. O serviço de nuvem, que hospeda o documento compartilhado, pode usar notificações brutas para notificar cada usuário quando as alterações são feitas pelo outro usuário. As notificações brutas não conteriam necessariamente as alterações no documento, mas sinalizariam a cópia de cada usuário do aplicativo para entrar em contato com o local central e sincronizar as alterações disponíveis. Usando notificações brutas, o aplicativo e seu serviço de nuvem podem economizar a sobrecarga de manter conexões persistentes durante todo o tempo em que o documento estiver aberto.
Como funcionam as notificações brutas
Todas as notificações brutas são notificações push. Portanto, a configuração necessária para enviar e receber notificações por push também se aplica a notificações brutas:
- Você deve ter um canal WNS válido para enviar notificações brutas. Para obter mais informações sobre como adquirir um canal de notificação por push, consulte Como solicitar, criar e salvar um canal de notificação.
- Você deve incluir o recurso Internet no manifesto do seu aplicativo. No editor de manifesto do Microsoft Visual Studio, você encontrará essa opção na guia Recursos como Internet (Cliente). Para saber mais, confira Funcionalidades.
O corpo da notificação está em um formato definido pelo aplicativo. O cliente recebe os dados como uma cadeia de caracteres terminada em nulo (HSTRING) que só precisa ser entendida pelo aplicativo.
Se o cliente estiver offline, as notificações brutas serão armazenadas em cache pelo WNS somente se o cabeçalho X-WNS-Cache-Policy estiver incluído na notificação. No entanto, apenas uma notificação bruta será armazenada em cache e entregue quando o dispositivo voltar a ficar online.
Há apenas três caminhos possíveis para uma notificação bruta assumir o cliente: eles serão entregues ao seu aplicativo em execução por meio de um evento de entrega de notificação, enviados para uma tarefa em segundo plano ou descartados. Portanto, se o cliente estiver offline e o WNS tentar entregar uma notificação bruta, a notificação será descartada.
Criando uma notificação bruta
O envio de uma notificação bruta é semelhante ao envio de uma notificação por push de bloco, notificação do sistema ou notificação, com estas diferenças:
- O cabeçalho HTTP Content-Type deve ser definido como "application/octet-stream".
- O cabeçalho HTTP X-WNS-Type deve ser definido como "wns/raw".
- O corpo da notificação pode conter qualquer carga de cadeia de caracteres menor que 5 KB de tamanho, mas não deve ser uma cadeia de caracteres vazia.
As notificações brutas devem ser usadas como mensagens curtas que disparam seu aplicativo para executar uma ação, como entrar em contato diretamente com o serviço para sincronizar uma quantidade maior de dados ou fazer uma modificação de estado local com base no conteúdo da notificação. Observe que as notificações por push do WNS não podem ser garantidas, portanto, seu aplicativo e serviço de nuvem devem levar em conta a possibilidade de que a notificação bruta possa não chegar ao cliente, como quando o cliente está offline.
Para obter mais informações sobre como enviar notificações por push, consulte Guia de início rápido: enviando uma notificação por push.
Recebendo uma notificação bruta
Há dois caminhos pelos quais seu aplicativo pode receber notificações brutas:
- Por meio de eventos de entrega de notificação enquanto seu aplicativo está em execução.
- Por meio de tarefas em segundo plano disparadas pela notificação bruta se o aplicativo estiver habilitado para executar tarefas em segundo plano.
Um aplicativo pode usar ambos os mecanismos para receber notificações brutas. Se um aplicativo implementar o manipulador de eventos de entrega de notificação e tarefas em segundo plano disparadas por notificações brutas, o evento de entrega de notificação terá prioridade quando o aplicativo estiver em execução.
- Se o aplicativo estiver em execução, o evento de entrega de notificação terá prioridade sobre a tarefa em segundo plano e o aplicativo terá a primeira oportunidade de processar a notificação.
- O manipulador de eventos de entrega de notificação pode especificar, definindo a propriedade PushNotificationReceivedEventArgs.Cancel do evento como true, que a notificação bruta não deve ser passada para sua tarefa em segundo plano depois que o manipulador for encerrado. Se a propriedade Cancel estiver definida como false ou não estiver definida (o valor padrão é false), a notificação bruta disparará a tarefa em segundo plano depois que o manipulador de eventos de entrega de notificação tiver feito seu trabalho.
Eventos de entrega de notificação
Seu aplicativo pode usar um evento de entrega de notificação (PushNotificationReceived) para receber notificações brutas enquanto o aplicativo está em uso. Quando o serviço de nuvem envia uma notificação bruta, o aplicativo em execução pode recebê-la manipulando o evento de entrega de notificação no URI do canal.
Se o aplicativo não estiver em execução e não usar tarefas em segundo plano), qualquer notificação bruta enviada a esse aplicativo será descartada pelo WNS no recebimento. Para evitar o desperdício de recursos do serviço de nuvem, você deve considerar a implementação da lógica no serviço para acompanhar se o aplicativo está ativo. Há duas fontes dessas informações: um aplicativo pode informar explicitamente ao serviço que ele está pronto para começar a receber notificações e o WNS pode informar ao serviço quando parar.
O aplicativo notifica o serviço de nuvem: o aplicativo pode entrar em contato com seu serviço para informar que o aplicativo está sendo executado em primeiro plano. A desvantagem dessa abordagem é que o aplicativo pode acabar entrando em contato com seu serviço com muita frequência. No entanto, tem a vantagem de que o serviço sempre saberá quando o aplicativo está pronto para receber notificações brutas recebidas. Outra vantagem é que, quando o aplicativo entra em contato com seu serviço, o serviço sabe enviar notificações brutas para a instância específica desse aplicativo, em vez de transmitir.
O serviço de nuvem responde às mensagens de resposta do WNS: seu serviço de aplicativo pode usar as informações X-WNS-NotificationStatus e X-WNS-DeviceConnectionStatus retornadas pelo WNS para determinar quando parar de enviar notificações brutas para o aplicativo. Quando seu serviço envia uma notificação para um canal como um HTTP POST, ele pode receber uma destas mensagens na resposta:
- X-WNS-NotificationStatus: dropped: Isso indica que a notificação não foi recebida pelo cliente. É uma suposição segura que a resposta descartada é causada pelo seu aplicativo não estar mais em primeiro plano no dispositivo do usuário.
- X-WNS-DeviceConnectionStatus: desconectado ou X-WNS-DeviceConnectionStatus: tempconnected: isso indica que o cliente Windows não tem mais uma conexão com o WNS. Observe que, para receber essa mensagem do WNS, você precisa solicitá-la definindo o cabeçalho X-WNS-RequestForStatus no HTTP POST da notificação.
O serviço de nuvem do seu aplicativo pode usar as informações nessas mensagens de status para interromper as tentativas de comunicação por meio de notificações brutas. O serviço pode retomar o envio de notificações brutas assim que for contatado pelo aplicativo, quando o aplicativo voltar para o primeiro plano.
Observe que você não deve confiar em X-WNS-NotificationStatus para determinar se a notificação foi entregue com êxito ao cliente.
Para obter mais informações, consulte Cabeçalhos de solicitação e resposta do serviço de notificação por push
Tarefas em segundo plano disparadas por notificações brutas
Importante
Antes de usar tarefas brutas em segundo plano de notificação, um aplicativo deve receber acesso em segundo plano por meio de BackgroundExecutionManager.RequestAccessAsync.
Sua tarefa em segundo plano deve ser registrada com um PushNotificationTrigger. Se não estiver registrado, a tarefa não será executada quando uma notificação bruta for recebida.
Uma tarefa em segundo plano disparada por uma notificação bruta permite que o serviço de nuvem do aplicativo entre em contato com seu aplicativo, mesmo quando o aplicativo não está em execução (embora possa disparar sua execução). Isso acontece sem que o aplicativo precise manter uma conexão contínua. As notificações brutas são o único tipo de notificação que pode disparar tarefas em segundo plano. No entanto, embora as notificações por push de notificação do sistema, bloco e notificação não possam disparar tarefas em segundo plano, as tarefas em segundo plano disparadas por notificações brutas podem atualizar blocos e invocar notificações do sistema por meio de chamadas de API locais.
Como ilustração de como funcionam as tarefas em segundo plano acionadas por notificações brutas, vamos considerar um aplicativo usado para ler e-books. Primeiro, um usuário compra um livro online, possivelmente em outro dispositivo. Em resposta, o serviço de nuvem do aplicativo pode enviar uma notificação bruta para cada um dos dispositivos do usuário, com uma carga útil que informa que o livro foi comprado e o aplicativo deve baixá-lo. Em seguida, o aplicativo entra em contato diretamente com o serviço de nuvem do aplicativo para iniciar um download em segundo plano do novo livro para que, posteriormente, quando o usuário iniciar o aplicativo, o livro já esteja lá e pronto para leitura.
Para usar uma notificação bruta para disparar uma tarefa em segundo plano, seu aplicativo deve:
- Solicite permissão para executar tarefas em segundo plano (que o usuário pode revogar a qualquer momento) usando BackgroundExecutionManager.RequestAccessAsync.
- Implemente a tarefa em segundo plano. Para obter mais informações, consulte Dar suporte ao seu aplicativo com tarefas em segundo plano
Sua tarefa em segundo plano é invocada em resposta ao PushNotificationTrigger, sempre que uma notificação bruta é recebida para seu aplicativo. Sua tarefa em segundo plano interpreta a carga útil específica do aplicativo da notificação bruta e age sobre ela.
Para cada aplicativo, apenas uma tarefa em segundo plano pode ser executada por vez. Se uma tarefa em segundo plano for disparada para um aplicativo para o qual uma tarefa em segundo plano já está em execução, a primeira tarefa em segundo plano deverá ser concluída antes que a nova seja executada.
Outros recursos
Você pode saber mais baixando o exemplo de notificações brutas para Windows 8.1 e o exemplo de notificações por push e periódicas para Windows 8.1 e reutilizando seu código-fonte em seu aplicativo Windows 10.
Tópicos relacionados
- Diretrizes para notificações brutas
- Guia de início rápido: criando e registrando uma tarefa em segundo plano de notificação bruta
- Guia de início rápido: interceptando notificações por push para aplicativos em execução
- RawNotification
- BackgroundExecutionManager.RequestAccessAsync
Windows developer