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.