W jaki sposób klient sieci WhatsApp nadal działa z najnowszą aktualizacją iOS (SDK w wersji 13.0+)?

9

Tak więc obsługa trybu ciemnego została dodana do wersji 2.20.31 (wydanej w marcu 2020 r.) Klienta WhatsApp. Jest to funkcja dostępna tylko w systemie iOS 13, a jej wygląd wydaje się być w pełni natywną implementacją. Myślę, że można bezpiecznie założyć, że aplikacja jest teraz kompilowana z iOS SDK 13.0 lub nowszym.

Chodzi o to, że od iOS 13 Apple wymaga teraz wyświetlania natywnego ekranu połączenia za każdym razem, gdy odbierane jest powiadomienie VoIP - w przeciwnym razie aplikacja nie będzie otrzymywać żadnych dalszych powiadomień VoIP. W poprzedniej wersji iOS niektóre aplikacje (w tym WhatsApp) wykorzystywały „fałszywe” przychodzące połączenia VoIP, aby cicho obudzić aplikację w tle, gdy użytkownik próbował użyć klienta internetowego, aby mógł on następnie łączyć się i wymieniać dane bezpośrednio z telefonem.

Jednak od najnowszej wersji klient sieci Web nadal działa tak jak wcześniej, pomimo ograniczeń wprowadzonych przez Apple. Za pomocą debugera można obserwować budzenie się aplikacji na iOS za każdym razem, gdy użytkownik otwiera klienta WWW na komputerze, ale ekrany połączeń nie są nigdy wyświetlane. Można to zrobić wielokrotnie i tak często, jak chcemy.

Dzienniki z WhatsApp wydają się potwierdzać to, co napisano powyżej :

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>

Jeśli spróbujemy to zrobić w naszej aplikacji, wyniki będą zupełnie inne :

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

Masz pomysł, co się tutaj dzieje? Czy WhatsApp używa jakiegoś nieudokumentowanego obejścia lub wykorzystuje jakiś prywatny interfejs API?

Z góry dziękuję za wszelkie odpowiedzi.

DPR
źródło

Odpowiedzi:

6

To jest najnowszy plik uprawnień 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>

Wydaje się, że to szczególne uprawnienie nie pozwala zgłaszać połączenia przychodzącego:

com.apple.developer.pushkit.unrestricted-voip

Nie mogę znaleźć żadnej dokumentacji dotyczącej tego uprawnienia, więc jestem prawie pewien, że Apple uzyskało specjalne pozwolenie.

rmendes
źródło
Cóż, tajemnica rozwiązana. Dziękuję Ci bardzo!
DPR