Notificações de Minhas PessoasMy People notifications

As notificações de Minhas Pessoas oferecem uma nova maneira para os usuários se conectarem com as pessoas importantes para eles por meio de gestos expressivos rápidos.My People notifications provide a new way for users to connect with the people they care about, through quick expressive gestures. Este artigo mostra como projetar e implementar as notificações de Minhas Pessoas no aplicativo.This article shows how to design and implement My People notifications in your application. Para implementações completas, consulte o Exemplo de notificações de Minhas Pessoas.For complete implementations, see the My People Notifications Sample.

notificação de emoji de coração

RequisitosRequirements

Como ele funcionaHow it works

Como uma alternativa para as notificações genéricas do sistema, agora você pode enviar notificações por meio do recurso Minhas Pessoas, para oferecer uma experiência mais pessoal aos usuários.As an alternative to generic toast notifications, you can now send notifications through the My People feature to provide a more personal experience to users. 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.This is a new kind of toast, sent from a contact pinned on the user's taskbar with the My People feature. Quando a notificação for recebida, a imagem do contato remetente será animada na barra de tarefas e um som será reproduzido, indicando que a notificação está iniciando.When the notification is received, the sender’s contact picture will animate in the taskbar and a sound will play, signaling that the notification is starting. A animação ou imagem especificada no conteúdo será exibida por 5 segundos (ou se o conteúdo for uma animação que dura menos de 5 segundos, ela será exibida em loop até se passarem 5 segundos).The animation or image specified in the payload will be displayed for 5 seconds (or, if the payload is an animation less than 5 seconds long, it will loop until 5 seconds have passed).

Tipos de imagem com suporteSupported image types

  • GIFGIF
  • Imagem estática (JPEG, PNG)Static Image (JPEG, PNG)
  • Spritesheet (somente vertical)Spritesheet (vertical only)

Observação

Spritesheet é uma animação derivada de uma imagem estática (JPEG ou PNG).A spritesheet is an animation derived from a static image (JPEG or PNG). Quadros individuais são organizados verticalmente, de forma que o primeiro quadro fique na parte superior (no entanto, você pode especificar um quadro inicial diferente no conteúdo da notificação do sistema).Individual frames are arranged vertically, such that the first frame is on top (though you can specify a different starting frame in the toast payload). Todos os quadros devem ter a mesma altura, que o programa transforma em loop para criar uma sequência animada (como um flipbook com suas páginas dispostas na vertical).Each frame must have the same height, which the program loops through to create an animated sequence (like a flipbook with its pages laid out vertically). Um exemplo de spritesheet é mostrado abaixo.An example of a spritesheet is shown below.

spritesheet de arco-íris

Parâmetros de notificaçãoNotification parameters

As notificações de Minhas Pessoas usam a estrutura de notificação do sistema, mas exigem um nó de associação adicional no conteúdo da notificação do sistema.My People notifications use the toast notification framework, but require an additional binding node in the toast payload. Essa segunda associação deve incluir o seguinte parâmetro:This second binding must include the following parameter:

experienceType="shoulderTap"

Isso indica que a notificação do sistema deve ser tratada como uma notificação de Minhas Pessoas.This indicates that the toast should be treated as a My People notification.

O nó da imagem na associação deve incluir os seguintes parâmetros:The image node inside the binding should include the following parameters:

  • srcsrc
    • O URI do ativo.The URI of the asset. Isso pode ser um URI HTTP/HTTPS da Web, um URI msappx ou um caminho para um arquivo local.This can be either HTTP/HTTPS web URI, an msappx URI, or a path to a local file.
  • spritesheet-srcspritesheet-src
    • O URI do ativo.The URI of the asset. Isso pode ser um URI HTTP/HTTPS da Web, um URI msappx ou um caminho para um arquivo local.This can be either HTTP/HTTPS web URI, an msappx URI, or a path to a local file. Só é necessário para animações em spritesheet.Only required for spritesheet animations.
  • spritesheet-heightspritesheet-height
    • A altura do quadro (em pixels).The frame height (in pixels). Só é necessário para animações em spritesheet.Only required for spritesheet animations.
  • spritesheet-fpsspritesheet-fps
    • Quadros por segundo (FPS).Frames per second (FPS). Só é necessário para animações em spritesheet.Only required for spritesheet animations. Somente valores de 1 a 120 têm suporte.Only values 1-120 are supported.
  • spritesheet-startingFramespritesheet-startingFrame
    • O número do quadro para iniciar a animação.The frame number to begin the animation. Somente usado para animações em spritesheet, e o padrão será 0 se não especificado.Only used for spritesheet animations and defaults to 0 if not provided.
  • altalt
    • Cadeia de texto usada para narração do leitor de tela.Text string used for screen reader narration.

Observação

Ao fazer uma notificação animada, você ainda deve especificar uma imagem estática no parâmetro "src".When making an animated notification, you should still specify a static image in the "src" parameter. Ela será usada como um fallback se a animação não for exibida.It will be used as a fall-back if the animation fails to display.

Além disso, o nó de nível superior da notificação do sistema deve incluir o parâmetro hint-people para especificar o contato remetente.In addition, the top-level toast node must include the hint-people parameter to specify the sending contact. Esse parâmetro pode ter qualquer um dos seguintes valores:This parameter can have any the following values:

  • Endereço de emailEmail address
    • Por ex.:E.g. mailto:johndoe@mydomain.com
  • Número de telefoneTelephone number
    • Por ex.:E.g. tel:888-888-8888tel:888-888-8888
  • ID remotaRemote ID
    • Por ex.:E.g. remoteid:1234remoteid:1234

