Na semana passada, nosso post abordou Tecnologia Push em sistemas iOS e Windows Phone. Para darmos continuidade, essa semana vamos conhecer como funcionam as notificações de push no novo sistema operacional mobile da Microsoft, o Windows Phone.
Vamos dar uma passada por todo o ciclo dessa infraestrutura!
Pré-requisitos e Infraestrutura
As notificações de push no Windows Phone podem ser testadas no emulador, dispensando a aquisição de uma licença de desenvolvedor. Entretanto, para uso no dispositivo, é necessário realizar o processo de cadastramento do aparelho no APP HUB da Microsoft. Nesse momento, focaremos nosso exemplo no uso do emulador.
Com esse cenário, também será necessário um servidor ou provider como citado na parte 1 desse post [veja o post], aqui chamado de cloud service.
No Windows Phone, o processo de comunicação entre cloud service e MPNS é bem mais simples. A conexão com o servidor de notificações da Microsoft é feita via HTTP.
Diferentemente do iOS, na plataforma da Microsoft, o cloud service não precisará de um certificado para estabelecer a conexão com o MPNS.
O processo básico desse cenário é o seguinte:
- No dispositivo, a aplicação com notificações de push ativado estabelece uma conexão com o MPNS via HTTP e recebe um token. (etapas 1 e 2)
- Esse token será informado pelo dispositivo ao cloud service. Uma vez atualizado o token no cloud service, o ciclo está completo e as notificações de PUSH podem ser enviadas.
(etapas 3 e 4) - O cloud service envia as notificações de push para o MPNS e esse, por sua vez, analisa o token e encaminha para o respectivo dispositivo. No dispositivo interpreta-se a notificação e toma as ações desejadas.
(etapas 5 e 6)
Na estrutura desse token existe o endereço para o qual o cloud service deverá fazer a requisição HTTP e o identificador do dispositivo.
Existem três tipos de notificações que podem ser enviadas ao dispositivo, cada uma com sua finalidade específica.
São elas RAW, TILE e TOAST.
TILE MESSAGE:
São usadas para atualizar informações de aplicações que estão em PIN (na área de trabalho) do dispositivo. Pode-se atualizar a imagem ou valores da TILE.
Vamos exemplificar com uma aplicação para leitura de RSS. Toda vez que novas notícias estão disponíveis a aplicação pode atualizar a TILE via notificações de push, mostrando quantas novas existem.
Não nos aprofundaremos nesse tipo de mensagem pois vamos dar foco à TOAST MESSAGE.
RAW MESSAGE:
Mensagens que chegam silenciosamente ao dispositivo. Imperceptível ao usuário, só será processada se a aplicação estiver em execução, caso contrário é descartada.
TOAST MESSAGE:
Se a sua aplicação não está em execução, será exibida uma mensagem de alerta no topo da tela do dispositivo informando o recebimento da notificação. O usuário pode tocar na alert bar para que a aplicação seja executada e a notificação processada.
Caso transcorram alguns segundos sem que o usuário toque na alert bar, a notificação será descartada.
Se a aplicação já estiver em execução, a notificação é recebida sem o alerta na alert bar e é imediatamente processada sem necessidade de intervenção do usuário.
Abaixo segue trecho do método responsável pela construção da mensagem e envio:
...
//token recebido anteriormente na abertura do canal do dispositivo com MPNS
string subscriptionUrl = _token;
//criando mensagem associando ao token
HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(subscriptionUrl);
//cabeçalho da mensagem
sendNotificationRequest.Method = "POST";
sendNotificationRequest.ContentType = "text/xml";
byte[] notificationMessage = new byte[] { };
//chamada do método que constrói mensagem do tipo TOAST
notificationMessage = TOASTMESSAGE(_text1, _text2);
//solicita entrega imediata
sendNotificationRequest.Headers.Add("X-NotificationClass", "2");
//informa o tipo de notificação
sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "toast");
//informa tamanho da mensagem
sendNotificationRequest.ContentLength = notificationMessage.Length;
//preparando mensagem para envio
using (Stream requestStream = sendNotificationRequest.GetRequestStream())
{
requestStream.Write(notificationMessage, 0, notificationMessage.Length);
}
//envio da notificação
HttpWebResponse response =
(HttpWebResponse)sendNotificationRequest.GetResponse();
//conferindo resposta do envio
string notificationStatus = response.Headers["X-NotificationStatus"];
string notificationChannelStatus = response.Headers["X-SubscriptionStatus"];
string deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"];
...
Estrutura de uma mensagem do tipo TOAST:
<?xml version="1.0" encoding="utf-8"?>
<wp:Notification xmlns:wp="WPNotification">
<wp:Toast>
<wp:Text1>{0}</wp:Text1>
<wp:Text2>{1}</wp:Text2>
</wp:Toast>
</wp:Notification>
* Onde {0} = header e {1} = payload
** O tamanho máximo para o header é de 1 kb e o payload 3 kb. Mensagens com tamanho superior serão simplesmente descartadas.
Conclusões
É notável que o processo para envio das notificações de push é muito mais simples no Windows Phone, todavia, muito se assemelha ao iOS.
O entendimento de todo o cenário de funcionamento do mecanismo de PUSH é crucial para o seu desenvolvimento e facilita o processo de implementação.
Intrínsecas funcionalidades de MDM (Mobile Device Management) não estão disponíveis na versão do Windows Phone 7, o que acaba sendo um pouco frustrante.
Além disso, a limitação para processar notificações recebidas apenas por aplicações em execução em primeiro plano, também deixam a desejar e tornam a realidade do MDM um pouco distante do ideal, se comparado ao antigo Windows Mobile.
Nesse caso, todo o foco das notificações de push ficam atreladas apenas às aplicações que estão em execução. Por tratar-se de um sistema operacional novo, aguardamos por novidades nas próximas versões.
Por enquanto, jogamos com as cartas da mesa para expor tudo que é possível até o momento, na esperança de que, logo ali na frente, as novidades cheguem e possamos ir mais além!
Participe de nosso blog deixando comentários com sugestões, dúvidas, análises.
Abraço e até o próximo post!
Escrito por Luiz Roberto Lethang Rodolpho





![windows_phone_7_1[1]](http://www.mobiltec.com.br/blog/wp-content/uploads/windows_phone_7_11.jpg)
![wp7toast1[1]](http://www.mobiltec.com.br/blog/wp-content/uploads/wp7toast11.png)




