You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式获取应用线上最新版本?附官方解决方案

问题

此前我一直通过如下Jsoup爬取代码,编程获取Google Play上的应用线上版本号:

try {
    newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + appPackageName + "&hl=en")
            .timeout(30000)
            .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
            .referrer("http://www.google.com")
            .get()
            .select(".hAyfc .htlgb")
            .get(7)
            .ownText();
} catch (IOException e) {
    e.printStackTrace();
}

从2022年5月末开始,这段代码持续抛出异常,无法正常获取版本信息。想确认是否有其他开发者遇到相同问题,求可行的修复方案。

解决方案

爬取Play商店网页的方案本身就不受官方保障,只要Google调整前端页面结构、元素类名,原有选择器就会直接失效。目前Google已经为应用版本检测、应用内更新场景提供了官方支持,直接使用官方提供的AppUpdateManager即可稳定实现相关需求。

核心实现依赖 AppUpdateManager 类,属于Google Play Core库提供的官方能力。

检查更新可用性

发起更新流程前首先需要检测是否存在可用更新,基础实现代码如下:

// 初始化更新管理器实例
AppUpdateManager appUpdateManager = AppUpdateManagerFactory.create(context);
    
// 获取用于检查更新的任务对象
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
    
// 校验当前平台是否允许指定类型的更新
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
    if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
          // 若需使用灵活更新类型,请替换为AppUpdateType.FLEXIBLE
          && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) {
              // 此处发起更新请求
    } 
}); 

接口返回的AppUpdateInfo对象包含完整的更新状态信息:

  • 若存在可用更新,且你配置的更新类型(立即更新/灵活更新)被允许,对象中会携带启动更新流程所需的intent,可直接调用启动更新
  • 若当前已有正在进行中的应用内更新,返回结果也会同步上报该更新的进度状态

该方案经多场景实测稳定可用,不会因为Play商店前端页面结构调整失效,推荐所有有版本检测需求的开发者替换使用。


内容的提问来源于stack exchange,提问作者AmigoPal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 09:39:19