WhatsApp 网络客户端如何仍然使用最新的 iOS 更新(SDK 版本 13.0+)?

DPR*_*DPR 17 ios whatsapp pushkit

暗模式支持已添加到 WhatsApp 客户端的 2.20.31 版(2020 年 3 月发布)中。这是一项仅限 iOS 13 的功能,从外观和感觉来看,它似乎是一个完全本机的实现。我认为可以安全地假设该应用程序现在正在使用 iOS SDK 13.0 或更高版本进行编译。

问题是,从 iOS 13 开始,Apple 现在要求在收到 VoIP 通知时显示本机呼叫屏幕- 否则,该应用程序将不会收到任何进一步的 VoIP 通知。在之前的 iOS 版本中,一些应用程序(包括 WhatsApp)似乎在用户尝试使用 Web 客户端时使用“假”传入 VoIP 呼叫在后台静默唤醒应用程序,以便后者可以直接连接和交换数据用手机。

但是,截至最新版本,尽管 Apple 引入了限制,但 Web 客户端似乎仍能像以前一样工作。使用调试器可以在用户在 PC 上打开 Web 客户端时观察到 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>
Run Code Online (Sandbox Code Playgroud)

如果我们尝试使用我们的应用程序执行此操作,结果会大不相同

error   18:56:19.949023+0000    callservicesd   Killing VoIP app com.xxxxx.xxxxx.xxxxx because it failed to post an incoming call in time.
Run Code Online (Sandbox Code Playgroud)

知道这里发生了什么吗?WhatsApp 是否使用任何未公开的解决方法或利用某种私有 API?

小智 17

这是 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>
Run Code Online (Sandbox Code Playgroud)

这个特定的权利似乎是允许他们不报告来电的原因:

com.apple.developer.pushkit.unrestricted-voip

我找不到有关此权利的任何文档,因此我很确定他们已获得 Apple 的特别许可。