Как веб-клиент WhatsApp по-прежнему работает с последним обновлением iOS (SDK версии 13.0+)?

9

Таким образом, поддержка темного режима была добавлена ​​в версию 2.20.31 (выпущенную в марте 2020 года) клиента WhatsApp. Это функция только для iOS 13, и, судя по всему, это полностью нативная реализация. Я думаю, можно с уверенностью предположить, что приложение сейчас компилируется с iOS SDK 13.0 или выше.

Дело в том, что, начиная с iOS 13, Apple теперь требует, чтобы при каждом получении уведомления VoIP отображался собственный экран вызова - в противном случае приложение не будет получать дальнейшие уведомления VoIP. В предыдущей версии iOS некоторые приложения (включая WhatsApp), по-видимому, использовали «фальшивые» входящие вызовы VoIP, чтобы молча разбудить приложение в фоновом режиме, когда пользователь пытался использовать веб-клиент, чтобы последний мог затем подключаться и обмениваться данными напрямую. с телефоном.

Однако, начиная с последней версии, веб-клиент все еще работает, как и прежде, несмотря на ограничения, введенные Apple. Используя отладчик, можно наблюдать, как приложение iOS просыпается, когда пользователь открывает веб-клиент на ПК, но экраны вызовов не отображаются. Это может быть сделано повторно и так часто, как мы хотим.

Журналы от WhatsApp, кажется, подтверждают то, что написано выше :

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>

Если мы попытаемся сделать это с нашим приложением, результаты будут совсем другими :

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

Есть идеи, что здесь происходит? Использует ли WhatsApp какой-либо недокументированный обходной путь или использует какой-то частный API?

Заранее спасибо за любые ответы.

DPR
источник

Ответы:

6

Это последний файл прав 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>

Это конкретное право, по-видимому, является причиной того, что им разрешено не сообщать о входящем звонке:

com.apple.developer.pushkit.unrestricted-voip

Я не могу найти никаких документов, касающихся этого права, поэтому я почти уверен, что они получили специальное разрешение от Apple.

rmendes
источник
Ну, тогда загадка разгадана. Большое спасибо!
ДНР