[Flutter] 스토어에서 앱 버전 정보 가져오기

han·2025년 6월 4일

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

스토어 버전 정보 확인 필요성

  • 앱의 최신 버전을 사용자에게 알리고 업데이트를 유도하는 기능은 중요하다.
  • 마이페이지나 설정 페이지에서 최신 버전을 표시하거나, 강제 업데이트를 실행할 때 활용할 수 있다.

Flutter package를 이용한 스토어 버전을 확인 방법

문제점

서버에서 앱 버전을 관리하는 방식은 스토어에 실제 배포된 버전과 차이가 발생할 수 있습니다. 업데이트가 스토어에 즉시 반영되지 않을 수 있기 때문입니다.

해결 방법

디바이스에서 직접 스토어의 최신 앱 정보를 가져와 확인하는 것이 가장 안전합니다.
Flutter에서는 HTTP 통신을 이용하여 각 스토어의 웹페이지 정보를 파싱하여 버전 정보를 가져올 수 있습니다.

구현 예시

다음은 Android와 iOS 스토어에서 최신 버전을 가져오는 방법의 예시입니다.

Android (Play Store)

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;
}

iOS (App Store)

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 패키지를 사용하여 앱의 버전 및 빌드 번호를 런타임에 동적으로 가져올 수 있다.
profile
개인 공부 및 기록겸 벨로그 시작

0개의 댓글