¿Cómo funciona el cliente web de WhatsApp con la última actualización de iOS (SDK versión 13.0+)?

9

Por lo tanto, se agregó compatibilidad con modo oscuro a la versión 2.20.31 (lanzada en marzo de 2020) del cliente de WhatsApp. Esta es una característica solo para iOS 13, y desde el punto de vista de la apariencia, parece ser una implementación totalmente nativa. Creo que es seguro asumir que la aplicación ahora se está compilando con iOS SDK 13.0 o superior.

El problema es que, a partir de iOS 13, Apple ahora requiere que se muestre la pantalla de llamada nativa cada vez que se recibe una notificación de VoIP ; de lo contrario, la aplicación no recibirá más notificaciones de VoIP. En la versión anterior de iOS, algunas aplicaciones (incluyendo WhatsApp) parecen usar llamadas VoIP entrantes "falsas" para activar silenciosamente la aplicación en segundo plano cuando el usuario intentó usar el cliente web, para que este último pudiera conectarse e intercambiar datos directamente con el telefono.

Sin embargo, a partir de la última versión, el cliente web todavía parece funcionar como lo hizo antes a pesar de la restricción introducida por Apple. Al usar un depurador es posible observar que la aplicación de iOS se activa cada vez que el usuario abre el cliente web en una PC, pero nunca se muestran pantallas de llamadas. Esto se puede hacer repetidamente y con la frecuencia que queramos.

Los registros de WhatsApp parecen confirmar lo que está escrito arriba :

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>

Si intentamos hacer esto con nuestra aplicación, los resultados son bastante 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.

¿Alguna idea de lo que está pasando aquí? ¿WhatsApp utiliza algún tipo de solución no documentada o explota algún tipo de API privada?

Gracias de antemano por cualquier respuesta.

DPR
fuente

Respuestas:

6

Este es el último archivo de derechos de 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>

Este derecho específico parece ser la razón por la que se les permite no informar una llamada entrante:

com.apple.developer.pushkit.unrestricted-voip

No puedo encontrar ninguna documentación sobre este derecho, así que estoy bastante seguro de que Apple les ha otorgado un permiso especial.

rmendes
fuente
Bueno, misterio resuelto entonces. ¡Muchas gracias!
DPR