애플리케이션의 새 버전을 출시할 때 사용자에게 이를 알리고 싶을 것입니다. 심각한 버그를 수정했든, 새로운 기능을 추가했든, 아니면 애플리케이션이 더 원활하게 또는 더 빠르게 실행되는지 여부를 알아야 합니다.
애플리케이션 개발자로서 우리는 모든 사용자가 애플리케이션의 최신 버전을 사용하기를 원합니다.
하지만 사용자가 애플리케이션의 새 버전을 알 수 있도록 하려면 어떻게 해야 할까요?
해당 질문에 대한 대답은 매우 간단합니다. 새 버전의 애플리케이션이 출시되면 알려주는 것이 어떨까요?
다양한 방법으로 이를 수행할 수 있습니다:
- 푸시 알림 사용
- 애플리케이션이 시작되면 알려주세요
이 글에서는 푸시 알림을 다루지 않습니다. 대신 우리는 (한두 개의 패키지를 사용하여) 사용자에게 애플리케이션의 새 버전이 출시되었음을 알리고 업데이트를 처리하는 방법을 알리는 대화 상자를 표시할 수 있는 방법을 보여주는 데 중점을 둘 것입니다.
잠깐만요, 이미 포함되어 있지 않나요?
이런 종류의 기능은 최신 모바일 OS 시스템에 이미 포함되어 있어야 한다고 생각할 것입니다. 그리고 당신 말이 맞을 것입니다. 그러나 Android에만 해당됩니다.
iOS는 (현재) 개발자에게 애플리케이션의 새 버전이 있는지 확인하고 이에 대해 사용자에게 알릴 수 있는 기능을 제공하지 않습니다. Android에는 Google Play 라이브러리의 일부인 인앱 업데이트 라이브러리가 있습니다.
이 때문에 그리고 Flutter는 두 플랫폼을 모두 지원하므로 애플리케이션의 버전 업데이트를 처리하는 데 도움이 되는 두 가지 중요한 패키지를 살펴보겠습니다.
- 업그레이드
- 인앱 업데이트
둘 다 원하는 결과를 얻을 수 있지만 수행 방법은 매우 다양합니다.
시작하기 전에 Google Play 스토어에서 직접 설치된 애플리케이션 버전이 있어야 한다는 점을 이해하는 것이 중요합니다 . 두 패키지 모두 Google Play 서비스와 애플리케이션 소유자를 확인하는 기능을 사용하므로 이는 필요합니다.
그렇게 하지 않으면 패키지 중 하나를 사용하려고 할 때 다음 오류가 표시됩니다:
_설치 오류(-10):이 기기의 어떤 사용자도 앱을 소유하고 있지 않습니다. Play에서 앱을 획득한 경우 해당 앱은 '소유'된 것입니다. (https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_APP_NOT소유)
인앱 업데이트 패키지 사용 방법
즉시 이 패키지는 Android에서만 작동한다는 것을 알아야 합니다. 이는 내부 작동을 위해 앱 내 업데이트 라이브러리에 의존하기 때문입니다.
이 패키지는 기본적으로 Android 라이브러리의 래퍼입니다. 다음은 노출된 API 메소드입니다:
Future<AppUpdateInfo> checkForUpdate():사용 가능한 업데이트가 있는지 확인Future<AppUpdateResult> performImmediateUpdate():즉시 업데이트를 수행합니다(전체 화면)Future<AppUpdateResult> startFlexibleUpdate():유연한 업데이트를 시작합니다(백그라운드 다운로드)Future<void> completeFlexibleUpdate():실제로 사용 가능한 유연한 업데이트를 설치합니다.
✋ 즉시 업데이트와 유연한 업데이트의 차이점에 대해 자세히 알아보려면 여기로 이동하세요.
패키지 설정 방법
먼저 pubspec.yaml 파일에 패키지를 추가하세요:
dependencies:
flutter:
sdk: flutter
in_app_update: ^3.0.0
그런 다음 pub get을 수행합니다.
앱 업데이트를 처리하기 위한 로직을 수행하려는 애플리케이션 내에서 다음 가져오기를 추가하세요.
import 'package:in_app_update/in_app_update.dart';
먼저 애플리케이션에 업데이트가 있는지 확인하는 로직을 추가해야 합니다. 이를 위해 checkForUpdate를 사용합니다. 방법. 반환 값은 앱 업데이트의 가용성 및 진행 상황에 대한 정보가 포함된 Future입니다.
updateAvailability 속성을 사용하여 업데이트가 가능한지 확인할 수 있습니다. 업데이트가 가능한 경우 값은 UPDATE_AVAILABLE입니다. . 따라서 귀하의 방법은 다음과 같습니다:
InAppUpdate.checkForUpdate().then((updateInfo) {
if (updateInfo.updateAvailability == UpdateAvailability.updateAvailable) {
//Logic to perform an update
}
});
다음으로, 어떤 종류의 업데이트(유연한 업데이트 또는 즉각적인 업데이트)를 트리거할지 결정해야 합니다.
즉각적인 업데이트는 사용자에게 중요한 애플리케이션 업데이트를 위해 예약되어야 합니다. 이는 심각한 버그를 수정하거나 새로운 기능을 제공하는 버전을 의미할 수 있습니다.
즉시 업데이트를 시작하려면 performImmediateUpdate를 사용할 수 있습니다. 방법. 이 메서드는 업데이트가 성공했는지 여부를 알려주는 AppUpdateResult 열거형을 반환합니다.
이 메서드를 호출하기 전에 즉시 업데이트를 실행할 수 있는지 확인해야 합니다. immediateUpdateAllowed에 액세스하여 이를 수행합니다. AppUpdateInfo 개체에 플래그를 지정하세요.
유연한 업데이트를 실행하려면 startFleixbleUpdate를 사용합니다. 방법. 이는 백그라운드에서 실행되며 즉시 업데이트 방법과 유사합니다. 또한 AppUpdateResult 열거형을 반환합니다.
이 시나리오에서 업데이트가 성공했다면 completeFlexibleUpdate를 호출해야 합니다. 애플리케이션에 업데이트를 설치하는 방법입니다.
따라서 위의 코드 조각을 보고 다양한 유형의 업데이트에 대한 논리를 추가하면 다음과 같습니다.
InAppUpdate.checkForUpdate().then((updateInfo) {
if (updateInfo.updateAvailability == UpdateAvailability.updateAvailable) {
if (updateInfo.immediateUpdateAllowed) {
// Perform immediate update
InAppUpdate.performImmediateUpdate().then((appUpdateResult) {
if (appUpdateResult == AppUpdateResult.success) {
//App Update successful
}
});
} else if (updateInfo.flexibleUpdateAllowed) {
//Perform flexible update
InAppUpdate.startFlexibleUpdate().then((appUpdateResult) {
if (appUpdateResult == AppUpdateResult.success) {
//App Update successful
InAppUpdate.completeFlexibleUpdate();
}
});
}
}
});
업그레이드 패키지 사용 방법
첫 번째 옵션과 달리 이 옵션은 iOS와 Android 모두에 대한 솔루션을 제공합니다. 이는 저장소에서 데이터를 수집하고 이를 애플리케이션 자체의 현재 데이터와 비교하여 확인하는 데 의존합니다.
데이터를 쿼리하는 API 대신 이 패키지에는 내부적으로 논리를 수행하는 위젯이 있습니다.
패키지 설정 방법
먼저 pubspec.yaml 파일에 패키지를 추가하세요:
dependencies:
flutter:
sdk: flutter
upgrader: ^5.0.0
그런 다음 pub get을 수행합니다.
앱 업데이트를 처리하기 위한 로직을 수행하려는 애플리케이션 내에서 다음 가져오기를 추가하세요.
import 'package:upgrader/upgrader.dart';
이 두 옵션의 주요 차이점은 UI에 불과하므로 가장 적합한 옵션을 선택하세요.
이 패키지를 통합하려면 UpgradeAlert로 본문 위젯을 래핑해야 합니다. 또는 UpgradeCard . 아래는 예시입니다:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: applicationName,
home: UpgradeAlert( /// <------------------
child: MainPage(
key: Key("YOUR_KEY"),
title: applicationName
),
)
);
}
}
스토어에서 애플리케이션의 새 버전을 사용할 수 있는 경우 다음이 표시됩니다:
테스트하려면 다음을 추가하세요:
await Upgrader.clearSavedSettings()
main.dart 파일의 기본 메소드 내부에 있습니다.
아시다시피 Upgrader 패키지에 대해 설정할 수 있는 구성은 다양합니다. 직접 가서 확인해 보시기를 적극 권장합니다.
패키지 테스트 방법
어떤 패키지를 선택하든 관계없이 논리가 제대로 작동하는지 알아야 합니다.
하지만 애플리케이션의 공식 버전을 출시하지 않고 어떻게 그렇게 할 수 있습니까? Google Play Console에서 내부 테스트 옵션을 사용할 수 있습니다. 내부 테스터에게 애플리케이션의 새 버전을 공개하면 공개 버전이 아니며 업그레이드 기능을 테스트할 수 있습니다.
당신이 해야 할 일은 다음과 같습니다:
- Google Play Console 계정에 로그인하고 업데이트 로직을 적용하기 위해 작업 중인 애플리케이션으로 이동하세요.
- 설정 → 내부 앱 공유에서 테스터 관리로 이동하여 테스터가 공유 애플리케이션을 다운로드하고 설치할 수 있도록 허용하세요. 링크나 이메일을 통해 선택하실 수 있습니다.
- 그런 다음 테스트 → 내부 테스트로 이동하여 새 릴리스 만들기 버튼(오른쪽 상단)을 클릭하세요.
- 릴리스를 수행한 후에는 기본 내부 테스트 페이지로 돌아가 테스터 탭을 클릭할 수 있습니다. 거기에서 테스터 이메일이 포함된 목록을 볼 수 있습니다(현재는 비어 있음). 파란색 화살표 아이콘을 클릭하세요.
- 이 화면에서 자신을 내부 테스터로 추가할 수 있습니다(이메일 주소 추가에서).
- 완료되면 내부 테스트 창으로 돌아갈 수 있습니다. 아래로 스크롤하면 테스터가 테스트에 참여하는 방법이 표시됩니다. 링크 복사 버튼이 표시됩니다.
이제 버튼을 클릭하고 링크를 자신에게 보내면 새 버전의 애플리케이션을 다운로드할 수 있습니다.
위 단계 중 하나를 수행하지 못하면 생성된 링크가 찾을 수 없음(오류 404) 페이지로 연결됩니다:
모든 작업을 성공적으로 수행했다면 생성된 링크를 클릭하면 다음이 표시됩니다:
이 오류가 표시되는 경우:
_Install Error(-6):현재 장치 상태(예:배터리 부족, 디스크 공간 부족 등)로 인해 다운로드/설치가 허용되지 않습니다. (https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_INSTALL_NOT허용됨)
이는 에뮬레이트된 기기에서 애플리케이션을 실행하고 있으며 해당 기기에 Google Play 스토어를 설치하고 로그인해야 함을 의미할 수 있습니다.
마무리
앱 내 업데이트 패키지를 내 애플리케이션과 통합할 때 동일한 프로세스를 거쳐야 했기 때문에 이 글을 작성했습니다.
Google Play 스토어에서 확인해 보세요.
여기에서 전체 소스 코드를 확인하세요:
읽어주셔서 감사합니다!
무료로 코딩을 배우세요. freeCodeCamp의 오픈 소스 커리큘럼은 40,000명 이상의 사람들이 개발자로 취업하는 데 도움을 주었습니다. 시작하세요