O token do dispositivo APNS sempre muda, uma vez criado?

99

Depois de criado, o token do dispositivo de notificação por push muda?

Exemplo quando o aplicativo é atualizado? ou em qualquer outro caso pode mudar ??

001
fonte
Certifique-se de ver esta resposta, pois ela fornece documentação para 4 lugares onde o token do dispositivo muda
Honey

Respostas:

71

De [Documentação da Apple ApplePushService] 2

A forma desta fase de confiança de token garante que apenas APNs gere o token que ele irá honrar posteriormente, e pode garantir a si mesmo que um token entregue a ele por um dispositivo é o mesmo token que foi provisionado anteriormente para esse dispositivo específico - e apenas para esse dispositivo.

Se o usuário restaurar os dados de backup em um novo dispositivo ou reinstalar o sistema operacional, o token do dispositivo será alterado.

Malinois
fonte
Os documentos atuais eliminaram a última frase. Parece (de outra questão SO, stackoverflow.com/questions/2751481/... ) que restauração de dados irá manter os tokens APN mas que instala sistema operacional e "limpezas" irá repô-la (a menos que eles são seguidos por restaurar os dados para o operacional recém-instalado sistema).
Robert Altman
1
@RobertAltman - Não acho que essa seja toda a história. Eu vi uma série de registros em nosso banco de dados de dispositivos completamente diferentes com exatamente o mesmo token APNS. Vejo na minha frente agora um iPad 2 e um iPhone 3GS que nos enviou o mesmo token. Alguém mais pode confirmar este comportamento?
DougW
@DougW, isso é estranho. Você ainda tem algum problema semelhante? Editou o link e postou a partir dos documentos mais recentes.
iosCurator
139

A documentação oficial da Apple não é clara neste ponto. O que observei é o seguinte: o token é invariável para um determinado dispositivo, aplicativo e domínio (produção vs. sandbox). Acredito que isso deve permanecer verdadeiro para que o sistema funcione de forma confiável. Considere a situação em que uma atualização de aplicativo aciona um novo token APN; se eu estivesse usando o melhor novo aplicativo semelhante ao Twitter, com notificações habilitadas, o que aconteceria quando eu atualizasse meu aplicativo do iTunes? Devo ter a expectativa de que continuarão a receber notificações mesmo que não tenha executado os aplicativos desde que "sincronizo" a atualização com meu dispositivo? O ato de alterar o aplicativo não pode afetar o sistema APN, pois o sistema operacional pode receber notificações em seu nome, mesmo que você não tenha executado o aplicativo atualizado.

Para ser claro, a Apple afirma que "um aplicativo deve se registrar [nos servidores APN] toda vez que for iniciado e fornecer ao seu provedor o token atual". Eu concordo de todo o coração; isso protegerá seu aplicativo de suposições erradas ou situações incomuns.

Uma das respostas para Os tokens de notificação por push são exclusivos em todos os aplicativos para um único dispositivo? indica que os tokens do dispositivo são exclusivos por "instalação do sistema operacional"; e que a restauração do backup em um dispositivo manteria o token, mas limpar um dispositivo fará com que ele receba um novo token. Isso seria inteiramente consistente com as intenções da Apple de operação contínua e privacidade: limpar um dispositivo é severo o suficiente para justificar uma nova associação, mas um usuário que restaura uma imagem após uma atualização do sistema operacional iria querer preservar suas notificações existentes. Se eu me lembro da atualização recente do iOS5 no meu iPad, restaurei o backup mais recente após a atualização, então isso teria mantido a consistência do meu token de notificação. [Editar: restaurando um backup para um diferente o dispositivo NÃO duplicará o token.]

advertência: não tenho conhecimento definitivo sobre o assunto, apenas alguma experiência razoável trabalhando com APN (como desenvolvedor terceirizado). Como sempre, é melhor verificar suas suposições.


Atualização (junho de 2012):

Recentemente, tive a chance de> falar com engenheiros da Apple e fazer alguns testes do mundo real, e queria apresentar os resultados:

Para ser completo, quando falo sobre o retorno de um token APN, estou assumindo o contexto de um único identificador / aplicativo de pacote.

