Come funziona ancora il client Web WhatsApp con l'ultimo aggiornamento iOS (versione SDK 13.0+)?


9

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.

Risposte:


6

Questo è il file dei diritti più recenti di WhatsApp:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.developer.icloud-container-identifiers</key>
    <array>
        <string>57T9237FN3.net.whatsapp.WhatsApp</string>
    </array>
    <key>com.apple.developer.pushkit.unrestricted-voip</key>
    <true/>
    <key>com.apple.developer.ubiquity-container-identifiers</key>
    <array>
        <string>57T9237FN3.net.whatsapp.WhatsApp</string>
    </array>
    <key>application-identifier</key>
    <string>UKFA9XBX6K.net.whatsapp.WhatsApp</string>
    <key>com.apple.developer.carplay-messaging</key>
    <true/>
    <key>aps-environment</key>
    <string>production</string>
    <key>com.apple.developer.icloud-container-environment</key>
    <string>Production</string>
    <key>com.apple.developer.associated-domains</key>
    <array>
        <string>applinks:api.whatsapp.com</string>
        <string>applinks:v.whatsapp.com</string>
        <string>applinks:chat.whatsapp.com</string>
        <string>applinks:wa.me</string>
    </array>
    <key>com.apple.developer.siri</key>
    <true/>
    <key>com.apple.developer.team-identifier</key>
    <string>57T9237FN3</string>
    <key>com.apple.developer.icloud-services</key>
    <array>
        <string>CloudDocuments</string>
        <string>CloudKit</string>
    </array>
    <key>com.apple.security.application-groups</key>
    <array>
        <string>group.net.whatsapp.WhatsApp.shared</string>
        <string>group.com.facebook.family</string>
        <string>group.net.whatsapp.WhatsApp.private</string>
        <string>group.net.whatsapp.WhatsAppSMB.shared</string>
        <string>group.net.whatsapp.family</string>
    </array>
</dict>
</plist>

Questo diritto specifico sembra essere il motivo per cui è consentito non segnalare una chiamata in arrivo:

com.apple.developer.pushkit.unrestricted-voip

Non riesco a trovare alcuna documentazione relativa a questo diritto, quindi sono abbastanza sicuro che ad Apple sia stata concessa un'autorizzazione speciale.


Bene, il mistero risolto allora. Grazie mille!
DPR
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.