메뉴로 바로가기

이벤트

GitHub

Capacitor 업데이터 플러그인은 업데이트 프로세스를 모니터링하고 다양한 상태에 반응하기 위해 사용할 수 있는 여러 이벤트를 제공합니다.

이벤트를 듣기 위해 사용하는 방법은 addListener 객체의 CapacitorUpdater 메소드입니다:

import { CapacitorUpdater } from '@capgo/capacitor-updater';
// Add a listener
const listener = await CapacitorUpdater.addListener('eventName', (event) => {
// Handle the event
});
// Remove the listener when no longer needed
listener.remove();
// Remove all listeners
await CapacitorUpdater.removeAllListeners();

다운로드 프로세스 중에 발생하는 이벤트. 다운로드 진행 정보를 제공합니다.

CapacitorUpdater.addListener('download', (event) => {
console.log(`Download progress: ${event.percent}%`);
console.log('Bundle info:', event.bundle);
});

이벤트 데이터:

  • percent: 숫자 - 다운로드 진행률(0-100)
  • bundle: BundleInfo - 다운로드 중인 배ंडल에 대한 정보

업데이트 확인 중에 업데이트가 필요하지 않음을 결정할 때 발생합니다.

CapacitorUpdater.addListener('noNeedUpdate', (event) => {
console.log('App is up to date');
console.log('Current bundle:', event.bundle);
});

이벤트 데이터:

  • bundle: BundleInfo - 현재 번들에 대한 정보

업데이트가 다운로드 가능합니다.

CapacitorUpdater.addListener('updateAvailable', (event) => {
console.log('Update available');
console.log('New bundle:', event.bundle);
// You can trigger a download here if needed
});

이벤트 데이터:

  • bundle: BundleInfo - 다운로드 가능한 업데이트 번들에 대한 정보

다운로드가 완료되었습니다.

CapacitorUpdater.addListener('downloadComplete', (event) => {
console.log('Download completed');
console.log('Downloaded bundle:', event.bundle);
// You might want to set this bundle as next
});

이벤트 데이터:

  • bundle: __CAPGO_KEEP_0__ - __CAPGO_KEEP_0__

majorAvailable

__CAPGO_KEEP_1__

__CAPGO_KEEP_2__

CapacitorUpdater.addListener('majorAvailable', (event) => {
console.log('Major update available:', event.version);
// Notify user about major update
});

__CAPGO_KEEP_4__:

  • version: string - __CAPGO_KEEP_5__

updateFailed

__CAPGO_KEEP_9__

__CAPGO_KEEP_10__

CapacitorUpdater.addListener('updateFailed', (event) => {
console.error('Update failed to install');
console.log('Failed bundle:', event.bundle);
// Handle rollback or retry logic
});

이벤트 데이터:

  • bundle: BundleInfo - 설치에 실패한 번들을 위한 정보

다운로드 실패 시 번들 다운로드에 실패한 이벤트가 발생합니다.

CapacitorUpdater.addListener('downloadFailed', (event) => {
console.error('Download failed for version:', event.version);
// Handle download retry logic
});

이벤트 데이터:

  • version: string - 다운로드에 실패한 버전

앱이 다시 로드되었습니다.

CapacitorUpdater.addListener('appReloaded', () => {
console.log('App has been reloaded');
// Perform any necessary reinitialization
});

이벤트 데이터: 없음

업데이트 후 앱이 사용할 준비가 되었을 때 발생하는 이벤트

CapacitorUpdater.addListener('appReady', (event) => {
console.log('App is ready');
console.log('Current bundle:', event.bundle);
console.log('Status:', event.status);
});

이벤트 데이터:

  • bundle: BundleInfo - 현재 번들에 대한 정보
  • status: string - 준비 상태

BundleInfo 객체

BundleInfo 객체 섹션

많은 이벤트는 다음 속성을 가진 BundleInfo 객체를 포함합니다.

interface BundleInfo {
id: string; // Unique bundle identifier
version: string; // Bundle version
downloaded: string; // Download timestamp
checksum?: string; // Bundle checksum (if available)
status: BundleStatus; // Bundle status
}