Primeiro, os engenheiros da Apple disseram que não deveria ser possível que dois dispositivos retornassem o mesmo APN. Apesar dos comentários abaixo, não consegui identificar uma circunstância em que isso falhe.

Em segundo lugar, aqui está a sequência e os resultados do teste de atualização:

  1. Comece com iOS4 instalado no iPhone4; dispositivo de backup no iTunes

  2. Atualizar para iOS5
    De um teste anterior, eu sei que o token APN agora é diferente

  3. Restaure o backup para o dispositivo
    O token APN agora é o mesmo da etapa 1.

  4. Redefinir iOS (dispositivo limpo)
    As alterações de token APN

  5. Faça backup de um telefone diferente para o iTunes e restaure esse backup para testar o dispositivo; basicamente, estou restaurando o backup "errado", como se estivesse trocando de telefone.
    O token APN muda novamente; além disso, é distinto e não corresponde aos tokens nem ao token original nem ao token "clonado".

  6. Restaure o backup "correto" para o dispositivo.
    O token APN agora é igual à etapa 1.

  7. Por último, atualizei o telefone para iOS6 (beta2), restaurei meu backup e testei novamente. Conforme esperado, o token continuou a corresponder ao token na etapa 1.

Neste ponto, estou bastante confiante de que os tokens APN não podem ser duplicados entre dispositivos diferentes; talvez isso possa ter acontecido como um bug em versões anteriores do iOS, mas estou confiante de que o iOS5 (e presumivelmente o iOS6) está lidando com tokens APN corretamente.


Atualização (agosto de 2012)

Acabei de perceber que não tinha adicionado isto: os tokens de dispositivo serão alterados. Um dos desenvolvedores da Apple compartilhou comigo que os tokens realmente expiram (depois de 2 anos, eu acho). Para muitos propósitos, isso é longo o suficiente para ser considerado invariável.

[Não estou preocupado se tiver que atualizar meus scripts de teste com novos tokens a cada dois anos, especialmente porque mudo de telefone todos os anos.]

Robert Altman
fonte
então isso significa que você pode usar o token como uma forma de identificar um usuário de forma exclusiva? (o que é muito prático em aplicativos em que é preciso 'votar'?). Posso imaginar a situação: o usuário vota e o aplicativo responde com um número aleatório por meio das notificações. Esse número deve ser reenviado ao servidor para que o voto seja válido. Dessa forma, a votação não pode ser manipulada facilmente.
Toad de
também interessante: o token muda ao excluir o aplicativo e ao reinstalá-lo. Ou isso é semelhante à opção 'restaurar um backup'
Toad de
@Toad O token não muda como resultado da remoção e reinstalação de um aplicativo.
Robert Altman
@Toad Não creio que seja uma boa forma de identificação do usuário; como o token é único por dispositivo (bem como por aplicativo), um usuário com vários dispositivos terá vários tokens.
Robert Altman
1
Eu me pergunto sobre a relação entre certificados e token de dispositivo. se o certificado .p12 expirar, será necessário alterar o novo certificado. Encontrei uma referência "Quando um novo token de dispositivo é necessário, os APNs geram um usando as informações contidas no certificado do dispositivo." Portanto, não é uma possibilidade de atualização do token do dispositivo ao alterar certificados?
illusionJJ
50

Acabei de testá-lo com iOS9 e alterações de token de push APN se eu reinstalar um aplicativo.

