Flutter 모바일 애플리케이션 자동 업데이트 구현 예제

Flutter 앱을 지속적으로 최신 상태로 유지하는 것은 사용자 경험을 향상하고 보안성을 강화하는 중요한 요소입니다. 이번 글에서는 app_version_update 패키지를 활용하여 Flutter 애플리케이션에서 간편하게 자동 업데이트를 구현하는 방법을 단계별로 안내하겠습니다.

Flutter 모바일 애플리케이션 자동 업데이트 구현 예제Flutter 모바일 애플리케이션 자동 업데이트 구현 예제


1. 사전 준비 사항

Flutter 프로젝트를 열고, 터미널에서 다음 명령어로 app_version_update 패키지를 추가하세요.

flutter pub add app_version_update

이 패키지는 최신 버전 정보를 확인하고 업데이트 여부를 결정할 수 있는 기능을 제공합니다.

2. 최신 버전 확인 로직 구현

app_version_update 패키지는 서버에 버전 정보를 요청하고, 로컬 앱 버전과 비교해 업데이트가 필요한지 확인합니다. 이를 위해 먼저 버전 정보가 포함된 JSON 파일을 서버에 업로드해야 합니다. 파일에는 현재 최신 버전 번호와 다운로드 URL이 포함되어 있어야 합니다.

예제 JSON 파일 (https://example.com/version.json)

{
  "version": "1.1.0",
  "force": true,
  "url": "https://example.com/download/app.apk"
}
  • version: 최신 버전 번호입니다.
  • force: 강제 업데이트 여부를 결정합니다. (true일 경우, 업데이트가 필수로 요구됨)
  • url: APK 다운로드 링크입니다.

3. 업데이트 확인 로직 추가

다음으로, 앱에서 이 JSON 파일을 읽어 현재 버전과 비교하는 로직을 구현해야 합니다.

import 'package:app_version_update/app_version_update.dart';

Future<void> checkForUpdates(BuildContext context) async {
  final appVersionUpdate = AppVersionUpdate(
    androidUrl: 'https://example.com/version.json', 
  );

  final info = await appVersionUpdate.fetchUpdateInfo();

  if (info.canUpdate) {
    _showUpdateDialog(context, info.downloadUrl, info.forceUpdate);
  }
}

void _showUpdateDialog(BuildContext context, String url, bool forceUpdate) {
  showDialog(
    context: context,
    barrierDismissible: !forceUpdate,
    builder: (BuildContext context) {
      return AlertDialog(
        title: Text("업데이트 필요"),
        content: Text("새로운 버전이 있습니다. 업데이트하시겠습니까?"),
        actions: <Widget>[
          TextButton(
            onPressed: () {
              if (forceUpdate) return;
              Navigator.of(context).pop();
            },
            child: Text("나중에"),
          ),
          TextButton(
            onPressed: () {
              _launchURL(url);
            },
            child: Text("업데이트"),
          ),
        ],
      );
    },
  );
}

void _launchURL(String url) async {
  if (await canLaunch(url)) {
    await launch(url);
  } else {
    throw 'Could not launch $url';
  }
}

4. 주요 함수 설명

  • fetchUpdateInfo: 서버의 최신 버전 정보를 가져와 현재 앱 버전과 비교합니다.
  • canUpdate: 현재 앱 버전보다 서버의 최신 버전이 높은 경우 true를 반환합니다.
  • _showUpdateDialog: 업데이트가 필요할 때 표시할 다이얼로그를 구성합니다.
  • _launchURL: 사용자가 "업데이트" 버튼을 클릭하면 APK 다운로드 페이지로 이동합니다.

5. 업데이트 알림 구성

위 로직을 initState 또는 앱의 특정 초기화 시점에 추가하여, 앱 실행 시 업데이트 여부를 확인하도록 설정합니다.

@override
void initState() {
  super.initState();
  checkForUpdates(context);
}

결론

app_version_update 패키지를 사용하면 Flutter 애플리케이션에 자동 업데이트 기능을 간편하게 추가할 수 있습니다.