Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Você pode abrir um canal de URI (Identificador Uniforme de Recursos) no qual seu aplicativo pode receber notificações por push. Em seguida, você pode enviar o canal para o servidor que o usa para enviar notificações por push e fechá-lo quando não precisar mais dele. Um canal é um endereço exclusivo que representa um único usuário em um único dispositivo, para um aplicativo específico ou bloco secundário.
Você deve solicitar um novo canal sempre que o aplicativo for iniciado e atualizar o servidor de nuvem quando o URI for alterado. Para obter mais detalhes, consulte Comentários.
Important
Os canais de notificação expiram automaticamente após 30 dias.
O que você precisa saber
Technologies
- Tempo de Execução do Windows
Prerequisites
- Familiaridade com a notificação por push e conceitos, requisitos e operação dos Serviços de Notificação por Push do Windows (WNS). Elas são discutidas na visão geral dos Serviços de Notificação por Push do Windows (WNS) .
Instructions
Etapa 1: Adicionar declarações de namespace
Windows.UI.Notifications inclui as APIs do sistema.
using Windows.UI.Notifications;
using Windows.Data.Xml.Dom;
using Windows.Networking.PushNotifications;
Etapa 2: Solicitar um URI de canal
Este exemplo solicita um URI de canal. A solicitação é feita à Plataforma de Cliente de Notificação, que, por sua vez, solicita o URI do canal do WNS. Quando a solicitação é concluída, o valor retornado é um objeto PushNotificationChannel que contém o URI.
PushNotificationChannel channel = null;
try
{
channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
}
catch (Exception ex)
{
// Could not create a channel.
}
Etapa 3: Enviar o URI do canal para o servidor
O URI do canal é empacotado em uma solicitação HTTP POST e enviado para o servidor.
Important
Você deve enviar essas informações para o servidor de maneira segura. Você deve exigir que o aplicativo se autentique com o servidor quando ele transmitir o URI do canal. Criptografe as informações e use um protocolo seguro, como HTTPS.
String serverUrl = "http://www.contoso.com";
// Create the web request.
HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(serverUrl);
webRequest.Method = "POST";
webRequest.ContentType = "application/x-www-form-urlencoded";
byte[] channelUriInBytes = System.Text.Encoding.UTF8.GetBytes("ChannelUri=" + channel.Uri);
// Write the channel URI to the request stream.
Stream requestStream = await webRequest.GetRequestStreamAsync();
requestStream.Write(channelUriInBytes, 0, channelUriInBytes.Length);
try
{
// Get the response from the server.
WebResponse response = await webRequest.GetResponseAsync();
StreamReader requestReader = new StreamReader(response.GetResponseStream());
String webResponse = requestReader.ReadToEnd();
}
catch (Exception ex)
{
// Could not send channel URI to server.
}
Remarks
Requesting channels
Você deve solicitar um novo canal sempre que seu aplicativo for invocado usando a seguinte lógica:
- Solicite um canal.
- Compare o novo canal com o canal anterior. Se o canal for o mesmo, você não precisará executar nenhuma ação adicional. Observe que isso exige que seu aplicativo armazene o canal localmente sempre que o aplicativo o enviar com êxito para seu serviço, para que você tenha o canal para comparar posteriormente.
- Se o canal tiver sido alterado, envie o novo canal para seu serviço Web. Inclua a lógica de tratamento de erros que sempre envia um novo canal nos seguintes casos:
- Seu aplicativo nunca enviou um canal para o serviço Web antes.
- A última tentativa do aplicativo de enviar o canal para o serviço Web não foi bem-sucedida.
Chamadas diferentes para o método CreatePushNotificationChannelForApplicationAsync nem sempre retornam um canal diferente. Se o canal não tiver sido alterado desde a última chamada, seu aplicativo deverá conservar o esforço e o tráfego da Internet, não reenviando esse mesmo canal para seu serviço. Um aplicativo pode ter vários URIs de canal válidos ao mesmo tempo. Como cada canal exclusivo permanece válido até expirar, não há nenhum dano na solicitação de um novo canal porque ele não afeta o tempo de expiração de nenhum canais anterior.
Ao solicitar um novo canal sempre que seu aplicativo é invocado, você maximiza suas chances de sempre ter acesso a um canal válido. Isso é particularmente importante se for vital para o seu bloco ou cenário de sistema que o conteúdo esteja sempre ativo. Se você estiver preocupado que um usuário não possa executar seu aplicativo mais de uma vez a cada 30 dias, você poderá implementar uma tarefa em segundo plano para executar o código de solicitação de canal regularmente.
Gerenciando erros em solicitações de canal
A chamada para o método CreatePushNotificationChannelForApplicationAsync poderá falhar se a Internet não estiver disponível. Para lidar com isso, adicione lógica de repetição ao código mostrado na etapa 2. Recomendamos três tentativas com um atraso de 10 segundos entre cada tentativa malsucedida. Se todas as três tentativas falharem, seu aplicativo deverá aguardar até a próxima vez que o usuário iniciá-lo para tentar novamente.
Closing channels
Seu aplicativo pode interromper imediatamente a entrega de notificações em todos os canais chamando o método PushNotificationChannel.Close . Embora não seja comum que seu aplicativo faça isso, pode haver certos cenários em que você deseja interromper toda a entrega de notificação para seu aplicativo. Por exemplo, se seu aplicativo tiver o conceito de contas de usuário e um usuário fizer logoff desse aplicativo, é razoável esperar que o tile não mostre mais as informações pessoais desse usuário. Para limpar com êxito o bloco de conteúdo e interromper a entrega de notificações, faça o seguinte:
- Pare todas as atualizações de tile chamando o método PushNotificationChannel.Close em qualquer um dos canais de notificação que estão fornecendo tiles, notificações visuais, notificações de selos ou notificações em bruto para um usuário. Chamar o método Fechar garante que nenhuma notificação adicional para esse usuário possa ser entregue ao cliente.
- Limpe o conteúdo do bloco chamando o método TileUpdater.Clear para remover os dados do usuário anterior do bloco.
Windows developer