O suporte ao modo escuro foi adicionado à versão 2.20.31 (lançada em março de 2020) do cliente WhatsApp. Esse é um recurso exclusivo do iOS 13 e, pela aparência, parece ser uma implementação totalmente nativa. Eu acho que é seguro supor que o aplicativo agora está sendo compilado com o iOS SDK 13.0 ou superior.
O problema é que, a partir do iOS 13, a Apple agora exige que a tela de chamada nativa seja exibida sempre que uma notificação de VoIP é recebida - caso contrário, o aplicativo não receberá mais notificações de VoIP. Na versão anterior do iOS, alguns aplicativos (incluindo o WhatsApp) parecem usar chamadas VoIP "falsas" para ativar silenciosamente o aplicativo em segundo plano quando o usuário tenta usar o cliente da Web, para que este possa conectar e trocar dados diretamente com o telefone
No entanto, a partir da versão mais recente, o cliente da Web ainda parece funcionar como antes, apesar das restrições introduzidas pela Apple. Usando um depurador, é possível observar o aplicativo iOS sendo ativado sempre que o usuário abre o Web client em um PC, mas nenhuma tela de chamada é exibida. Isso pode ser feito repetidamente e quantas vezes quisermos.
Os logs do WhatsApp parecem confirmar o que está escrito acima :
default 17:09:44.515731+0000 callservicesd Call source <CXXPCCallSource 0x111ecb0a0 identifier=UKFA9XBX6K.net.whatsapp.WhatsApp isConnected=1 processIdentifier=417 isPermittedToUsePublicAPI=1 isPermittedToUsePrivateAPI=0> registered with configuration <CXProviderConfiguration 0x111e9bb40 localizedName=WhatsApp ringtoneSoundURL=(null) iconTemplateImageData=0x0 maximumCallGroups=1 maximumCallsPerCallGroup=1 supportsAudioOnly=1 supportsVideo=1 supportsEmergency=0 supportsVoicemail=0 supportsCurrentPlatform=1 includesCallsInRecents=1 audioSessionID=1151157 supportedHandleTypes=2>
Se tentarmos fazer isso com nosso aplicativo, os resultados serão bem diferentes :
error 18:56:19.949023+0000 callservicesd Killing VoIP app com.xxxxx.xxxxx.xxxxx because it failed to post an incoming call in time.
Alguma idéia do que está acontecendo aqui? O WhatsApp está usando algum tipo de solução alternativa não documentada ou explorando algum tipo de API privada?
Agradecemos antecipadamente por qualquer resposta.