Таким образом, поддержка темного режима была добавлена в версию 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?
Заранее спасибо за любые ответы.