Arquitetura do aplicativo quando o APNS 'muda de estado' falha

Eu já vi várias perguntas sobre esse tópico. Mas todos simplesmente dizem que você só precisa se recuperar de outros meios. Mas ninguém explica quais são os outros meios! Não consegui encontrar uma resposta no SO. Este também é um acompanhamento dos comentários deesta Pergunta, questão.

Digamos que estou trabalhando em um aplicativo Uber. Os motoristas precisam conhecer a localização dos passageiros.

Um passageiro define um local de coleta para123 XYZStreet.

Dois minutos depois, ela decide cancelar a coleta inteira. Então agora eu preciso informar o motorista.Esta é uma atualização importante de alteração de estado.

O primeiro pensamento que vem à mente é:

Envie uma notificação que tenhacontent-available:1 para que eu possa atualizar o aplicativo assim que a notificação chegar, e no didReceiveNotification eu chamoGET(PassengerInfoModel) e também incluem"alert" : "Pickup has been canceled. Don't go there' Assim, o motorista também seria informado visualmente. Obviamente, tocar na notificação não é o que gerencia as atualizações. ocontent-available sendo definido como1 vai conseguir isso.

Mas fazendo isso, ainda o que acontece quando a chegada dessa notificaçãofalhar-completamente? Bem, então o mais recenteGET(PassengerInfoModel) não vai acontecer. Como solução, ouvi falar de umHEAD solicitação:

O método HEAD é idêntico ao GET, exceto que o servidorNÃO DEVE retornar um corpo da mensagem na resposta. A metainformação contida nos cabeçalhos HTTP em resposta a uma solicitação HEAD DEVE ser idêntica à informação enviada em resposta a uma solicitação GET. Esse método pode ser usado para obter metainformações sobre a entidade implícita na solicitação sem transferir o próprio corpo da entidade. Esse método é frequentemente usado para testar links de hipertexto quanto à validade, acessibilidade emodificação recente.

Não sabe o que acontece se, ao usar uma solicitação HEAD, descobrimos que havia uma atualização !? Em seguida, fazemos uma solicitação GET no caso de sucesso do manipulador de conclusão do HEAD?

Questão 1 Como devemos lidar com a resposta da solicitação HEAD? (Suponho que, para que o servidor possa rotearHEAD solicitações, deve haver algumas alterações, mas vamos supor que esteja fora do escopo da pergunta).

Questão 2 Quantas vezes temos que fazer esta solicitação? Baseado emesta comentar uma solução poderia ser definir um temporizador de repetição noviewDidAppear por exemplo. faça umHEAD solicitar a cada 2 minutos. Essa é uma boa ideia?

Questão 3 Agora, digamos que fizemos essa solicitação HEAD, mas oGET(PassengerInfoModel) também é solicitado a partir de outras 2 cenas / viewControllers. O servidor não pode diferenciar entre as diferentes cenas / viewControllers. Suponho que uma solução seria ter todas as solicitações de rede do nosso aplicativo gerenciadas por meio de um NetworkHandler único. Essa é uma boa ideia?

Entendo que esta questão é ampla, mas acredito que o problema precisa ser tratado como um todo

questionAnswers(1)

yourAnswerToTheQuestion