Como as notificações "push" do iOS são entregues a um determinado dispositivo sem que esse dispositivo precise consultar um servidor?
Por exemplo, digamos que recebi uma nova mensagem no Facebook. O Facebook notifica a Apple que meu dispositivo deve receber uma notificação como tal. Mas como a Apple sabe para qual dispositivo / IP enviar a mensagem?
Respostas:
Foi demais para mim fazer um comentário assim.
Da documentação.
O serviço Apple Push Notification (APNs) propaga notificações push para dispositivos com aplicativos registrados para receber essas notificações. Cada dispositivo estabelece uma conexão de IP credenciada e criptografada com o serviço e recebe notificações por meio dessa conexão persistente. Os provedores se conectam com APNs por meio de um canal persistente e seguro enquanto monitoram os dados de entrada destinados aos seus aplicativos clientes. Quando novos dados para um aplicativo chegam, o provedor prepara e envia uma notificação por meio do canal para APNs, que empurra a notificação para o dispositivo de destino.
Sugiro ler a documentação para obter mais informações e como usar e configurar. Está tudo aí.
Notificações via push
fonte
Cada dispositivo pode ser atualizado com dados usando seus próprios tokens de dispositivo exclusivos. Esta imagem explica tudo. .
fonte
Criei um infográfico para explicar o fluxo de trabalho das notificações push. Espero que isso seja útil.
fonte
Visão geral de APNs
O serviço Apple Push Notification (APNs) é a peça central do recurso de notificações remotas. É um serviço robusto, seguro e altamente eficiente para desenvolvedores de aplicativos propagarem informações para dispositivos iOS (e, indiretamente, watchOS), tvOS e macOS.
Na inicialização inicial de seu aplicativo no dispositivo de um usuário, o sistema estabelece automaticamente uma conexão IP credenciada, criptografada e persistente entre seu aplicativo e APNs. Esta conexão permite que seu aplicativo execute a configuração para habilitá-lo a receber notificações, conforme explicado em Configurando o Suporte de Notificação Remota.
A outra metade da conexão para enviar notificações - o canal persistente e seguro entre um servidor provedor e APNs - requer configuração em sua conta de desenvolvedor online e o uso de certificados criptográficos fornecidos pela Apple. Um provedor é um servidor que você implanta e gerencia, que você configura para trabalhar com APNs. A Figura 1-1 mostra o caminho de entrega de uma notificação remota.
Figura 1-1 Entrega de notificação remota de um provedor para um aplicativo
Com a configuração de notificação push concluída em seus provedores e em seu aplicativo, seus provedores podem enviar solicitações de notificação para APNs. APNs transporta cargas úteis de notificação correspondentes para cada dispositivo de destino. Ao receber uma notificação, o sistema entrega a carga útil ao aplicativo apropriado no dispositivo e gerencia as interações com o usuário.
Se uma notificação para seu aplicativo chegar com o dispositivo ligado, mas com o aplicativo não em execução, o sistema ainda pode exibir a notificação. Se o dispositivo estiver desligado quando o APNs enviar uma notificação, o APNs manterá a notificação e tentará novamente mais tarde (para obter detalhes, consulte Qualidade de serviço, Armazenamento e encaminhamento e Notificações combinadas).
Responsabilidades do Provedor
Os servidores de seu provedor têm as seguintes responsabilidades de participação com APNs:
Para cada solicitação de notificação remota enviada por um provedor, ele deve:
Usando vários provedores
A Figura 1-2 descreve o tipo de rede virtual que o APNs habilita para os dispositivos que executam seus aplicativos. Para lidar com a carga de notificação, você normalmente implantaria vários provedores, cada um com sua própria conexão persistente e segura para APNs. Cada provedor pode enviar solicitações de notificação visando qualquer dispositivo para o qual o provedor tenha um token de dispositivo válido.
Figura 1-2 Empurrando notificações remotas de vários provedores para vários dispositivos
Qualidade de serviço, armazenamento e envio e notificações combinadas
O serviço Apple Push Notification inclui um componente Quality of Service (QoS) que executa uma função de armazenamento e encaminhamento. Se o APNs tentar entregar uma notificação e o dispositivo de destino estiver offline, o APNs armazenará a notificação por um período limitado de tempo e a entregará quando o dispositivo ficar disponível novamente. Este componente armazena apenas a notificação mais recente por dispositivo e por aplicativo. Se um dispositivo estiver offline, o envio de uma solicitação de notificação direcionada a esse dispositivo faz com que a solicitação anterior seja descartada. Se um dispositivo permanecer offline por um longo tempo, todas as notificações armazenadas em APNs serão descartadas.
Para permitir a união de notificações semelhantes, você pode incluir um identificador de recolhimento em uma solicitação de notificação. Normalmente, quando um dispositivo está online, cada solicitação de notificação que você envia aos APNs resulta em uma notificação entregue ao dispositivo. No entanto, quando a chave apns-collapse-id está presente em seu cabeçalho de solicitação HTTP / 2, os APNs unem solicitações cujo valor para essa chave é o mesmo. Por exemplo, um serviço de notícias que envia o mesmo título duas vezes pode usar o mesmo valor de identificador de colapso para ambas as solicitações. APNs então uniriam as duas solicitações em uma única notificação para entrega ao dispositivo. Para obter detalhes sobre a chave apns-collapse-id.
Arquitetura de Segurança
APNs impõe validação e autenticação criptográfica de ponta a ponta usando dois níveis de confiança: confiança de conexão e confiança de token de dispositivo.
A confiança de conexão funciona entre provedores e APNs e entre APNs e dispositivos.
A confiança do token do dispositivo funciona de ponta a ponta para cada notificação remota. Ele garante que as notificações sejam encaminhadas apenas entre os pontos de início (provedor) e de término (dispositivo) corretos.
Um token de dispositivo é uma instância NSData opaca que contém um identificador exclusivo atribuído pela Apple a um aplicativo específico em um dispositivo específico. Apenas APNs podem decodificar e ler o conteúdo de um token de dispositivo. Cada instância do aplicativo recebe seu token de dispositivo exclusivo quando se registra com APNs e deve então encaminhar o token para seu provedor, conforme descrito em Configurando o Suporte de Notificação Remota. O provedor deve incluir o token do dispositivo em cada solicitação de notificação push que visa o dispositivo associado; O APNs usa o token do dispositivo para garantir que a notificação seja entregue apenas à combinação exclusiva de aplicativo-dispositivo para a qual se destina.
APNs podem emitir um novo token de dispositivo por vários motivos:
Como resultado, os aplicativos devem solicitar o token do dispositivo no momento da inicialização, conforme descrito em APNs-to-Device Connection Trust e Device Tokens. Para obter exemplos de código, consulte Registrando-se para receber notificações remotas.
Para estabelecer sessões TLS baseadas em HTTP / 2 com APNs, você deve garantir que um certificado raiz GeoTrust Global CA esteja instalado em cada um de seus provedores. Se um provedor estiver executando o macOS, esse certificado raiz estará no keychain por padrão. Em outros sistemas, este certificado pode exigir instalação explícita. Você pode baixar este certificado no site de certificados raiz da GeoTrust. Aqui está um link direto para o certificado.
A Figura 1-3 ilustra o uso da API do provedor de APNs com base em HTTP / 2 para estabelecer confiança e o uso de tokens de autenticação do provedor JWT para enviar notificações.
Figura 1-3 Estabelecendo e usando confiança de conexão de provedor baseada em token
Conforme mostrado na Figura 1-3, a confiança do provedor baseado em token funciona da seguinte maneira:
Seu provedor solicita uma conexão segura com APNs usando a segurança da camada de transporte (TLS), representada pela seta com o rótulo “iniciação TLS” na figura.
O APNs então fornece ao seu provedor um certificado de APNs, representado pela próxima seta na figura (rotulado como “certificado de APNs”), que seu provedor então valida.
Nesse ponto, a confiança da conexão é estabelecida e o servidor do seu provedor está habilitado para enviar solicitações de notificação push remota baseada em token para APNs. Cada solicitação de notificação que seu provedor envia deve ser acompanhada por um token de autenticação JWT, representado na figura como a seta chamada "Push de notificação".
Respostas de APNs a cada push, representado na figura como a seta chamada “Resposta HTTP / 2”.
Para obter detalhes sobre as respostas que seu provedor pode receber para esta etapa, consulte Resposta HTTP / 2 de APNs.
A Figura 1-4 ilustra o uso de um certificado SSL emitido pela Apple para estabelecer confiança entre um provedor e APNs. Ao contrário da Figura 1-3, esta figura não mostra um push de notificação em si, mas para no estabelecimento de uma conexão Transport Layer Security (TLS). No esquema de confiança baseado em certificado, as solicitações de notificação por push não são autenticadas, mas são validadas usando o token de dispositivo que o acompanha.
Figura 1-4 Estabelecendo confiança de conexão de provedor com base em certificado
Conforme mostrado na Figura 1-4, a confiança de provedor para APNs baseada em certificado funciona da seguinte maneira:
Seu provedor solicita uma conexão segura com APNs usando a segurança da camada de transporte (TLS), representada pela seta com o rótulo “iniciação TLS” na figura.
O APNs então fornece ao seu provedor um certificado de APNs, representado pela próxima seta na figura (rotulado como “certificado de APNs”), que seu provedor então valida.
Seu provedor deve então enviar seu certificado de provedor provisionado pela Apple (que você obteve anteriormente de sua conta de desenvolvedor online, conforme explicado em “Gerar um certificado SSL de cliente APNs universal” na Ajuda do Xcode) de volta para APNs, representado pela seta rotulada “Provedor certificado."
O APNs então valida seu certificado de provedor, confirmando assim que a solicitação de conexão foi originada de um provedor legítimo e estabelece sua conexão TLS.
Nesse ponto, a confiança da conexão é estabelecida e o servidor do seu provedor está habilitado para enviar solicitações de notificação por push remota com base em certificado para APNs.
Confiança de conexão de APNs para dispositivo e tokens de dispositivo
A confiança entre APNs e cada dispositivo é estabelecida automaticamente, sem a participação de seu aplicativo, conforme descrito nesta seção.
Cada dispositivo possui um certificado criptográfico e uma chave criptográfica privada, fornecida pelo sistema operacional na ativação inicial do dispositivo e armazenada nas chaves do dispositivo. Durante a ativação, o APNs autentica e valida a conexão com o dispositivo, com base no certificado e na chave, conforme mostrado na Figura 6-5.
Figura 1-5 Estabelecendo conexão confiável entre um dispositivo e APNs
Conforme mostrado na Figura 1-5, a confiança de APNs para dispositivo funciona da seguinte maneira:
Depois de receber o token do dispositivo, um aplicativo deve se conectar ao provedor associado do aplicativo e encaminhar o token para ele. Esta etapa é necessária porque um provedor deve incluir o token do dispositivo posteriormente, quando enviar uma solicitação de notificação, para APNs, visando o dispositivo. O código que você escreve para encaminhar o token também é mostrado em Registrando-se para receber notificações remotas.
Esteja um usuário ativando um dispositivo pela primeira vez ou se os APNs emitiram um novo token de dispositivo, o processo é semelhante e é mostrado na Figura 6-6.
Figura 1-6 Gerenciando o token do dispositivo
A obtenção e manipulação de um token de dispositivo específico do aplicativo funciona da seguinte maneira:
Seu aplicativo se registra com APNs para notificações remotas, conforme mostrado na seta superior. Se o aplicativo já estiver registrado e o token de dispositivo específico do aplicativo não tiver mudado, o sistema retorna rapidamente o token existente para o aplicativo e este processo pula para a etapa 4.
Quando um novo token de dispositivo é necessário, os APNs geram um usando as informações contidas no certificado do dispositivo. Ele criptografa o token usando uma chave de token e o retorna ao dispositivo, conforme mostrado na seta central apontando para a direita.
O sistema entrega o token do dispositivo de volta ao seu aplicativo chamando seu aplicativo: didRegisterForRemoteNotificationsWithDeviceToken: método delegate.
Ao receber o token, seu aplicativo (dentro do método delegado) deve encaminhá-lo ao seu provedor em formato binário ou hexadecimal. Seu provedor não pode enviar notificações ao dispositivo sem este token. Para obter detalhes, consulte Registrando-se para receber notificações remotas em Configurando o suporte a notificações remotas.
IMPORTANTE
Os tokens de dispositivo APNs são de comprimento variável. Não codifique seu tamanho.
Quando seu provedor envia uma solicitação de notificação push para APNs, ele inclui um token de dispositivo que identifica uma combinação única de aplicativo-dispositivo. Esta etapa é mostrada na seta “Token, Payload” entre o provedor e os APNs na Figura 6-7. APNs descriptografa o token para garantir a validade da solicitação e determinar o dispositivo de destino. Se o APNs determinar que o remetente e o destinatário são legítimos, ele enviará a notificação ao dispositivo identificado.
Figura 1-7 Caminho de notificação remota do provedor para o dispositivo
Depois que o dispositivo recebe a notificação (e após a etapa final mostrada na Figura 1-7), o sistema encaminha a notificação remota para seu aplicativo.
Ref: Apple Push Notification Service
Agora, olhe aqui para entender o fluxo técnico: Como implementar o Apple Push Notification Service no aplicativo iOS?
fonte
O dispositivo não continua pesquisando o servidor para as notificações push.
Para simplificar, considere que um iPhone está conectado à Internet. Ao conectar-se à Internet, o iPhone estabelece conexão com o servidor Apple Push Notifications, o que significa que os dados podem ser enviados para o iPhone a partir do servidor no momento em que os dados chegam ao servidor.
A Apple não usa o protocolo HTTP para notificações push, mas se você entende o protocolo HTTP, é uma metodologia quase semelhante.
http://en.wikipedia.org/wiki/Push_technology#HTTP_server_push
fonte
Há uma explicação muito boa de notificações push neste artigo .
fonte