Observação

Se seu app utiliza as APIs de ContactStore e utiliza a propriedade StoredContact.RemoteId para associar contatos armazenados no computador com contatos armazenados remotamente, é fundamental que o valor para a propriedade RemoteId seja estável e exclusivo.If your app uses the ContactStore APIs and uses the StoredContact.RemoteId property to link contacts stored on the PC with contacts stored remotely, it is essential that the value for the RemoteId property is both stable and unique. Isso significa que a ID remota deve identificar de modo consistente uma única conta de usuário e deve manter uma única marca para garantir que ela não entrará em conflito com as IDs remotas de outros contatos no computador, incluindo contatos que são de propriedade de outros apps.This means that the remote ID must consistently identify a single user account, and should contain a unique tag to guarantee that it does not conflict with the remote IDs of other contacts on the PC, including contacts that are owned by other apps. Se as IDs remotas usadas por seu app não forem com certeza 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.If the remote IDs used by your app are not guaranteed to be stable and unique, you can use the RemoteIdHelper class in order to add a unique tag to all of your remote IDs before you add them to the system. Como alternativa, você pode optar por não usar a propriedade RemoteId e criar uma propriedade estendida personalizada na qual armazenará as IDs remotas de seus contatos.Alternatively, you can choose to not use the RemoteId property at all, and instead create a custom extended property in which to store remote IDs for your contacts.

Além da segunda associação e conteúdo, você deve incluir outra conteúdo na primeira associação para a notificação do sistema de fallback.In addition to the second binding and payload, you must include another payload in the first binding for the fallback toast. A notificação usará isso se precisar voltar a ser uma notificação do sistema regular (esse assunto será abordado em detalhes no final deste artigo).The notification will use this if it is forced to revert to a regular toast (explained further at the end of this article).

Criando a notificaçãoCreating the notification

Você pode criar um modelo de notificação de Minhas Pessoas exatamente como faria com uma notificação do sistema.You can create a My People notification template just like you would a toast notification.

Este é um exemplo de como criar uma notificação de Minhas Pessoas com um conteúdo de imagem estática:Here's an example of how to create a My People notification with a static image payload:

<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://docs.microsoft.com/windows/uwp/contacts-and-calendar/images/shoulder-tap-static-payload.png"/>
        </binding>
    </visual>
</toast>

Quando você iniciar a notificação, ela terá a seguinte aparência:When you start the notification, it should look like this:

notificação de imagem estática

Este é um exemplo de como criar uma notificação com um conteúdo de spritesheet animada.Here's an example of how to create a notification with an animated spritesheet payload. Esta spritesheet tem uma altura de quadro de 80 pixels, que animaremos em 25 quadros por segundo.This spritesheet has a frame-height of 80 pixels, which we'll animate at 25 frames per second. Definimos o quadro inicial para 15 e fornecemos a ele uma imagem estática de fallback no parâmetro "src".We set the starting frame to 15 and provide it with a static fallback image in the “src” parameter. A imagem de fallback será usada se a animação em spritesheet não for exibida.The fallback image is used if the spritesheet animation fails to display.

<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://docs.microsoft.com/windows/uwp/contacts-and-calendar/images/shoulder-tap-pizza-static.png"
                spritesheet-src="https://docs.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ê iniciar a notificação, ela terá a seguinte aparência:When you start the notification, it should look like this:

notificação em spritesheet

Iniciando a notificaçãoStarting the notification

Para iniciar uma notificação de Minhas Pessoas, precisamos converter o modelo de notificação do sistema em um objeto XmlDocument.To start a My People notification, we need to convert the toast template into an XmlDocument object. Quando você tiver definido a notificação do sistema em um arquivo XML (denominado "content.xml"), poderá usar este código para iniciá-la:When you have defined the toast in an XML file (here named "content.xml"), you can use this code to start it:

string xmlText = File.ReadAllText("content.xml");
XmlDocument xmlContent = new XmlDocument();
xmlContent.LoadXml(xmlText);

Depois, você pode usar este código para criar e enviar a notificação do sistema:You can then use this code to create and send the toast:

ToastNotification notification = new ToastNotification(xmlContent);
ToastNotificationManager.CreateToastNotifier().Show(notification);

Fazendo o fallback para notificação do sistemaFalling back to toast

Haverá casos em que uma notificação de Minhas Pessoas será exibida como uma notificação comum do sistema.There are some cases when a My People notification will instead display as a regular toast notification. Uma notificação de Minhas Pessoas fará fallback para a notificação do sistema nas seguintes condições:A My People notification will fall back to toast under the following conditions:

  • Falha na exibição da notificaçãoThe notification fails to display
  • Notificações de Minhas Pessoas não habilitadas pelo destinatárioMy People notifications are not enabled by the recipient
  • O contato do remetente não está fixado na barra de tarefas do destinatárioThe sender’s contact is not pinned to the receiver’s taskbar

Se uma notificação de Minhas Pessoas fizer fallback para a notificação do sistema, a segunda associação específica de Minhas Pessoas será ignorada, e somente a primeira associação será usada para exibir a notificação do sistema.If a My People notification falls back to toast, the second My-People-specific binding is ignored, and only the first binding is used to display the toast. É por isso que é fundamental fornecer um conteúdo de fallback na primeira associação de notificação do sistema.This is why it is critical to provide a fallback payload in the first toast binding.

Veja tambémSee also