Capgo에서 실시간 업데이트 기능을 이해하는 방법
Capacitor 앱에서 실시간 업데이트 기능은 앱 스토어 제출 없이 실시간 업데이트 기능을 제공하는 가장 강력한 기능 중 하나입니다. Capgo이 이 기능을 구현하는 방식에 대해 깊이 들여다보겠습니다.
핵심 개념
Capacitor 앱은 두 개의 주요 층으로 구성됩니다.
- 웹 층: __CAPGO_KEEP_0__ 앱에서 로드되는 HTML, CSS, JavaScript 파일을 포함합니다.
- 네이티브 층: Android의 경우 Java/Kotlin, iOS의 경우 Swift를 사용하는 플랫폼별 code을 포함합니다.
Capgo의 실시간 업데이트 시스템은 웹 층을 런타임에 교체함으로써 작동합니다. 이 파일들은 앱 바이너리에 컴파일되지 않기 때문입니다.
기술적 구현
서버 경로들에 대한 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는 개발에서 배포까지 앱 업데이트가 완전히 안전하도록 end-to-end 암호화로 군사급 보안을 구현합니다. 우리의 암호화 시스템은 전통적인 code 서명보다 더 나은 true zero-knowledge 보안을 제공합니다.
끝-to-끝 암호화 아키텍처
-
끝-to-끝 암호화 (E2EE): 개발 환경을 떠나는 모든 업데이트 패키지는 AES-256-GCM 암호화를 사용하여 암호화됩니다. 이 군사급 암호화는 앱 업데이트가 전달되는 전체 프로세스 동안 완전히 개인적이고 안전하게 유지되도록 합니다.
-
Zero-Knowledge 아키텍처: 다른 OTA 업데이트 솔루션만 업데이트를 서명하는 것과 달리 Capgo은真正의 zero-knowledge 암호화를 사용합니다. 이것은:
- 업데이트 내용은 업로드하기 전에 암호화됩니다
- Capgo 서버는 암호화된 데이터만 저장합니다
- 엔드-유저 기기에서만 암호화가 발생합니다
- 중간 매체가 업데이트 내용에 접근할 수 없습니다
-
Secure Key 관리:
- 암호화 키는 CI/CD 환경에서 안전하게 생성 및 저장됩니다
- 개인 키는 Capgo 서버에 접근하지 않습니다
- 각 앱 버전은 고유한 암호화 키를 사용할 수 있습니다
- 강화된 보안을 위해 키 회전 지원
자세한 설명서에서 우리의 암호화 시스템에 대해 더 알아보세요: Capgo Live Updates에서 끝에서 끝까지 암호화
업데이트 보안 프로세스
-
업로드 전에 암호화:
- CI/CD pipeline에서 업데이트가 암호화됩니다
- 각 파일은 개별적으로 암호화됩니다
- 완전한 개인정보를 보장하기 위해 메타데이터도 암호화됩니다
-
보안 저장소:
- Capgo의 글로벌 CDN에서 암호화된 배포본이 저장됩니다
- 플레인 텍스트 데이터는 우리 서버에 절대 닿지 않습니다
- 서버 침해 사태에도 데이터는 안전하게 유지됩니다.
-
보안 전달:
- 업데이트는 암호화된 채널을 통해 전달됩니다.
- 각 앱 인스턴스는 암호화의 무결성을 검증합니다.
- 암호화 실패 시 자동으로 재시도 메커니즘
-
클라이언트 측 보안:
- 업데이트는 설치 전에 검증됩니다.
- 암호화 실패 시 자동 롤백
- 앱의 보호된 저장소에서 안전한 키 저장
이 종합 보안 접근 방식은 앱 업데이트가 다음 공격에 안전하도록 보장합니다.
- 중간자 공격
- 서버 측 침해
- __CAPGO_KEEP_0__의 업데이트 프로세스는 기본적으로 자동화되어 있습니다. 자동화된 프로세스가 어떻게 작동하는지 알아보겠습니다.
- 1. 자동 업데이트 확인
- 플러그인은 다음 상황에서 업데이트를 자동으로 확인합니다.
앱이 시작될 때
Capgo’s update process is designed to be automatic by default. Here’s how the automatic process works:
업데이트 확인
또한 수동으로 확인할 수 있습니다.
- 2. 자동 다운로드
__CAPGO_KEEP_0__의 업데이트 프로세스는 기본적으로 자동화되어 있습니다. 자동화된 프로세스가 어떻게 작동하는지 알아보겠습니다. autoUpdate 1. 자동 업데이트 확인
// capacitor.config.json
{
"plugins": {
"CapacitorUpdater": {
"autoUpdate": true // Enable automatic updates
}
}
}
플러그인은 다음 상황에서 업데이트를 자동으로 확인합니다. getLatest()
앱이 시작될 때, 업데이트 확인, 업데이트 확인 설정, 수동으로 확인
When a new version is detected, if __CAPGO_KEEP_0__ is enabled: autoUpdate __CAPGO_KEEP_0__
- 자동 다운로드가 시작됩니다.
- Progress is tracked internally.
- 실패한 다운로드는 앱을 열 때마다 자동으로 재시도됩니다.
- 성공한 다운로드는 앱 저장소에 저장됩니다.
You can monitor this process through events:
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. 자동 설치
The installation timing depends on your configuration:
// 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)
}
}
}
설치가 발생하는 시점은:
- 즉시 __CAPGO_KEEP_0__가 true일 때
directUpdate__CAPGO_KEEP_0__ - 다음 앱이 백그라운드 상태일 때
directUpdatefalse일 때 - 설치 실패 시 자동 롤백
플러그인은 또한 저장소를 자동으로 관리합니다.
- 실패한 업데이트를 삭제합니다.
autoDeleteFailedtrue일 때 - 기존 버전을 삭제합니다.
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'
}
]
});
지연 조건:
- 백그라운드: 앱이 배경으로 이동할 때 설치
- 날짜: 특정 날짜/시간 이후에 설치
- 자연어 버전: 다음 자연어 업데이트郎 이후에 설치
- 종료: 앱이 종료된 후에 설치
이것은 유용합니다:
- 업데이트를 평소에 진행하여 사용자 경험을 개선
- 사용자 활동과 업데이트를 동기화
- smooth한 업데이트 경험을 보장
- 중요한 작업 중에 중단을 방지
업데이트 상태
자동화 프로세스 중, 번들 상태는 다음과 같이 변합니다.
- 다운로드 중다운로드 중입니다.
- 대기 중다운로드 완료, 설치 대기 중
- 성공업데이트가 설치 및 활성화되었습니다.
- 오류업데이트가 실패했습니다 (자동 롤백 트리거)
스토어 규정 준수
애플 앱 스토어 ✅
Live Updates는 Apple App Store 정책과 완전히 일치합니다. Apple Developer Program License Agreement에 명시된 바와 같이:
“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 업데이트는 웹层만 수정하며 플랫폼 보안 경계를 존중합니다.
Google Play Store ✅
Live Updates는 Google Play 정책과 일치합니다. Device and Network Abuse 정책에 명시된 바와 같이:
“이 제한은 code이 가상 머신 또는 인터프리터에서 실행되는 경우에만 적용되지 않습니다. 이 경우에는 Android API에 대한 간접 접근이 가능합니다 (예: 웹뷰 또는 브라우저에서 JavaScript).”
Capgo은 WebView 콘텐츠만 업데이트하므로 이러한 허용된 지침에 따라 적용됩니다.
Best Practices
- Phased Rollouts: 업데이트를 점진적으로 배포합니다.
- Version Control: 배포된 모든 버전을 추적합니다.
- 롤백 지원: 문제 해결을 위한 빠른 복구
- 델타 업데이트: 변경된 파일만 다운로드
라이브 업데이트 사용 시기
적합한 경우:
- 버그 수정
- UI 개선
- 콘텐츠 업데이트
- 기능 토글
비 적합한 경우:
- 자연 code 변경
- 주요 버전 업데이트
- 자연어 변경이 필요한 보안 패치
Capgo에서 'How Live Updates Work'까지 계속 진행하세요.
__CAPGO_KEEP_0__을 사용 중이라면 'How Live Updates Work'에서 Capgo까지 계속 진행하세요. __CAPGO_KEEP_0__을 사용하여 네이티브 플러그인 작업을 계획하고 있으시다면, __CAPGO_KEEP_0__와 연결하세요. Capgo 플러그인 디렉토리 Capgo 플러그인 디렉토리 내의 제품 워크플로우 Capacitor 플러그인들에 의해 Capgo Capacitor 플러그인들에 의해 Capgo의 구현 세부 사항 플러그인 추가 또는 업데이트 플러그인 추가 또는 업데이트의 구현 세부 사항 Ionic Enterprise Plugin Alternatives Ionic Enterprise Plugin Alternatives 제품 워크플로우에서 Capgo Native Builds Capgo Native Builds 제품 워크플로우에서