Comment le client Web WhatsApp fonctionne-t-il toujours avec la dernière mise à jour iOS (SDK version 13.0+)?

9

La prise en charge du mode sombre a donc été ajoutée à la version 2.20.31 (publiée en mars 2020) du client WhatsApp. Il s'agit d'une fonctionnalité iOS 13 uniquement, et d'après l'apparence, il semble qu'il s'agisse d'une implémentation entièrement native. Je pense qu'il est prudent de supposer que l'application est maintenant en cours de compilation avec iOS SDK 13.0 ou supérieur.

Le fait est que, depuis iOS 13, Apple exige maintenant que l'écran d'appel natif soit affiché chaque fois qu'une notification VoIP est reçue - sinon, l'application ne recevra plus de notifications VoIP. Dans la version précédente d'iOS, certaines applications (y compris WhatsApp) semblent utiliser de "faux" appels VoIP entrants pour réactiver silencieusement l'application en arrière-plan lorsque l'utilisateur a tenté d'utiliser le client Web, afin que ce dernier puisse ensuite se connecter et échanger des données directement avec le téléphone.

Cependant, à partir de la dernière version, le client Web semble toujours fonctionner comme auparavant, malgré la restriction introduite par Apple. À l'aide d'un débogueur, il est possible d'observer le réveil de l'application iOS chaque fois que l'utilisateur ouvre le client Web sur un PC, mais aucun écran d'appel n'est jamais affiché. Cela peut être fait à plusieurs reprises et aussi souvent que nous le voulons.

Les journaux de WhatsApp semblent confirmer ce qui est écrit ci - dessus :

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 nous essayons de le faire avec notre application, les résultats sont assez différents :

error   18:56:19.949023+0000    callservicesd   Killing VoIP app com.xxxxx.xxxxx.xxxxx because it failed to post an incoming call in time.

Une idée de ce qui se passe ici? WhatsApp utilise-t-il une solution de contournement non documentée ou exploite-t-il une sorte d'API privée?

Merci d'avance pour n'importe quelle réponse.

DPR
la source

Réponses:

6

Voici le dernier fichier de droits 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>

Ce droit spécifique semble être la raison pour laquelle ils sont autorisés à ne pas signaler un appel entrant:

com.apple.developer.pushkit.unrestricted-voip

Je ne trouve aucune documentation concernant ce droit, donc je suis pratiquement sûr qu'ils ont reçu une autorisation spéciale d'Apple.

rmendes
la source
Eh bien, le mystère est alors résolu. Merci beaucoup!
DPR