Quindi il supporto in modalità oscura è stato aggiunto alla versione 2.20.31 (rilasciata nel marzo del 2020) del client WhatsApp. Questa è una funzione solo per iOS 13 e, dall'aspetto, sembra un'implementazione completamente nativa. Penso che sia sicuro supporre che l'app sia ora in fase di compilazione con iOS SDK 13.0 o versioni successive.
Il fatto è che a partire da iOS 13, Apple ora richiede che venga visualizzata la schermata della chiamata nativa ogni volta che viene ricevuta una notifica VoIP , altrimenti l'app non riceverà ulteriori notifiche VoIP. Nella versione precedente di iOS, alcune app (incluso WhatsApp) sembrano utilizzare chiamate VoIP in entrata "false" per riattivare silenziosamente l'app in background quando l'utente ha tentato di utilizzare il client Web, in modo che quest'ultimo potesse quindi connettersi e scambiare dati direttamente con il telefono.
Tuttavia, a partire dall'ultima versione, il client Web sembra funzionare ancora come prima, nonostante le restrizioni introdotte da Apple. Utilizzando un debugger è possibile osservare l'app iOS svegliarsi ogni volta che l'utente apre il client Web su un PC, ma non vengono mai visualizzate schermate di chiamata. Questo può essere fatto ripetutamente e tutte le volte che vogliamo.
I registri di WhatsApp sembrano confermare ciò che è scritto sopra :
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 proviamo a farlo con la nostra app, i risultati sono abbastanza diversi :
error 18:56:19.949023+0000 callservicesd Killing VoIP app com.xxxxx.xxxxx.xxxxx because it failed to post an incoming call in time.
Qualche idea di cosa sta succedendo qui? WhatsApp sta usando una sorta di soluzione alternativa non documentata o sta sfruttando una sorta di API privata?
Grazie in anticipo per le risposte.