Como o cliente Web WhatsApp ainda funciona com a atualização mais recente do iOS (SDK versão 13.0 ou posterior)?

9

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.

DPR
fonte

Respostas:

6

Este é o arquivo de direitos mais recentes do 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>

Esse direito específico parece ser o motivo pelo qual eles têm permissão para não relatar uma chamada recebida:

com.apple.developer.pushkit.unrestricted-voip

Não consigo encontrar nenhuma documentação sobre esse direito, por isso tenho certeza de que eles receberam uma permissão especial da Apple.

rmendes
fonte
Bem, o mistério foi resolvido então. Muito obrigado!
DPR