Nikolay Derkach
fonte
7
posso confirmar isso
roocell
1
Eu posso confirmar isso também
Muhammad Adnan
1
Sim, está mudando :(
Azik Abdullah
alguém pode dizer por que isso acontece?
Sushobhit
Sim, mudaria
Ved Rauniyar
22

SIM , os tokens do dispositivo podem mudar.

Sempre que seu aplicativo recebe um token, ele deve armazená-lo. Então, sempre que um novo token é recebido (o que vai acontecer, eventualmente), comparar o novo token para o token armazenado e, se eles são diferentes:

  1. Atualize o armazenamento local do dispositivo, (incluindo possivelmente para nil)
  2. Atualize tudo no dispositivo que usa o token para ficar ciente do novo token
  3. Atualize todas as APIs que estão cientes desse token para o novo token.

Na prática, a última etapa provavelmente não será trivial. Por exemplo, se você tiver um serviço que está enviando alertas meteorológicos para um token de dispositivo com base no código postal que o dispositivo assinou, você precisa passar o old_tokene o new_tokenpara esse serviço para que ele possa atualizar a entrega.

Ergo, em geral, 100% das APIs que aceitam um "token de dispositivo" também devem ter algum tipo de UPDATEfacilidade para esse token. Para não construir para isso é a compilação para notificações mis-entregues e não entregues.

SG1
fonte
parece bom, mas o que foi removido e reinstalado meu aplicativo? nesse cenário, o token do dispositivo que salvei no armazenamento local será excluído
Kuf
@Kuf, você obteve uma resposta para essa pergunta? Eu tenho o mesmo - mesmo que o aplicativo seja desinstalado / reinstalado, como compararíamos o token do sistema?
nkirkes
@nkirkes veja esta pergunta para mais detalhes
Kuf
Os três pontos de "atualização" sobre os quais você falou são responsabilidades do iOS, do SDK ou de nós mesmos?
somenickname
7

O token do dispositivo muda do iOS 8 e posterior

Consulte o texto abaixo no site da Apple. Registro, programação e tratamento de notificações do usuário

O token do dispositivo é a chave para enviar notificações push para o seu aplicativo em um dispositivo específico. Os tokens do dispositivo podem mudar, portanto, seu aplicativo precisa se registrar novamente sempre que for iniciado e passar o token recebido de volta ao servidor. Se você não conseguir atualizar o token do dispositivo, as notificações remotas podem não chegar ao dispositivo do usuário. Os tokens do dispositivo sempre mudam quando o usuário restaura os dados de backup em um novo dispositivo ou computador ou reinstala o sistema operacional. Ao migrar dados para um novo dispositivo ou computador, o usuário deve iniciar seu aplicativo uma vez antes que notificações remotas possam ser entregues a esse dispositivo.

Nitya
fonte
2
URL está morto! Por favor, corrija.
Ramis
bom link
SomeGuyFortune
4

Acho que vale a pena mencionar, já que ninguém fez isso, que o token muda após você ter chamado unregisterForRemoteNotifications. Quando você chamar da registerForRemoteNotificationspróxima vez, o token será diferente. Não consegui encontrar nenhuma confirmação disso nos documentos da Apple, mas eu mesmo testemunhei esse tipo de comportamento. Por favor, mantenha isso em mente

Andrey Chernukha
fonte
3

Isso não deve mudar, a menos que seu aplicativo seja restaurado em um novo dispositivo (nesse ponto, ele não será solicitado a aceitar notificações push novamente, e simplesmente enviará a chamada registrada e você deverá aceitar o novo token).

Mas a Apple não garante que isso nunca mude (portanto, a documentação nunca menciona isso). É melhor programar para o pior e presumir que um dia pode mudar. Além disso, enviar um token para o seu servidor regularmente permite que você remova tokens que não foram registrados por um tempo e provavelmente desinstalaram seu aplicativo ou perderam o interesse há algum tempo (e a documentação especifica isso como o comportamento desejado!).

Jake
fonte
Você está correto: você não pode assumir que o token é permanente; seguir as regras de engajamento definidas nos documentos da APN. Na verdade, os desenvolvedores da Apple me disseram que o token mudará eventualmente (após cerca de 2 anos).
Robert Altman
1
Ressuscitando uma discussão antiga, mas alguém pode achar útil: Passei algum tempo esta semana trabalhando em um servidor Parse auto-hospedado e tendo problemas de teste - acontece que toda vez que atualizei meu aplicativo de desenvolvimento (como estava fazendo um número de mudanças de UX também), a id do token mudou com cada instalação de software ... então isso não é muito divertido? (suspiro)
ChrisH de
3

De - Apple Docs

APNs podem emitir um novo token de dispositivo por vários motivos:

  • O usuário instala seu aplicativo em um novo dispositivo

  • O usuário restaura o dispositivo de um backup

  • O usuário reinstala o sistema operacional

  • Outros eventos definidos pelo sistema

Como resultado, os aplicativos devem solicitar o token do dispositivo no momento da inicialização.

Além disso:

IMPORTANTE

Os tokens de dispositivo APNs são de comprimento variável. Não codifique seu tamanho.

Lal Krishna
fonte
2

Os links rapidamente se tornam obsoletos com a apple! então estou citando o que parece estar bastante claro agora:

Nunca armazene em cache tokens de dispositivo em seu aplicativo; em vez disso, obtenha-os do sistema quando precisar deles. APNs emite um novo token de dispositivo para seu aplicativo quando certos eventos acontecem. O token do dispositivo tem garantia de ser diferente, por exemplo, quando um usuário restaura um dispositivo de um backup, quando o usuário instala seu aplicativo em um novo dispositivo e quando o usuário reinstala o sistema operacional. Buscar o token, em vez de depender de um cache, garante que você tenha o token de dispositivo atual necessário para que seu provedor se comunique com APNs. Quando você tenta buscar um token de dispositivo, mas ele não mudou, o método fetch retorna rapidamente.

Deste guia

TheFuquan
fonte
0

Como referência ao material de notificação push da Apple

O token do dispositivo é a chave para enviar notificações push para o seu aplicativo em um dispositivo específico. Os tokens do dispositivo podem mudar, portanto, seu aplicativo precisa se registrar novamente sempre que for iniciado e passar o token recebido de volta ao servidor. Se você não conseguir atualizar o token do dispositivo, as notificações remotas podem não chegar ao dispositivo do usuário. Os tokens do dispositivo sempre mudam quando o usuário restaura os dados de backup em um novo dispositivo ou computador ou reinstala o sistema operacional. Ao migrar dados para um novo dispositivo ou computador, o usuário deve iniciar seu aplicativo uma vez antes que notificações remotas possam ser entregues a esse dispositivo.

Nunca armazene em cache um token de dispositivo; sempre obtenha o token do sistema sempre que precisar. Se seu aplicativo se registrou anteriormente para notificações remotas, chamar o método registerForRemoteNotifications novamente não incorre em nenhuma sobrecarga adicional e o iOS retorna o token de dispositivo existente para seu representante de aplicativo imediatamente. Além disso, o iOS chama seu método delegado sempre que o token do dispositivo muda, não apenas em resposta ao registro ou novo registro do seu aplicativo.

Mohit Gaur
fonte
0

De acordo com este link, o token do dispositivo

O token do dispositivo incluído em cada solicitação representa a identidade do dispositivo que recebe a notificação. APNs usa tokens de dispositivo para identificar cada aplicativo exclusivo e combinação de dispositivo. Ele também os usa para autenticar o roteamento de notificações remotas enviadas a um dispositivo. Cada vez que seu aplicativo é executado em um dispositivo, ele busca esse token dos APNs e o encaminha ao seu provedor. Seu provedor armazena o token e o usa ao enviar notificações para aquele aplicativo e dispositivo específico. O token em si é opaco e persistente, mudando apenas quando os dados e configurações de um dispositivo são apagados. Apenas APNs podem decodificar e ler um token de dispositivo.

lucianoenrico
fonte
0

Sim , pode mudar. Idealmente, sempre que recebermos um token por meio do método de retorno de chamada

  • (vazio) aplicativo: (UIApplication *) aplicativo didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) deviceToken

O aplicativo deve registrar / atualizar o token no servidor remoto. Isso garantirá que o token no APNS e seu servidor sejam mantidos em sincronia.

De acordo com a documentação da Apple ,

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 Quando um novo token de dispositivo é necessário, o APNs gera 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 devolve o token do dispositivo ao seu aplicativo chamando-o: 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.

iosCurator
fonte
0

O token do dispositivo retransmite na instalação do aplicativo.

Isso significa que se você reinstalar o aplicativo, ele mudará ; não importa se você fizer isso de um backup, uma atualização do iOS, etc.

A maneira certa de usá-lo, para evitar qualquer problema, é pegar o que está indicado no a NSPAppDelegatecada lançamento do aplicativo, no métododidRegisterForRemoteNotificationsWithDeviceToken

Alberto Scampini
fonte