Google Play 安装 APP 时一直等待中的解决办法

Google Play 安装 APP 时一直等待中的解决办法

先说方法

前提:*.googleapis.com​要通过proxy访问

然后

  1. 保证services.googleapis.cn​和*.xn--ngstr-lra8j.com​都是direct国内直连状态

或者

  1. 保证services.googleapis.cn​和*.xn--ngstr-lra8j.com​都是proxy访问状态

分析

最近Google Play下载应用一直显示等待中,然后我网站查询了一下,发现几个可用的解决办法

  • 换节点(反正就只一直换就完了)
  • 等待下载时关掉梯子
  • 添加规则DOMAIN-SUFFIX,services.googleapis.cn,PROXY
  • 添加规则DOMAIN-SUFFIX,xn--ngstr-lra8j.com,DIRECT

这几个都能解决问题,但是勾起了我的兴趣,为什么四个看起来完全不相干的解决措施却都能够解决问题呢,这其中是不是有更深层次的原因呢,经过一番研究,我认为是以下原因:

Google Play点击安装APP时的流程是这样的

  1. 点击安装,进入等待中状态;
  2. 访问https://play-fe.googleapis.com/fdfe/delivery​,返回应用的下载链接https://services.googleapis.cn/download/by-token/download​。PS: 这里根据Google Play区域设置的不同返回不同的域名,对于中国,域名为services.googleapis.cn
  3. 访问步骤2返回的下载链接services.googleapis.cn​,返回302跳转到真正的Google全球CDN下载地址https://[xxxx].xn--ngstr-lra8j.com/play-apps-download-latchsky/download/by-id/​。PS: 从国内访问services.googleapis.cn​会返回Google国内CDN地址,通过proxy访问services.googleapis.cn​会返回Google国外CDN地址。
  4. 访问步骤3中返回的Google CDN下载地址[xxxx].xn--ngstr-lra8j.com​,若成功访问,则开始下载应用,否则一直显示等待中

所以为什么我们在开启proxy的情况下还是经常遇到等待中的情况呢,问题其实出在步骤4, 大部分机场提供的clash文件会把services.googleapis.cn分流到DIRECT国内直连,把[xxxx].xn--ngstr-lra8j.com分流到PROXY连接 。这就导致了这样一种情况,在步骤3中,由于未经过proxy走的国内直连,所以services.googleapis.cn​返回的CDN下载地址是国内的CDN,这时在步骤4中,会通过proxy连接这个步骤3返回的国内CDN下载地址,然而Google的这个国内CDN屏蔽了国外服务器的访问(也就是你proxy所在的服务器),这就导致访问不能成功,也就会一直等待中。

了解了问题出在哪,我们就知道四个解决方法是如何解决问题的了:

对于方法1:换节点,只要我们能换到一个不被Google国内CDN屏蔽的国外节点,那么自然就可以成功

对于方法2:等待下载时关梯子,只要我们在步骤4访问Google国内CDN的同时关闭梯子,这时就会直连Google国内CDN,从而下载成功

对于方法3:让services.googleapis.cn​通过代理连接,这样步骤3返回的就是Google的国外CDN节点,通过proxy连接国外CDN下载链接自然没有问题,从而下载成功

对于方法4:让*.xn--ngstr-lra8j.com​通过国内直连,国内访问步骤3返回的Google国内CDN自然没有问题,从而下载成功