Contexto
Estou desenvolvendo um aplicativo de mensagens para iOS com a necessidade de gerenciar com precisão a contagem de emblemas para mensagens não lidas. Quando o aplicativo está em execução (em primeiro ou segundo plano), posso consultar o servidor para obter a contagem exata de mensagens não lidas dentro didReceiveRemoteNotification
dos userNotificationCenter(_:willPresent:)
manipuladores.
Problema
No entanto, estou com dificuldades para gerenciar a contagem de emblemas quando o aplicativo é completamente encerrado. Nesse caso, preciso contar com uma NotificationService
extensão para incrementar a contagem de emblemas. Minha preocupação é: como minha NotificationService
extensão pode detectar se o aplicativo principal está em execução? Quero evitar inconsistências na contagem de emblemas onde:
- Se o aplicativo principal estiver em execução, ele deverá lidar com contagens de emblemas por meio de consultas ao servidor
- Se o aplicativo principal for encerrado, os
NotificationService
emblemas devem ser incrementados
Pergunta
Qual é a maneira mais confiável para a NotificationService
extensão detectar o estado de execução do aplicativo principal e quais mecanismos de sincronização devo implementar para evitar disputas de dados ao atualizar contagens de emblemas nesses dois contextos?
Existem algumas maneiras de sincronizar seu aplicativo e sua extensão, mas acho que usar
UserDefaults
o grupo de aplicativos é a mais fácil:Em
applicationDidBecomeActive
:Na extensão NotificationService:
Em
applicationWillTerminate
:No entanto, observe que esta solução não funcionará como esperado se o seu aplicativo estiver travando, pois
applicationWillTerminate
não será chamado neste caso. Portanto, não o deixe travar :)