어디에서 BundleStatus 할 수 있습니다.

  • 'success' - 다운로드가 성공적으로 완료되었습니다.
  • 'error' - 다운로드/설치가 실패했습니다.
  • 'pending' - 다음으로 설정되기를 기다리는 배포본입니다.
  • 'downloading' - 현재 다운로드 중인 배포본입니다.

이벤트를 사용하여 완전한 업데이트 흐름을 처리하는 예제입니다.

import { CapacitorUpdater } from '@capgo/capacitor-updater';
export class UpdateManager {
private listeners: any[] = [];
async setupListeners() {
// Listen for available updates
this.listeners.push(
await CapacitorUpdater.addListener('updateAvailable', async (event) => {
console.log('Update available:', event.bundle.version);
// Auto-download the update
await CapacitorUpdater.download({
url: event.bundle.url,
version: event.bundle.version
});
})
);
// Monitor download progress
this.listeners.push(
await CapacitorUpdater.addListener('download', (event) => {
console.log(`Downloading: ${event.percent}%`);
// Update UI progress bar
this.updateProgressBar(event.percent);
})
);
// Handle download completion
this.listeners.push(
await CapacitorUpdater.addListener('downloadComplete', async (event) => {
console.log('Download complete:', event.bundle.version);
// Set as next bundle
await CapacitorUpdater.next({ id: event.bundle.id });
})
);
// Handle failures
this.listeners.push(
await CapacitorUpdater.addListener('downloadFailed', (event) => {
console.error('Download failed:', event.version);
this.showError('Update download failed. Please try again later.');
})
);
this.listeners.push(
await CapacitorUpdater.addListener('updateFailed', (event) => {
console.error('Update installation failed:', event.bundle.version);
this.showError('Update installation failed. The app has been rolled back.');
})
);
// Handle app ready
this.listeners.push(
await CapacitorUpdater.addListener('appReady', async (event) => {
console.log('App ready with bundle:', event.bundle.version);
})
);
}
cleanup() {
// Remove all listeners when no longer needed
this.listeners.forEach(listener => listener.remove());
this.listeners = [];
}
private updateProgressBar(percent: number) {
// Update your UI progress bar
}
private showError(message: string) {
// Show error to user
}
}

클립보드에 복사

최선의 방법
  1. 제목이 “최선의 방법”인 notifyAppReady()항상 호출하세요. : 자동 업데이트 시 항상 앱이 초기화된 후에 이 메서드를 호출하여 롤백을 방지하세요.

  2. 위험에 대처하기: 다운로드 및 업데이트 실패 시 적절한 오류 처리를 구현하세요.

  3. 사용자에게 피드백 제공하기: 다운로드 진행 이벤트를 사용하여 사용자에게 업데이트 진행 상황을 표시하세요.

  4. 리스너 정리하기: 더 이상 필요하지 않은 이벤트 리스너를 제거하여 메모리 누수를 방지하세요.

  5. 업데이트 시나리오 테스트하기: 실패, 롤백 및 주요 업데이트와 같은 다양한 업데이트 시나리오를 테스트하세요.

Capgo를 사용 중이라면 이벤트 native 플러그인 작업을 계획하기 위해, 그것을 연결하세요. @capgo/capacitor-업데이터를 사용하여 @capgo/capacitor-업데이터를 사용하여 native 기능을 사용하는 경우, Capgo 플러그인 디렉토리 Capgo 플러그인 디렉토리에서 제품 워크플로우를 사용하는 경우, Capacitor 플러그인들에 의해 Capgo Capacitor 플러그인들에 의해 Capgo에서 implementation 세부 정보를 사용하는 경우, 플러그인을 추가하거나 업데이트 플러그인을 추가하거나 업데이트하는 경우 implementation 세부 정보를 사용하는 경우, Ionic Enterprise 플러그인 대체품 Ionic Enterprise 플러그인 대체품의 제품 워크플로우를 사용하는 경우,