플러터 앱에서 앱 스토어(App Store)나 플레이 스토어(Play Store)에 배포된 최신 버전 정보를 가져오는 방법에 대해 알아보고자 한다.

- 앱의 최신 버전을 사용자에게 알리고 업데이트를 유도하는 기능은 중요하다.
- 마이페이지나 설정 페이지에서 최신 버전을 표시하거나, 강제 업데이트를 실행할 때 활용할 수 있다.
서버에서 앱 버전을 관리하는 방식은 스토어에 실제 배포된 버전과 차이가 발생할 수 있습니다. 업데이트가 스토어에 즉시 반영되지 않을 수 있기 때문입니다.
디바이스에서 직접 스토어의 최신 앱 정보를 가져와 확인하는 것이 가장 안전합니다.
Flutter에서는 HTTP 통신을 이용하여 각 스토어의 웹페이지 정보를 파싱하여 버전 정보를 가져올 수 있습니다.
다음은 Android와 iOS 스토어에서 최신 버전을 가져오는 방법의 예시입니다.
Future<String?> currentStoreVersion(String packageName) async {
try {
final http.Response _response = await http.get(Uri.parse(
"https://play.google.com/store/apps/details?id=$packageName&gl=US"));
if (_response.statusCode == 200) {
RegExp regexp =
RegExp(r'\[\[\[\"(\d+\.\d+(\.[a-z]+)?(\.([^"]|\\")*)?)\"\]\]');
String? _version = regexp.firstMatch(_response.body)?.group(1);
return _version;
}
} catch (e) {
return null;
}
return null;
}
Future<String?> currentStoreVersion(String bundleId) async {
try {
Uri _uri = Uri.https(
"itunes.apple.com",
"/lookup",
{"bundleId": bundleId},
);
final Response _response = await _dio.get(_uri.toString());
if (_response.statusCode == 200) {
final jsonObj = json.decode(_response.data);
String? _version = jsonObj['results'][0]['version'];
return _version;
}
} catch (e) {
return null;
}
return null;
}
- 오류 처리: 스토어 페이로드(payload) 값이 변경될 수 있으므로, 값을 가져오지 못했을 때 적절한 예외 처리가 필요
- 강제 업데이트: 강제 업데이트 기능을 구현하여 사용자가 최신 버전을 사용하도록 유도
- 패키지 사용: package_info_plus 패키지를 사용하여 앱의 버전 및 빌드 번호를 런타임에 동적으로 가져올 수 있다.