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.
Importante
As informações nesta seção pertencem ao iOS 9 e anteriores, que foram deixadas aqui para dar suporte a versões mais antigas do iOS. Para iOS 10 e posterior, consulte o guia da Estrutura de Notificação do Usuário para dar suporte à Notificação Local e Remota em um dispositivo iOS.
As notificações por push devem ser mantidas breves e contêm apenas dados suficientes para notificar o aplicativo móvel de que ele deve entrar em contato com o aplicativo do servidor para obter uma atualização. Por exemplo, quando novos emails chegam, o aplicativo do servidor notificaria apenas o aplicativo móvel de que o novo email chegou. A notificação não conteria o novo email em si. Em seguida, o aplicativo móvel recuperaria os novos emails do servidor quando fosse apropriado
No centro das notificações por push no iOS está o Serviço de Porta de Notificação por Push da Apple (APNS). Esse é um serviço fornecido pela Apple que é responsável por rotear notificações de um servidor de aplicativos para dispositivos iOS.
A imagem a seguir ilustra a topologia de notificação por push para iOS:
As notificações remotas são strings formatadas em JSON que aderem ao formato e aos protocolos especificados na seção Conteúdo de Notificação do Guia de Programação de Notificação Local e por Push na documentação do desenvolvedor do iOS.
A Apple mantém dois ambientes de APNS: um Sandbox e um ambiente de produção . O ambiente de área restrita destina-se a testes durante a fase de desenvolvimento e pode ser encontrado em gateway.sandbox.push.apple.com
na porta TCP 2195. O ambiente de produção destina-se a ser utilizado em aplicações já implantadas e que podem ser encontradas em gateway.push.apple.com
na porta TCP 2195.
Requisitos
A notificação por push deve observar as seguintes regras que são ditadas pela arquitetura do APNS:
- limite de mensagem de 256 bytes – todo o tamanho da mensagem da notificação não deve exceder 256 bytes.
- Nenhuma Confirmação de Recebimento – O APNS não fornece ao remetente nenhuma notificação de que uma mensagem chegou ao destinatário pretendido. Se o dispositivo for inacessível e várias notificações sequenciais forem enviadas, todas as notificações, exceto a mais recente, serão perdidas. Somente a notificação mais recente será entregue ao dispositivo.
- Cada aplicativo requer um certificado seguro – a comunicação com o APNS deve ser feita por SSL.
Criando e usando certificados
Cada um dos ambientes mencionados na seção anterior exige seu próprio certificado. Esta seção abordará como criar um certificado, associá-lo a um perfil de provisionamento e obter um certificado de Troca de Informações Pessoais para uso com o PushSharp.
Para criar um certificado, acesse o Portal de Provisionamento do iOS no site da Apple, conforme mostrado na captura de tela a seguir (observe o item de menu IDs do aplicativo à esquerda):
Em seguida, navegue até a seção da ID do Aplicativo e crie uma nova ID do aplicativo, conforme mostrado na seguinte captura de tela:
Ao clicar no botão +, você poderá inserir a descrição e um Identificador de Pacote para a ID do aplicativo, conforme mostrado na próxima captura de tela:
Certifique-se de selecionar ID de aplicativo explícita e que o Identificador do Pacote não termine com um
*
. Isso criará um identificador que seja bom para vários aplicativos, e os certificados de notificação por push devem ser para um único aplicativo.Nos Serviços de Aplicativo, selecione Notificações por Push:
E pressione Enviar para confirmar o registro da nova ID do aplicativo:
Em seguida, você deve criar o certificado para a ID do aplicativo. Na navegação à esquerda, acesse Certificados > Todos e selecione o botão
+
, conforme a captura de tela a seguir.Selecione se deseja usar um certificado de desenvolvimento ou produção:
Em seguida, selecione a nova ID do aplicativo que acabamos de criar:
Isso exibirá instruções que o levarão ao processo de criação de uma solicitação de assinatura de certificado usando o aplicativo acesso de conjunto de chaves em seu Mac.
Agora que o certificado foi criado, ele deve ser usado como parte do processo de compilação para assinar o aplicativo, para poder registrar-se no APNs. Isso requer a criação e a instalação de um perfil de provisionamento que usa o certificado.
Para criar um perfil de provisionamento de desenvolvimento, navegue até a seção Perfis de Provisionamento e siga as etapas para criá-lo usando a ID do aplicativo que acabamos de criar.
Depois de criar o perfil de provisionamento, abra Xcode Organizer e atualize-o. Se o perfil de provisionamento criado não aparecer, talvez seja necessário baixar o perfil do Portal de Provisionamento do iOS e importá-lo manualmente. A captura de tela abaixo mostra um exemplo do Organizer com o perfil de provisionamento adicionado.
Neste ponto, precisamos configurar o projeto Xamarin.iOS para usar esse perfil de provisionamento recém-criado. Isso é feito na caixa de diálogo Opções do Projeto, na guia Assinatura de Pacote iOS, como mostrado na captura de tela a seguir.
Neste ponto, o aplicativo está configurado para funcionar com notificações por push. No entanto, ainda há mais algumas etapas necessárias com o certificado. Esse certificado está no formato DER que não é compatível com o PushSharp, que requer um certificado PKCS12 (Troca de Informações Pessoais). Para converter o certificado para que ele seja utilizável pelo PushSharp, execute estas etapas finais:
- Baixar o arquivo de certificado – Faça logon no Portal de Provisionamento do iOS, escolha a guia Certificados, selecione o certificado associado ao perfil de provisionamento correto e escolha Baixar.
- Open Keychain Access – este é um aplicativo que serve como interface gráfica de usuário (GUI) para o sistema de gerenciamento de senhas no macOS.
- Importar o Certificado – Se o certificado ainda não estiver instalado, Arquivo... Importar Itens do menu Acesso às Chaves. Navegue até o certificado exportado acima e selecione-o.
- Exportar o certificado – expanda o certificado para que a chave privada associada fique visível, clique com o botão direito do mouse na chave e escolha Exportar. Você será solicitado a solicitar um nome de arquivo e uma senha para o arquivo exportado.
Neste ponto, terminamos com certificados. Criamos um certificado que será usado para assinar aplicativos iOS e convertemos esse certificado em um formato que pode ser usado com PushSharp em um aplicativo de servidor. Em seguida, vamos examinar como os aplicativos iOS interagem com o APNS.
Registrando-se com APNS
Antes que um aplicativo iOS possa receber uma notificação remota, ele deve se registrar no APNS. O APNS gerará um token de dispositivo exclusivo e o retornará ao aplicativo iOS. Em seguida, o aplicativo iOS usará o token do dispositivo e, em seguida, se registrará no servidor de aplicativos. Depois que tudo isso acontecer, o registro será concluído e o servidor de aplicativos poderá enviar notificações por push para o dispositivo móvel.
Em teoria, o token de dispositivo pode ser alterado sempre que um aplicativo iOS se registra com APNS, no entanto, na prática, isso não acontece com frequência. Como otimização, um aplicativo pode armazenar em cache o token de dispositivo mais recente e atualizar apenas o servidor de aplicativos quando ele for alterado. O diagrama a seguir ilustra o processo de registro e obtenção de um token de dispositivo:
O registro com APNS é tratado no método FinishedLaunching
da classe delegada do aplicativo chamando RegisterForRemoteNotificationTypes
no objeto UIApplication
atual. Quando um aplicativo iOS se registra com APNS, ele também deve especificar quais tipos de notificações remotas ele gostaria de receber. Esses tipos de notificação remota são declarados na enumeração UIRemoteNotificationType
. O snippet de código a seguir é um exemplo de como um aplicativo iOS pode se registrar para receber notificações remotas de alerta e selo:
if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
new NSSet ());
UIApplication.SharedApplication.RegisterUserNotificationSettings (pushSettings);
UIApplication.SharedApplication.RegisterForRemoteNotifications ();
} else {
UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
UIApplication.SharedApplication.RegisterForRemoteNotificationTypes (notificationTypes);
}
A solicitação de registro APNS ocorre em segundo plano – quando a resposta é recebida, o iOS chamará o método RegisteredForRemoteNotifications
na classe AppDelegate
e passará o token de dispositivo registrado. O token será contido em um objeto NSData
. O snippet de código a seguir mostra como recuperar o token de dispositivo fornecido pelo APNS:
public override void RegisteredForRemoteNotifications (
UIApplication application, NSData deviceToken)
{
// Get current device token
var DeviceToken = deviceToken.Description;
if (!string.IsNullOrWhiteSpace(DeviceToken)) {
DeviceToken = DeviceToken.Trim('<').Trim('>');
}
// Get previous device token
var oldDeviceToken = NSUserDefaults.StandardUserDefaults.StringForKey("PushDeviceToken");
// Has the token changed?
if (string.IsNullOrEmpty(oldDeviceToken) || !oldDeviceToken.Equals(DeviceToken))
{
//TODO: Put your own logic here to notify your server that the device token has changed/been created!
}
// Save new device token
NSUserDefaults.StandardUserDefaults.SetString(DeviceToken, "PushDeviceToken");
}
Se o registro falhar por algum motivo (como se o dispositivo não estiver conectado à Internet), o iOS chamará FailedToRegisterForRemoteNotifications
na classe de delegado do aplicativo. O snippet de código a seguir mostra como exibir um alerta para o usuário informando que o registro falhou:
public override void FailedToRegisterForRemoteNotifications (UIApplication application , NSError error)
{
new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show();
}
Manutenção de token de dispositivo
Os tokens de dispositivo expirarão ou serão alterados ao longo do tempo. Devido a esse fato, os aplicativos de servidor precisarão fazer alguma limpeza de casa e limpar esses tokens expirados ou alterados. Quando um aplicativo envia como notificação por push para um dispositivo que tem um token expirado, o APNS gravará e salvará esse token expirado. Em seguida, os servidores podem consultar o APNS para descobrir quais tokens expiraram.
APNS usava para fornecer um Serviço de Comentários - um endpoint HTTPS que se autentica por meio do certificado que foi criado para enviar notificações por push e envia de volta dados sobre quais tokens expiraram. Isso foi preterido pela Apple e removido.
Em vez disso, há um novo código de status HTTP para o caso que foi relatado anteriormente pelo Serviço de Comentários:
410 – O token de dispositivo não está mais ativo para o tópico.
Além disso, uma nova chave de dados JSON timestamp
estará no corpo da resposta:
Se o valor no cabeçalho :status for 410, o valor dessa chave será a última vez em que as APNs confirmaram que o token do dispositivo não era mais válido para o tópico.
Pare de enviar notificações por push até que o dispositivo registre com seu provedor um token com um carimbo de data/hora posterior.
Resumo
Esta seção apresenta os principais conceitos em torno de notificações por push no iOS. Ele explicou a função do APNS (Serviço de Gateway de Notificação por Push) da Apple. Em seguida, ele abordou a criação e o uso dos certificados de segurança que são essenciais para o APNS. Por fim, este documento terminou com uma discussão sobre como os servidores de aplicativos podem usar o dos Serviços de Feedback para interromper o rastreamento de tokens de dispositivo expirados.