Notificações de Minhas Pessoas
Importante
Meu pessoal não tem mais suporte nas versões do Windows 11 e Windows 10 com KB5034203 aplicadas.
As notificações Minhas Pessoas fornecem uma nova maneira para os usuários se conectarem com as pessoas de quem gostam, por meio de gestos expressivos rápidos. Este artigo mostra como criar e implementar notificações Minhas Pessoas em seu aplicativo. Para obter implementações completas, consulte a Amostra de notificações de Minhas Pessoas.
Requisitos
- Windows 10 e Microsoft Visual Studio 2019 ou posterior. Para obter detalhes de instalação, consulte Configurar com o Visual Studio.
- Conhecimento básico de C# ou de uma linguagem de programação similar orientada a objeto. Para começar a usar o C#, consulte Criar um aplicativo "Olá, mundo"..
Como ele funciona
Como alternativa às notificações do sistema genéricas, agora você pode enviar notificações por meio do recurso Minhas Pessoas para fornecer uma experiência mais pessoal aos usuários. Esse é um novo tipo de notificação do sistema, enviado de um contato fixado na barra de tarefas do usuário com o recurso Minhas Pessoas. Quando a notificação for recebida, a imagem de contato do remetente será animada na barra de tarefas e um som será reproduzido, sinalizando que a notificação está sendo iniciada. A animação ou imagem especificada na carga útil será exibida por 5 segundos (ou, se a carga útil for uma animação com menos de 5 segundos, ela entrará em loop até que 5 segundos tenham passado).
Tipos de imagem suportados
- GIF
- Imagem estática (JPEG, PNG)
- Spritesheet (somente vertical)
Observação
Uma spritesheet é uma animação derivada de uma imagem estática (JPEG ou PNG). Os quadros individuais são organizados verticalmente, de modo que o primeiro quadro esteja na parte superior (embora você possa especificar um quadro inicial diferente na carga útil do sistema). Cada quadro deve ter a mesma altura, que o programa percorre para criar uma sequência animada (como um flipbook com suas páginas dispostas verticalmente). Um exemplo de uma spritesheet é mostrado abaixo.
Parâmetros de notificação
As notificações Minhas Pessoas usam a estrutura de notificação "toast", mas exigem um nó de vinculação adicional na carga do sistema. Essa segunda associação deve incluir o seguinte parâmetro:
experienceType="shoulderTap"
Isso indica que a notificação do sistema deve ser tratada como uma notificação de Minhas Pessoas.
O nó da imagem dentro da associação deve incluir os seguintes parâmetros:
- src
- O URI do ativo. Isso pode ser URIs HTTP/HTTPS Web, um URI MSAPPX ou um caminho para um arquivo local.
- spritesheet-src
- O URI do ativo. Isso pode ser URIs HTTP/HTTPS Web, um URI MSAPPX ou um caminho para um arquivo local. Necessário apenas para animações de spritesheet.
- spritesheet-height
- A altura do quadro (em pixels). Necessário apenas para animações de spritesheet.
- spritesheet-fps
- Quadros por segundo (FPS). Necessário apenas para animações de spritesheet. Somente valores de 1 a 120 são suportados.
- spritesheet-startingFrame
- O número do quadro para iniciar a animação. Usado somente para animações de spritesheet e o padrão é 0 se não for fornecido.
- alt
- Cadeia de texto usada para narração do leitor de tela.
Observação
Ao fazer uma notificação animada, você ainda deve especificar uma imagem estática no parâmetro "src". Ele será usado como fallback se a animação não for exibida.
Além disso, o nó do sistema de nível superior deve incluir o parâmetro hint-people para especificar o contato de envio. Esse parâmetro pode ter os seguintes valores:
- Endereço de email
- Por exemplo,
mailto:johndoe@mydomain.com
- Por exemplo,
- Telephone number
- Por exemplo, 888-888-8888
- ID remota
- Por exemplo, remoteid:1234
Observação
Se seu aplicativo usa as APIs ContactStore e as propriedades StoredContact.RemoteId para vincular contatos armazenados no computador com contatos armazenados remotamente, é essencial que o valor da propriedade RemoteId seja estável e exclusivo. Isso significa que a ID remota deve identificar consistentemente uma única conta de usuário e deve conter uma marca exclusiva para garantir que ela não entre em conflito com as IDs remotas de outros contatos no computador, incluindo contatos que pertencem a outros aplicativos. Se não for garantido que as IDs remotas usadas pelo seu aplicativo sejam estáveis e exclusivas, você poderá usar a classe RemoteIdHelper para adicionar uma marca exclusiva a todas as IDs remotas antes de adicioná-las ao sistema. De outro modo, você pode escolher não usar a propriedade RemoteId e, em vez disso, criar uma propriedade estendida personalizada para IDs remotas para seus contatos.
Além da segunda vinculação e da carga útil, você deve incluir outra carga na primeira vinculação para a notificação do sistema de fallback. A notificação usará isso se for forçada a reverter para uma notificação do sistema normal (explicada mais adiante no final deste artigo).
Criando a notificação
Você pode criar um modelo de notificação Minhas Pessoas da mesma forma que faria com uma notificação "toast".
Veja um exemplo de como criar uma notificação de Minhas Pessoas com uma carga de imagem estática:
<toast hint-people="mailto:johndoe@mydomain.com">
<visual lang="en-US">
<binding template="ToastGeneric">
<text hint-style="body">Toast fallback</text>
<text>Add your fallback toast content here</text>
</binding>
<binding template="ToastGeneric" experienceType="shoulderTap">
<image src="https://learn.microsoft.com/windows/uwp/contacts-and-calendar/images/shoulder-tap-static-payload.png"/>
</binding>
</visual>
</toast>
Quando você inicia a notificação, ela deve ter a seguinte aparência:
Este é um exemplo de como criar uma notificação com uma carga de spritesheet animada. Esta spritesheet tem uma altura de quadro de 80 pixels, que vamos animar a 25 quadros por segundo. Definimos o quadro inicial como 15 e fornecemos uma imagem de fallback estática no parâmetro "src". A imagem de fallback será usada se a animação spritesheet não for exibida.
<toast hint-people="mailto:johndoe@mydomain.com">
<visual lang="en-US">
<binding template="ToastGeneric">
<text hint-style="body">Toast fallback</text>
<text>Add your fallback toast content here</text>
</binding>
<binding template="ToastGeneric" experienceType="shoulderTap">
<image src="https://learn.microsoft.com/windows/uwp/contacts-and-calendar/images/shoulder-tap-pizza-static.png"
spritesheet-src="https://learn.microsoft.com/windows/uwp/contacts-and-calendar/images/shoulder-tap-pizza-spritesheet.png"
spritesheet-height='80' spritesheet-fps='25' spritesheet-startingFrame='15'/>
</binding>
</visual>
</toast>
Quando você inicia a notificação, ela deve ter a seguinte aparência:
Iniciando a notificação
Para iniciar uma notificação Minhas Pessoas, precisamos converter o modelo de notificação do sistema em um objeto XmlDocument. Depois de definir a notificação do sistema em um arquivo XML (aqui chamado "content.xml"), você pode usar este código para iniciá-lo:
string xmlText = File.ReadAllText("content.xml");
XmlDocument xmlContent = new XmlDocument();
xmlContent.LoadXml(xmlText);
Em seguida, você pode usar este código para criar e enviar a notificação do sistema:
ToastNotification notification = new ToastNotification(xmlContent);
ToastNotificationManager.CreateToastNotifier().Show(notification);
Voltando à notificação
Há alguns casos em que uma notificação Minhas Pessoas será exibida como uma notificação do sistema normal. Uma notificação Minhas Pessoas voltará à notificação do sistema nas seguintes condições:
- A notificação não é exibida
- As notificações Minhas Pessoas não são habilitadas pelo destinatário
- O contato do remetente não está fixado na barra de tarefas do destinatário
Se uma notificação Minhas Pessoas voltar à notificação do sistema, a segunda vinculação específica de Minhas Pessoas será ignorada e somente a primeira associação será usada para exibir a notificação do sistema. É por isso que é fundamental fornecer uma carga útil de fallback na primeira associação do sistema.