Understanding Live Updates in Capgo
Live updates are one of the most powerful features in Capacitor apps, allowing real-time updates without app store submissions. Let’s dive deep into how Capgo implements this functionality.
기본 개념
Capacitor 앱은 두 개의 주요 층으로 구성됩니다.
- 웹 층: WebView에서 로드되는 HTML, CSS 및 JavaScript 파일을 포함합니다.
- 네이티브 층: Android의 경우 Java/Kotlin, iOS의 경우 Swift로 플랫폼에 특화된 code을 포함합니다.
Capgo의 라이브 업데이트 시스템은 앱 바이너리에 컴파일되지 않은 WebView에서 로드되는 파일을 대체하여 작동합니다.
기술 구현
Capacitor의 서버 경로
Capgo은 두 개의 중요한 경로를 관리합니다.
- 현재 서버 경로: 현재 WebView에서 로드되는 파일을 가리킵니다.
- 다음 서버 경로: 앱 재시작 시 로드 될 파일에 대한 지시자
안드로이드 구현
안드로이드에서 Capgo은 다음 경로를 관리합니다:
// Store next server path
private void setNextCapacitorServerPath(String path) {
SharedPreferences prefs = context.getSharedPreferences("CapWebViewSettings", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("serverBasePath", path);
editor.apply();
}
// Update current path and reload
private void setCurrentCapacitorServerPath(String path) {
bridge.setServerBasePath(path);
bridge.reload();
}
iOS 구현
iOS에서 경로는 다음으로 관리됩니다:
// Store next server path
private func setNextCapacitorServerPath(path: String) {
KeyValueStore.standard["serverBasePath"] = path
}
// Update current path
private func setCurrentCapacitorServerPath(path: String) {
bridge.viewController.setServerBasePath(path: path)
}
보안 조치
Capgo은 개발에서 배포까지 앱 업데이트가 완전히 안전하도록 군사급 보안을 제공하는 종단 간 암호화 구현을 통해 보안을 제공합니다. 우리의 암호화 시스템은 전통적인 code 서명보다 더 나은 진실의 zero-knowledge 보안을 제공합니다.
종단 간 암호화 아키텍처
-
종단 간 암호화 (E2EE): 개발 환경을 떠나기 전에 모든 업데이트 번들을 AES-256-GCM 암호화하여 암호화합니다. 이 군사급 암호화는 앱 업데이트가 전달 과정의 모든 단계에서 완전히 개인적이고 안전하도록 합니다.
-
zero-knowledge 아키텍처: Capgo은 다른 OTA 업데이트 솔루션만 업데이트를 서명하는 것에만 집중하는 것과 달리,真正의 0-지식 암호화를 사용합니다. 이것은 의미:
- 업데이트 내용은 업로드하기 전에 암호화됩니다
- Capgo 서버는 암호화된 데이터만 저장합니다
- 암호화는 사용자 기기에서만 발생합니다
- 업데이트 내용에 대한 중간 매체의 접근이 불가능합니다
-
보안 키 관리:
- 암호화 키는 CI/CD 환경에서 안전하게 생성되고 저장됩니다
- 개인 키는 Capgo 서버에 절대 접근하지 않습니다
- 각 앱 버전은 고유한 암호화 키를 사용할 수 있습니다
- 키 회전을 지원하여 보안을 강화합니다
__CAPGO_KEEP_0__ Live Updates의 상세 설명서에서我们的 암호화 시스템에 대해 자세히 알아보세요 Capgo Live Updates에서 끝에서 끝까지 암호화
업데이트 보안 프로세스
-
파일 전송 전 암호화:
- 업데이트는 CI/CD PIPELINE에서 암호화됩니다
- 각 파일은 개별적으로 암호화됩니다
- 메타데이터도 완전한 개인 정보를 위해 암호화됩니다
-
안전한 저장소:
- 암호화된 패키지는 Capgo의 글로벌 CDN에 저장됩니다
- 플레인 텍스트 데이터는 우리 서버에 절대 닿지 않습니다
- 서버 침해의 경우에도 데이터는 안전합니다
-
안전한 전달:
- 업데이트는 암호화된 채널을 통해 전달됩니다
- 각 앱 인스턴스는 암호화된 데이터의 무결성을 검증합니다
- 자동 재시도 메커니즘을 위한 암호화 실패
-
클라이언트 측 보안:
- 업데이트는 설치 전에 검증됩니다
- 암호화 실패는 자동 롤백을 트리거합니다
- 앱의 보호된 저장소에서 안전한 키 저장
이 종합적인 보안 접근 방식은 앱 업데이트가 다음 공격에 안전하도록 보장합니다:
- 인간 공격
- 서버 측 침해
- 권한이 없는 수정
- 재생 공격
- 콘텐츠 조작
업데이트 라이프 사이클
Capgo의 업데이트 프로세스는 기본적으로 자동화되어 있습니다. 자동화된 프로세스는 어떻게 작동하는지 설명해 드리겠습니다.
1. 자동 업데이트 확인
플러그인은 다음 상황에서 자동으로 업데이트 확인을 수행합니다:
- 앱이 시작될 때
이 동작은 다음 설정에 의해 제어됩니다: autoUpdate 또한 수동으로 확인할 수 있습니다.
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true // Enable automatic updates
}
}
}
2. 자동 다운로드 getLatest()
새로운 버전이 감지되면,
다운로드가 자동으로 시작됩니다. autoUpdate 다운로드 진행 상황은 내부적으로 추적됩니다.
- setting:
- You can also check manually with with
- 다운로드 실패 시 자동 재시도는 앱 열 때마다 발생합니다.
- 다운로드 성공 시 앱 저장소에 저장됩니다.
이 프로세스를 이벤트를 통해 모니터링할 수 있습니다.
CapacitorUpdater.addListener('download', (info: DownloadEvent) => {
console.log('Auto-download progress:', info.percent);
});
CapacitorUpdater.addListener('downloadComplete', (info: DownloadCompleteEvent) => {
console.log('Auto-download complete:', info.bundle);
});
3. 자동 설치
설정에 따라 설치 시간이 달라집니다:
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true,
"directUpdate": false // install update on app backgrounding
"resetWhenUpdate": true, // reset live updates on native update (true by default)
"autoDeleteFailed": true, // Auto cleanup failed updates (true by default)
"autoDeletePrevious": true // Auto cleanup old versions (true by default)
}
}
}
설치 시기는:
- 즉시 설치가 이루어질 때:
directUpdatetrue 인 경우 - 다음 앱 배경화면 시:
directUpdatefalse 인 경우 - 설치 실패 시 자동 롤백
플러그인은 또한 저장소 관리를 자동으로 처리합니다.
- 업데이트가 실패하면 제거합니다 if
autoDeleteFailedtrue이면 - 기존 버전을 정리합니다 if
autoDeletePrevioustrue이면
업데이트 지연
업데이트를 설치할 때 지연 조건을 사용할 수 있습니다:
// Delay until app goes to background
await CapacitorUpdater.setDelay({
kind: 'background'
});
// Delay until specific date
await CapacitorUpdater.setDelay({
kind: 'date',
value: '2024-03-20T10:00:00.000Z'
});
// Delay until next native version
await CapacitorUpdater.setDelay({
kind: 'nativeVersion'
});
// Multiple conditions
await CapacitorUpdater.setMultiDelay({
delayConditions: [
{
kind: 'background'
},
{
kind: 'date',
value: '2024-03-20T10:00:00.000Z'
}
]
});
지연 조건 목록:
- background: 앱이 백그라운드에 이동할 때 설치
- date: 특정 날짜/시간 이후에 설치
- nativeVersion: 다음 네이티브 업데이트 후 설치
- kill: 앱이 종료된 후 설치
This is useful for:
- 업데이트를 평소에 사용하지 않는 시간에 예약하는 것
- 사용자 활동과 업데이트를 동기화하는 것
- smooth한 업데이트 kinh험을 보장하는 것
- 중요한 작업 중에 중단되는 것을 방지하는 것
업데이트 상태
자동 업데이트 프로세스 중에, 배포판은 이러한 상태를 거쳐갑니다:
- 다운로드 중: 다운로드 중
- 대기 중: 다운로드 완료, 설치 대기
- 성공: 업데이트 설치 및 활성화
- 오류: 업데이트 실패 (자동 롤백 트리거)
스토어 준수성
애플 앱 스토어
라이브 업데이트 앱 스토어 정책에 완전히 준수합니다. 애플 개발자 프로그램 라이선스 계약에 명시된 바와 같이:
“Interpreted code may be downloaded to an Application but only so long as such code: (a) does not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store, (b) does not create a store or storefront for other code or applications, and (c) does not bypass signing, sandbox, or other security features of the OS.”
Capgo 업데이트만 웹层를 수정하며 플랫폼 보안 경계를 존중합니다.
구글 플레이 스토어
Live Updates는 Google Play 정책을 준수합니다. 장치 및 네트워크 방지 정책은 다음과 같이 명시하고 있습니다.
“이 제한은 가상 머신이나 인터프리터에서 실행되는 code에 적용되지 않습니다. 이들 중 하나가 Android API에 대한 간접 접근을 제공하는 경우입니다 (예: 웹뷰나 브라우저 내의 JavaScript).”
Capgo은 WebView 콘텐츠만 업데이트하므로 이러한 허용된 지침에 따라 적용됩니다.
최선의 방법
- 구성된 출시: 점진적인 출시
- 버전 관리context
- Page/area: Capgo marketing website. Role: Short UI label or navigation item. Message key `version_control` (Version Control).: 모든 배포된 버전 추적
- 오류 복구: 문제 발생 시 빠른 복구 지원
When to Use Live Updates
Live Updates를 사용하는 경우
- Perfect for:
- Live Updates는 다음과 같은 경우에 적합합니다.
- Bug fixes
- 버그 수정
UI improvements
- Native code changes
- Content updates
- 콘텐츠 업데이트
Keep going from How Live Updates Work in Capgo
기능 토글링 How Live Updates Work in Capgo Capacitor와 함께 native 플러그인 작업을 계획하려면 Capgo Plugin Directory for the product workflow in Capgo Plugin Directory, Capacitor Plugins by Capgo for the implementation detail in Capacitor Plugins by Capgo, 플러그인 추가 또는 업데이트 Ionic Enterprise 플러그인 대체 Ionic Enterprise 플러그인 대체 Capacitor Native 빌드 Capgo Native Builds for the product workflow in Capgo Native Builds.