Existem muitos threads de stackoverflow relacionados a esse tópico, mas ainda não encontrei uma boa solução.
Se o aplicativo não está no fundo, eu posso verificar launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
na application:didFinishLaunchingWithOptions:
chamada para ver se ele está aberto a partir de uma notificação.
Se o aplicativo estiver em segundo plano, todas as postagens sugerem o uso application:didReceiveRemoteNotification:
e a verificação do estado do aplicativo. Mas, como experimentei (e também como o nome desta API sugere), esse método é chamado quando a notificação é recebida, em vez de tocada.
Portanto, o problema é, se o aplicativo for iniciado e depois colocado em segundo plano, e você souber que uma notificação foi recebida de application:didReceiveNotification
(application:didFinishLaunchWithOptions:
não será acionada neste ponto), como saber se o usuário retomou o aplicativo tocando na notificação ou apenas tocando no ícone do aplicativo? Porque se o usuário tocou na notificação, a expectativa é abrir a página mencionada naquela notificação. Caso contrário, não deveria.
Eu poderia usar handleActionWithIdentifier
para notificações de ação personalizada, mas isso só é acionado quando um botão de ação personalizada é pressionado, não quando o usuário toca no corpo principal da notificação.
Obrigado.
EDITAR:
depois de ler uma das respostas abaixo, pensei que desta forma posso esclarecer minha dúvida:
Como podemos diferenciar esses 2 cenários:
(A) 1.app vai para segundo plano; 2. notificação recebida; 3. toque do usuário na notificação; 4. aplicativo entra em primeiro plano
(B) 1.app vai para segundo plano; 2. notificação recebida; 3. o usuário ignora a notificação e toca no ícone do aplicativo posteriormente; 4. aplicativo entra em primeiro plano
Uma vez que application:didReceiveRemoteNotification:
é acionado em ambos os casos na etapa 2.
Ou deve application:didReceiveRemoteNotification:
ser acionado na etapa 3 apenas para (A), mas de alguma forma configurei meu aplicativo de forma errada, então estou vendo na etapa 2?