如何使用Google Play Developer API设置in-app update优先级
In-App Update 优先级配置落地实现
很多人卡优先级配置的核心原因是:Google Play 控制台没有提供可视化的优先级配置入口,这个值必须通过 Google Play Developer API 在版本发布流程中写入,控制台本身找不到输入框。
优先级基础规则
- 取值范围为0-5的整数,数值越高代表更新优先级越高
- 优先级和具体版本(对应versionCode)绑定,不是全局配置
- 客户端拉取到的优先级值,是当前设备已装版本到最新可更新版本之间,所有已发布版本设置的最高优先级,不是仅取最新版本的数值
举个例子:v1(versionCode=1,优先级1)、v2(versionCode=2,优先级3)、v3(versionCode=3,优先级2)三个版本,安装v1的用户拉取到的更新优先级是3,不是v3设置的2。
服务端配置优先级核心代码
不需要搭建复杂的全量管控服务,只需要在你现有的自动化发布流程里,调用Edits相关接口给对应版本设置优先级即可,以下是基于官方Java客户端的实现片段:
// 加载Play Console后台生成的服务账号认证文件 GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("play-service-account.json")) .createScoped(Collections.singleton(AndroidPublisherScopes.ANDROIDPUBLISHER)); AndroidPublisher publisherClient = new AndroidPublisher.Builder( GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), credential ).setApplicationName("your-app-package").build(); // 创建版本编辑会话 AppEdit editSession = publisherClient.edits().insert("your-app-package-name", null).execute(); String editId = editSession.getId(); // 给目标versionCode设置更新优先级,此处示例设为4(对应强制更新场景) TrackRelease targetRelease = new TrackRelease(); targetRelease.setVersionCodes(Collections.singletonList(targetVersionCode)); targetRelease.setInAppUpdatePriority(4); // 将配置绑定到对应发布轨道(示例为正式生产轨道) Track productionTrack = new Track(); productionTrack.setReleases(Collections.singletonList(targetRelease)); productionTrack.setTrack("production"); publisherClient.edits().tracks().update("your-app-package-name", editId, "production", productionTrack).execute(); // 提交编辑,配置生效 publisherClient.edits().commit("your-app-package-name", editId).execute();
注意:使用的服务账号必须提前在Play Console的API访问页面完成授权,授予版本管理、发布相关权限,否则接口会返回403错误。
客户端判断优先级选择更新类型的实现
客户端引入官方app-update依赖后,拉取更新信息时可直接拿到优先级值,自行判断更新类型即可,以下是Kotlin实现片段:
private val appUpdateManager by lazy { AppUpdateManagerFactory.create(applicationContext) } fun checkAppUpdate() { appUpdateManager.appUpdateInfo.addOnSuccessListener { updateInfo -> val priority = updateInfo.updatePriority() val hasUpdate = updateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE if (!hasUpdate) return@addOnSuccessListener when { // 优先级≥4 触发立即强制更新,用户无法关闭更新弹窗 priority >=4 && updateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE) -> { appUpdateManager.startUpdateFlowForResult( updateInfo, AppUpdateType.IMMEDIATE, currentActivity, REQ_CODE_IMMEDIATE_UPDATE ) } // 优先级2-3 触发灵活更新,支持后台下载、用户可暂时跳过 priority in 2..3 && updateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE) -> { appUpdateManager.startUpdateFlowForResult( updateInfo, AppUpdateType.FLEXIBLE, currentActivity, REQ_CODE_FLEXIBLE_UPDATE ) } // 优先级<2 不主动弹窗,仅在应用内设置页等位置提供弱更新提示 else -> { // 自定义弱提示逻辑 } } } }
常见踩坑说明
- 配置提交后不会立刻生效,内部测试轨道同步一般需要1-2分钟,正式轨道同步最多可能需要2小时,测试时不要刚提交就验证
- 不要反复修改同一个versionCode的优先级配置,Play侧会有缓存,修改不生效时建议升一个新的versionCode测试
- 优先级仅作为客户端判断更新策略的参数,Play不会根据这个值自动触发更新弹窗,所有更新交互逻辑全部需要客户端自行实现
内容的提问来源于stack exchange,提问作者Gopal
相关产品推荐
相关产品推荐

