如何在Flutter应用中获取Google Play商店的发布与更新日期?
解决方案:获取Google Play商店的应用发布/更新日期
package_info_plus仅能读取本地安装包的元数据,无法获取Google Play商店的线上数据,以下是几种可行方案:
1. 使用Google Play Android Developer API(官方可靠方案)
这是最稳定的实现方式,但需要配置开发者权限:
- 前往Google Cloud Console,启用Google Play Android Developer API
- 创建服务账号,下载JSON格式的密钥文件
- 在Google Play Console中,将服务账号添加为项目成员,授予「查看应用信息」的权限
- 在Flutter项目中借助
http库调用API,获取应用版本历史与基础信息:- 先通过服务账号生成OAuth2访问令牌(可使用
googleapis_auth库简化流程) - 调用
tracks.list接口获取各版本的更新时间,最早的版本时间即为发布日期,最新版本时间即为更新日期 - 示例代码片段:
import 'package:http/http.dart' as http; import 'dart:convert'; Future<void> fetchPlayStoreDates(String packageName, String token) async { final response = await http.get( Uri.parse('https://androidpublisher.googleapis.com/androidpublisher/v3/applications/$packageName/tracks'), headers: {'Authorization': 'Bearer $token'}, ); if (response.statusCode == 200) { final data = jsonDecode(response.body); // 解析tracks中的versionCodes和releaseTime,提取最早/最新日期 // 具体逻辑需根据API返回结构调整 } }
- 先通过服务账号生成OAuth2访问令牌(可使用
2. 远程配置+手动维护(简单易实现)
如果不想配置复杂的API,可通过远程配置工具存储日期并手动维护:
- 集成Firebase Remote Config(或其他同类服务)到Flutter项目
- 在远程配置后台添加两个参数:
release_date(格式如「2023-01-01」)和update_date - 每次应用在Play商店更新后,手动更新远程配置中的日期值
- 应用启动时拉取远程配置,在关于页面展示:
import 'package:firebase_remote_config/firebase_remote_config.dart'; Future<void> initRemoteConfig() async { final remoteConfig = FirebaseRemoteConfig.instance; await remoteConfig.setConfigSettings(RemoteConfigSettings( fetchTimeout: const Duration(minutes: 1), minimumFetchInterval: const Duration(hours: 6), )); await remoteConfig.fetchAndActivate(); final releaseDate = remoteConfig.getString('release_date'); final updateDate = remoteConfig.getString('update_date'); // 展示日期 }
3. 网页抓取(不推荐)
可爬取Google Play应用详情页的HTML内容解析日期,但Play页面结构随时可能变化,且可能违反Google服务条款:
- 使用
http库获取页面内容,用html库解析DOM - 示例代码片段:
import 'package:http/http.dart' as http; import 'package:html/parser.dart' as parser; import 'package:html/dom.dart' as dom; Future<void> scrapePlayStoreDates(String packageName) async { final response = await http.get(Uri.parse('https://play.google.com/store/apps/details?id=$packageName')); if (response.statusCode == 200) { final document = parser.parse(response.body); // 查找包含日期的元素(注意:类名可能随时变化) final dateElements = document.querySelectorAll('.xg1aie'); if (dateElements.length >= 2) { final releaseDate = dateElements[0].text; final updateDate = dateElements[1].text; // 展示日期 } } }
内容的提问来源于stack exchange,提问作者Ahmed Ha. K
相关产品推荐
相关产品推荐

