React Native 클라이언트 SDK API 참조

중요

Visual Studio App Center는 2025년 3월 31일에 사용 중지될 예정입니다. Visual Studio App Center가 완전히 사용 중지될 때까지 계속 사용할 수 있지만 마이그레이션을 고려할 수 있는 몇 가지 권장 대안이 있습니다.

지원 타임라인 및 대안에 대해 자세히 알아보세요.

CodePush 플러그 인은 다음 두 가지 구성 요소로 구성됩니다.

  1. JavaScript 모듈은 가져오고 필요할 수 있으며 앱이 런타임 중에 서비스와 상호 작용할 수 있도록 합니다(예: 업데이트에 대한 검사 현재 실행 중인 앱 업데이트에 대한 메타데이터 검사).

  2. React Native 앱 호스트가 올바른 JS 번들 위치로 부트스트랩할 수 있는 네이티브 API(Objective-C 및 Java)입니다.

다음 섹션에서는 이러한 API의 모양과 동작에 대해 자세히 설명합니다.

JavaScript API 참조

가 필요한 react-native-code-push경우 모듈 개체는 루트 수준 구성 요소 데코레이터 외에도 다음과 같은 최상위 메서드를 제공합니다.

  • allowRestart: Reallows는 업데이트가 설치된 결과로 프로그래밍 방식으로 다시 시작되며, 필요에 따라 다시 시작이 허용되지 않는 동안 보류 중인 업데이트가 앱을 다시 시작하려고 시도한 경우 앱을 즉시 다시 시작합니다. 이 메서드는 고급 API이며 앱이 메서드를 통해 disallowRestart 명시적으로 다시 시작을 허용하지 않는 경우에만 필요합니다.

  • checkForUpdate: 구성된 앱 배포에 사용 가능한 업데이트가 있는지 CodePush 서비스에 요청합니다.

  • disallowRestart: CodePush 업데이트가 설치되어 프로그래밍 방식으로 다시 시작되지 않도록 일시적으로 허용합니다. 이 메서드는 고급 API이며 앱 내의 구성 요소(예: 온보딩 프로세스)가 수명 동안 최종 사용자 중단이 발생하지 않도록 해야 하는 경우에 유용합니다.

  • getCurrentPackage: 현재 설치된 업데이트(예: 설명, 설치 시간, 크기)에 대한 메타데이터를 검색합니다.

    참고

    v1.10.3-beta CodePush 모듈을 기준으로 는 getCurrentPackage *를 위해 getUpdateMetadata더 이상 사용되지 않습니다.

  • getUpdateMetadata: 설치된 업데이트에 대한 메타데이터(예: 설명, 필수)를 검색합니다.

  • notifyAppReady: 설치된 업데이트가 성공한 것으로 간주됨을 CodePush 런타임에 알립니다. 업데이트를 수동으로 확인하고 설치하는 경우( 동기화 메서드를 사용하여 모두 처리하지 않음) 이 메서드를 호출 해야 합니다 . 그렇지 않으면 CodePush는 업데이트를 실패로 처리하고 앱이 다음에 다시 시작될 때 이전 버전으로 롤백합니다.

  • restartApp: 앱을 즉시 다시 시작합니다. 보류 중인 업데이트가 있는 경우 최종 사용자에게 즉시 표시됩니다. 그렇지 않으면 이 메서드를 호출하면 최종 사용자가 프로세스를 종료하고 다시 시작하는 것과 동일한 동작이 발생합니다.

  • sync: 업데이트를 확인하고, 다운로드하고, 설치할 수 있으며, 모두 한 번의 호출로 수행할 수 있습니다. 사용자 지정 UI 또는 동작이 필요하지 않는 한 대부분의 개발자는 CodePush를 앱에 통합할 때 이 방법을 사용하는 것이 좋습니다.

codePush

// Wrapper function
codePush(rootComponent: React.Component): React.Component;
codePush(options: CodePushOptions)(rootComponent: React.Component): React.Component;
// Decorator; Requires ES7 support
@codePush
@codePush(options: CodePushOptions)

탑재될 때 앱의 JavaScript 번들 및 이미지 자산을 동기화하는 방법을 알고 있는 "상위 순서" React 구성 요소 내에 React 구성 요소를 래핑하는 데 사용됩니다. 내부적으로 상위 구성 요소는 업데이트 검사 실행하고, 업데이트가 있는 경우 업데이트를 다운로드하고, 업데이트를 설치하는 수명 주기 핸들 내에서 componentDidMount 를 호출 sync 합니다.

이 데코레이터는 다양한 요구 사항을 가진 앱을 쉽게 사용하도록 동작을 사용자 지정할 수 있도록 지원합니다. 다음은 사용할 수 있는 방법의 몇 가지 예입니다(하나를 선택하거나 조합을 사용할 수도 있음).

  1. 앱 시작 시 자동 동기화(가장 간단한 기본 동작). 앱은 사용 가능한 업데이트를 자동으로 다운로드하고 다음에 앱이 다시 시작될 때 적용합니다(예: OS 또는 최종 사용자가 종료했거나 디바이스가 다시 시작됨). 이렇게 하면 업데이트 프롬프트 또는 "가상" 앱이 다시 시작되지 않으므로 전체 업데이트 환경은 최종 사용자에게 "자동"입니다.

    // Fully silent update that keeps the app in
    // sync with the server, without ever
    // interrupting the end user
    class MyApp extends Component {}
    MyApp = codePush(MyApp);
    
  2. 앱이 다시 시작될 때마다 자동 동기화. 업데이트를 검사 경우를 제외하고 1과 동일하거나 앱이 "백그라운드"가 된 후 포그라운드로 돌아올 때마다 업데이트가 있는 경우 업데이트를 적용합니다.

    // Sync for updates every time the app resumes.
    class MyApp extends Component {}
    MyApp = codePush({ checkFrequency: codePush.CheckFrequency.ON_APP_RESUME, installMode: codePush.InstallMode.ON_NEXT_RESUME })(MyApp);
    
  3. 대화형. 업데이트를 사용할 수 있는 경우 다운로드하기 전에 최종 사용자에게 사용 권한을 묻는 메시지를 표시한 다음 즉시 업데이트를 적용합니다. 플래그를 사용하여 mandatory 업데이트가 릴리스된 경우 최종 사용자에게 업데이트에 대한 알림이 계속 표시되지만 무시할 수 있는 선택은 없습니다.

    // Active update that lets the end user know
    // about each update, and displays it to them
    // immediately after downloading it
    class MyApp extends Component {}
    MyApp = codePush({ updateDialog: true, installMode: codePush.InstallMode.IMMEDIATE })(MyApp);
    
  4. 로그/표시 진행률입니다. 앱이 업데이트를 위해 서버와 동기화하는 동안 또는 codePushDownloadDidProgress 이벤트 후크를 사용하여 codePushStatusDidChange 이 프로세스의 다른 단계를 로그다운하거나 사용자에게 진행률 표시줄을 표시합니다.

    // Make use of the event hooks to keep track of
    // the different stages of the sync process.
    class MyApp extends Component {
        codePushStatusDidChange(status) {
            switch(status) {
                case codePush.SyncStatus.CHECKING_FOR_UPDATE:
                    console.log("Checking for updates.");
                    break;
                case codePush.SyncStatus.DOWNLOADING_PACKAGE:
                    console.log("Downloading package.");
                    break;
                case codePush.SyncStatus.INSTALLING_UPDATE:
                    console.log("Installing update.");
                    break;
                case codePush.SyncStatus.UP_TO_DATE:
                    console.log("Up-to-date.");
                    break;
                case codePush.SyncStatus.UPDATE_INSTALLED:
                    console.log("Update installed.");
                    break;
            }
        }
    
        codePushDownloadDidProgress(progress) {
            console.log(progress.receivedBytes + " of " + progress.totalBytes + " received.");
        }
    }
    MyApp = codePush(MyApp);
    

CodePushOptions

데코레이터는 codePush 위에서 언급한 기본 동작의 다양한 측면을 사용자 지정할 수 있는 "options" 개체를 허용합니다.

  • checkFrequency(codePush.CheckFrequency) - 업데이트를 검사 시기를 지정합니다. 기본값은 codePush.CheckFrequency.ON_APP_START입니다. CheckFrequency 사용 가능한 옵션 및 작업에 대한 설명은 열거형 참조를 참조하세요.

  • deploymentKey(String) - 업데이트를 쿼리할 배포 키를 지정합니다. 기본적으로 이 값은 Info.plist 파일(iOS) 및 MainActivity.java 파일(Android)에서 파생되지만, 이 옵션을 사용하면 다른 배포를 동적으로 사용해야 하는 경우 스크립트 쪽에서 재정의할 수 있습니다.

  • installMode(codePush.InstallMode) - 선택적 업데이트(필수로 표시되지 않은 업데이트)를 설치할 시기를 지정합니다. 기본값은 codePush.InstallMode.ON_NEXT_RESTART입니다. InstallMode 사용 가능한 옵션 및 작업에 대한 설명은 열거형 참조를 참조하세요.

  • mandatoryInstallMode(codePush.InstallMode) - 필수로 표시된 업데이트를 설치할 시기를 지정합니다. 기본값은 codePush.InstallMode.IMMEDIATE입니다. InstallMode 사용 가능한 옵션 및 작업에 대한 설명은 열거형 참조를 참조하세요.

  • minimumBackgroundDuration(Number) - 앱을 다시 시작하기 전에 앱이 백그라운드에 있는 최소 시간(초)을 지정합니다. 이 속성은 또는 InstallMode.ON_NEXT_SUSPEND를 사용하여 InstallMode.ON_NEXT_RESUME 설치된 업데이트에만 적용되며 너무 방해받지 않고 최종 사용자 앞에서 업데이트를 더 빨리 가져오는 데 유용할 수 있습니다. 기본값은 0다시 시작 직후 업데이트를 적용하거나 앱 일시 중단이 중요하지 않을 만큼 길지 않은 한 백그라운드에 있는 경우를 기준으로 적용됩니다.

  • updateDialog(UpdateDialogOptions) - 업데이트를 사용할 수 있을 때 최종 사용자에게 확인 대화 상자를 표시할지 여부와 사용할 문자열을 결정하는 데 사용되는 "옵션" 개체입니다. 기본값은 null대화 상자를 사용하지 않도록 설정하는 입니다. 이 값을 임의의 true 값으로 설정하면 기본 문자열이 있는 대화 상자가 활성화되고 개체를 이 매개 변수에 전달하면 대화 상자를 활성화하고 하나 이상의 기본 문자열을 재정의할 수 있습니다. App Store 분산 앱 내에서 이 옵션을 사용하도록 설정하기 전에 이 참고 사항을 참조하세요.

    다음 목록은 사용 가능한 옵션 및 해당 기본값을 나타냅니다.

    • appendReleaseDescription(Boolean) - 최종 사용자에게 표시되는 알림 메시지에 사용 가능한 릴리스에 대한 설명을 추가할지 여부를 나타냅니다. 기본값은 false입니다.

    • descriptionPrefix(String) - 최종 사용자에게 업데이트 알림을 표시할 때 릴리스 설명을 접두사로 사용할 문자열(있는 경우)을 나타냅니다. 기본값은 " Description: "입니다.

    • mandatoryContinueButtonLabel(String) - 최종 사용자가 필수 업데이트를 설치하기 위해 눌러야 하는 단추에 사용할 텍스트입니다. 기본값은 "Continue"입니다.

    • mandatoryUpdateMessage(String) - 업데이트가 필수로 지정된 경우 업데이트 알림의 본문으로 사용되는 텍스트입니다. 기본값은 "An update is available that must be installed."입니다.

    • optionalIgnoreButtonLabel(String) - 최종 사용자가 누를 수 있는 단추에 사용할 텍스트로, 사용 가능한 선택적 업데이트를 무시합니다. 기본값은 "Ignore"입니다.

    • optionalInstallButtonLabel(String) - 최종 사용자가 선택적 업데이트를 설치하기 위해 누를 수 있는 단추에 사용할 텍스트입니다. 기본값은 "Install"입니다.

    • optionalUpdateMessage(String) - 업데이트가 선택 사항인 경우 업데이트 알림의 본문으로 사용되는 텍스트입니다. 기본값은 "An update is available. Would you like to install it?"입니다.

    • title(String) - 최종 사용자에게 표시되는 업데이트 알림의 헤더로 사용되는 텍스트입니다. 기본값은 "Update available"입니다.

  • rollbackRetryOptions(RollbackRetryOptions) - 롤백 재시도 메커니즘을 사용하면 애플리케이션이 이전에 롤백된 업데이트를 다시 설치할 수 있습니다(옵션에 지정된 제한 사항 포함). 롤백 재시도를 수행해야 하는지 여부를 결정하는 데 사용되는 "옵션" 개체이며, 그렇다면 롤백 재시도에 사용할 설정입니다. 이 기본값은 null이며, 이는 재시도 메커니즘을 사용하지 않도록 설정하는 효과가 있습니다. 이 값을 truey 값으로 설정하면 기본 설정을 사용하여 재시도 메커니즘을 사용할 수 있으며, 개체를 이 매개 변수에 전달하면 롤백 재시도를 활성화하고 하나 이상의 기본값을 재정의할 수 있습니다.

    다음 목록은 사용 가능한 옵션 및 해당 기본값을 나타냅니다.

    • delayInHours(Number) - 동일한 롤백 패키지를 다시 설치하기 전에 앱이 최신 롤백 후에 대기하는 최소 시간(시간)을 지정합니다. 보다 0작을 수 없습니다. float number일 수 있습니다. 기본값은 24입니다.

    • maxRetryAttempts(Number) - 앱이 시도를 중지하기 전에 수행할 수 있는 최대 재시도 횟수를 지정합니다. 보다 1작을 수 없습니다. 기본값은 1입니다.

codePushStatusDidChange(이벤트 후크)

동기화 프로세스가 전체 업데이트 프로세스에서 한 단계에서 다른 단계로 이동할 때 호출됩니다. 이벤트 후크는 현재 상태를 나타내는 상태 코드와 함께 호출되며 값 중 SyncStatus 어느 것이든 될 수 있습니다.

codePushDownloadDidProgress(이벤트 후크)

CodePush 서버에서 사용 가능한 업데이트를 다운로드할 때 주기적으로 호출됩니다. 메서드는 다음 두 속성을 포함하는 개체를 사용하여 호출 DownloadProgress 됩니다.

  • totalBytes(Number) - 이 업데이트에 대해 수신될 것으로 예상되는 총 바이트 수입니다(이전 릴리스에서 변경된 파일 집합의 크기).

  • receivedBytes(Number) - 다운로드 진행률을 추적하는 데 사용할 수 있는 지금까지 다운로드한 바이트 수입니다.

codePush.allowRestart

codePush.allowRestart(): void;

에 대한 이전 호출로 인해 거부되었던 프로그래밍 방식 다시 시작을 다시 시작합니다 disallowRestart. 가 처음에 호출되지 않은 경우 disallowRestart 이 메서드를 호출하면 no-op이 발생합니다.

CodePush 업데이트가 현재 보류 중이며 앱을 다시 시작하려고 시도했지만(예: 사용 InstallMode.IMMEDIATE) 호출되어 차단된 disallowRestart 경우 를 호출 allowRestart 하면 즉시 다시 시작됩니다. 이렇게 다시 시작하면 중요한 워크플로(예: 온보딩 프로세스)에서 최종 사용자를 중단하지 않고도 가능한 한 빨리 업데이트를 적용할 수 있습니다.

예를 들어 호출 allowRestart 은 가 호출된 후 disallowRestart 문서에 언급된 disallowRestart 세 가지 시나리오 중 하나가 발생한 경우 즉시 다시 시작을 트리거합니다. 그러나 다음 사항이 true인 경우 를 호출 allowRestart 하면 다시 시작이 트리거되지 않습니다.

  1. 마지막으로 disallowRestart 호출된 이후 CodePush 업데이트가 설치되지 않았으므로 다시 시작할 필요가 없습니다.

  2. 현재 보류 중인 CodePush 업데이트가 있지만 를 통해 InstallMode.ON_NEXT_RESTART설치되었으므로 프로그래밍 방식으로 다시 시작할 필요가 없습니다.

  3. 현재 보류 중인 CodePush 업데이트가 있지만 를 통해 InstallMode.ON_NEXT_RESUME 설치되었으며 앱이 아직 백그라운드에 배치되지 않았으므로 아직 프로그래밍 방식으로 다시 시작할 필요가 없습니다.

  4. 마지막으로 disallowRestart 호출된 이후 에 대한 호출 restartApp 이 발생하지 않았습니다.

이 동작은 허용되지 않는 기간 동안 명시적으로 요청되지 않는 한 호출 allowRestart 의 결과로 다시 시작이 트리거되지 않도록 합니다. 이러한 방식으로 는 allowRestart 를 호출 restartApp(true)하는 것과 유사하지만 현재 보류 중인 업데이트가 다시 시작하려는 경우에만 전자가 다시 시작을 트리거하지만 업데이트가 보류 중인 한 후자는 다시 시작됩니다.

이 메서드를 사용하는 방법에 대한 예제는 disallowRestart 를 참조하세요.

codePush.checkForUpdate

codePush.checkForUpdate(deploymentKey: String = null, handleBinaryVersionMismatchCallback: (update: RemotePackage) => void): Promise<RemotePackage>;

CodePush 서비스를 쿼리하여 구성된 앱 배포에 사용 가능한 업데이트가 있는지 확인합니다. 기본적으로 Info.plist 파일(iOS) 또는 MainActivity.java 파일(Android)에 구성된 배포 키를 사용하지만 선택적 deploymentKey 매개 변수를 통해 값을 지정하여 재정의할 수 있습니다. 이 기능은 부활절 달걀 또는 사용자 설정 스위치를 통해 "조기 액세스"를 허용하는 등 사용자를 특정 배포로 동적으로 "리디렉션"하려는 경우에 유용할 수 있습니다.

두 번째 선택적 매개 변수 handleBinaryVersionMismatchCallback 는 이진 업데이트가 있는 경우 사용자에게 알리는 데 사용할 수 있는 선택적 콜백 함수입니다. 예를 들어 현재 설치된 이진 버전이 레이블(코드 푸시 레이블) v1이 있는 1.0.1인 사용 사례를 고려해 보세요. 이후 네이티브 코드는 개발 주기에서 변경되었으며 이진 버전은 1.0.2로 업데이트되었습니다. codepush 업데이트 검사 트리거되면 이진 버전이 일치하지 않는 업데이트는 무시됩니다(업데이트가 현재 설치된 앱의 이진 버전을 대상으로 하지 않기 때문). 이 경우 설치된 앱(1.0.1)은 업데이트 대상 버전 1.0.2를 무시합니다. 를 사용하여 handleBinaryVersionMismatchCallback 이러한 상황을 처리하는 후크를 제공할 수 있습니다.

중요

iOS 애플리케이션을 개발하는 경우 App Store 검토 프로세스로 인해 이 콜백 내에서 경고를 사용하도록 주의해야 합니다. 앱은 사용자가 앱을 평가하거나, 앱을 검토하거나, 다른 앱을 다운로드하거나, 앱의 기능, 콘텐츠 또는 사용에 액세스하기 위해 다른 유사한 작업을 강제로 적용해서는 안 됩니다.

이 메서드는 Promise두 가지 가능한 값 중 하나로 확인되는 를 반환합니다.

  1. null 사용할 수 있는 업데이트가 없으면 입니다. 이 작업은 다음과 같은 시나리오에서 발생할 수 있습니다.

    1. 구성된 배포에는 릴리스가 포함되어 있지 않으므로 업데이트할 내용이 없습니다.
    2. 구성된 배포 내의 최신 릴리스는 현재 실행 중인 버전(이전 버전 또는 최신 버전)과 다른 이진 버전을 대상으로 합니다.
    3. 현재 실행 중인 앱에는 구성된 배포의 최신 릴리스가 이미 있으므로 다시 필요하지 않습니다.
    4. 구성된 배포 내의 최신 릴리스는 현재 사용 안 함으로 표시되므로 다운로드할 수 없습니다.
    5. 구성된 배포 내의 최신 릴리스는 "활성 롤아웃" 상태이며 요청 디바이스는 해당 배포에 적합한 사용자의 비율에 속하지 않습니다.
  2. RemotePackage 검사하거나 나중에 다운로드할 수 있는 사용 가능한 업데이트를 나타내는 instance.

사용 예:

codePush.checkForUpdate()
.then((update) => {
    if (!update) {
        console.log("The app is up to date!");
    } else {
        console.log("An update is available! Should we download it?");
    }
});

codePush.disallowRestart

codePush.disallowRestart(): void;

다음 시나리오 중 하나로 인해 프로그래밍 방식 다시 시작을 일시적으로 허용하지 않습니다.

  1. CodePush 업데이트는 를 사용하여 설치됩니다. InstallMode.IMMEDIATE

  2. 를 사용하여 InstallMode.ON_NEXT_RESUME CodePush 업데이트가 설치되고 앱이 백그라운드에서 다시 시작됩니다(선택적으로 속성에 minimumBackgroundDuration 의해 제한됨).

  3. 메서드가 restartApp 호출되었습니다.

    참고

    1단계와 2단계는 를 호출 restartApp 하여 효과적으로 작동하므로 앱이 disallowRestart 직접 또는 간접적으로 호출하든 관계없이 에 대한 호출 restartApp을 차단하는 것으로 생각할 수 있습니다.

이 메서드를 sync 호출한 후에도 에 대한 모든 호출은 업데이트를 검사 다운로드하여 설치할 수 있지만 앱을 다시 시작하려는 시도는 가 호출될 때까지 allowRestart 큐에 대기합니다. 이렇게 하면 다시 시작 요청이 캡처되고 이 요청이 발생할 수 있도록 허용할 때마다 "플러시"될 수 있습니다.

이 API는 고급 API이며 앱 내의 개별 구성 요소(예: 온보딩 프로세스)가 수명 동안 최종 사용자 중단이 발생하지 않도록 해야 하는 동시에 앱이 자체 속도로 CodePush 서버와 계속 동기화하고 적절한 설치 모드를 사용할 수 있도록 해야 하는 경우에 주로 유용합니다. 이렇게 하면 앱에서 사용 가능한 업데이트를 최대한 빨리 검색하고 다운로드할 수 있는 동시에 주요 최종 사용자 환경 중에 중단을 방지할 수 있습니다.

또는 를 호출 sync 할 때마다(프로그래밍 방식으로 앱을 다시 시작하려고 시도하지 않는) 를 사용한 InstallMode.ON_NEXT_RESTART 다음 앱에서 "안전"한 지점에서 명시적으로 호출 restartApp 하여 호출할 수도 있습니다. disallowRestart 는 CodePush 서버와 동기화되는 코드가 다시 시작 금지 정책을 적용하려는 코드/구성 요소와 별개인 경우 이에 대한 대체 방법을 제공합니다.

사용 예:

class OnboardingProcess extends Component {
    ...

    componentWillMount() {
        // Ensure that any CodePush updates that are
        // synchronized in the background can't trigger
        // a restart while this component is mounted.
        codePush.disallowRestart();
    }

    componentWillUnmount() {
        // Reallow restarts, and optionally trigger
        // a restart if one was currently pending.
        codePush.allowRestart();
    }

    ...
}

codePush.getCurrentPackage

참고

이 메서드는 CodePush 모듈을 기준으로 v1.10.3-beta 사용되지 않는 것으로 간주됩니다. 이 버전(또는 최신 버전)을 실행하는 경우 더 예측 가능한 동작이 codePush.getUpdateMetadata 있으므로 대신 를 사용하는 것이 좋습니다.

codePush.getCurrentPackage(): Promise<LocalPackage>;

현재 설치된 "패키지"에 대한 메타데이터(예: 설명, 설치 시간)를 검색합니다. 이는 업데이트가 적용된 후 "새로운 기능?" 대화 상자를 표시하거나 다시 시작 또는 다시 시작을 통해 적용되기를 기다리는 보류 중인 업데이트가 있는지 확인하는 등의 시나리오에 유용할 수 있습니다.

이 메서드는 Promise두 가지 가능한 값 중 하나로 확인되는 를 반환합니다.

  1. null 앱이 현재 CodePush 업데이트가 아닌 이진 파일에서 JS 번들을 실행하고 있으면 입니다. 이 문제는 다음과 같은 시나리오에서 발생합니다.

    1. 최종 사용자가 앱 이진 파일을 설치했으며 아직 CodePush 업데이트를 설치하지 않았습니다.
    2. 최종 사용자는 이전 CodePush 업데이트를 지우고 이진 파일의 JS 이진 파일에 우선 순위를 다시 지정하는 이진 파일(예: 저장소에서)의 업데이트를 설치했습니다.
  2. LocalPackage 현재 실행 중인 CodePush 업데이트에 대한 메타데이터를 나타내는 instance.

사용 예:

codePush.getCurrentPackage()
.then((update) => {
    // If the current app "session" represents the first time
    // this update has run, and it had a description provided
    // with it upon release, let's show it to the end user
    if (update.isFirstRun && update.description) {
        // Display a "what's new?" modal
    }
});

codePush.getUpdateMetadata

codePush.getUpdateMetadata(updateState: UpdateState = UpdateState.RUNNING): Promise<LocalPackage>;

상태가 지정된 updateState 매개 변수와 일치하는 설치된 업데이트(예: 설명, 필수)에 대한 메타데이터를 검색합니다. 이는 업데이트가 적용된 후 "새로운 기능?" 대화 상자를 표시하거나 다시 시작 또는 다시 시작을 통해 적용되기를 기다리는 보류 중인 업데이트가 있는지 확인하는 등의 시나리오에 유용할 수 있습니다. 가능한 업데이트 상태 및 표시되는 내용에 대한 자세한 내용은 UpdateState 참조를 참조하세요.

이 메서드는 Promise두 가지 가능한 값 중 하나로 확인되는 를 반환합니다.

  1. null 지정된 상태의 업데이트가 현재 없으면 입니다. 이 문제는 다음과 같은 시나리오에서 발생합니다.

    1. 최종 사용자가 아직 CodePush 업데이트를 설치하지 않았기 때문에 매개 변수로 지정한 모든 업데이트에 사용할 수 있는 메타데이터가 updateState 없습니다.

    2. 최종 사용자는 이전 CodePush 업데이트를 지우고 이진 파일의 JS 이진 파일에 우선 순위를 다시 지정하는 이진 파일(예: 저장소에서)의 업데이트를 설치했습니다. #1과 동일한 동작을 표시합니다.

    3. updateState 매개 변수는 로 UpdateState.RUNNING설정되어 있지만 앱이 현재 CodePush 업데이트를 실행하고 있지 않습니다. 보류 중인 업데이트가 있을 수 있지만 앱이 아직 다시 시작되지 않아 활성화되지 않았습니다.

    4. updateState 매개 변수는 로 UpdateState.PENDING설정되지만 앱에는 현재 보류 중인 업데이트가 없습니다.

  2. LocalPackage 현재 요청된 CodePush 업데이트(실행 중 또는 보류 중)에 대한 메타데이터를 나타내는 instance.

사용 예:

// Check if there's currently a CodePush update running, and if
// so, register it with the HockeyApp SDK (https://github.com/slowpath/react-native-hockeyapp)
// so that crash reports will correctly display the JS bundle version the user was running.
codePush.getUpdateMetadata().then((update) => {
    if (update) {
        hockeyApp.addMetadata({ CodePushRelease: update.label });
    }
});

// Check to see if there's still an update pending.
codePush.getUpdateMetadata(UpdateState.PENDING).then((update) => {
    if (update) {
        // There's a pending update, do we want to force a restart?
    }
});

codePush.notifyAppReady

codePush.notifyAppReady(): Promise<void>;

새로 설치된 업데이트를 성공으로 간주해야 하므로 자동 클라이언트 쪽 롤백이 필요하지 않음을 CodePush 런타임에 알릴 수 있습니다. 업데이트된 번들의 코드에서 이 함수를 호출해야 합니다. 그렇지 않으면 앱이 다음에 다시 시작될 때 CodePush 런타임은 설치된 업데이트가 실패했다고 가정하고 이전 버전으로 롤백합니다. 이 동작은 최종 사용자가 끊어진 업데이트로 인해 차단되지 않도록 하기 위해 존재합니다.

함수를 sync 사용하고 앱 시작 시 업데이트 검사 수행하는 경우 이 함수를 호출하므로 수동으로 호출 notifyAppReadysync 할 필요가 없습니다. 이 동작은 앱에서 가 호출되면 성공적인 시작의 근사치를 나타낸다는 sync 가정 때문에 존재합니다.

참고

또한 이 메서드는 (이전 버전과의 호환성을 위해)로 별칭이 notifyApplicationReady 지정됩니다.

codePush.restartApp

codePush.restartApp(onlyIfUpdateIsPending: Boolean = false): void;

앱을 즉시 다시 시작합니다. true 값이 매개 변수에 onlyIfUpdateIsPending 제공되면 실제로 적용 대기 중인 업데이트가 있는 경우에만 앱이 다시 시작됩니다.

이 메서드는 고급 시나리오를 위한 것이며, 다음 조건이 충족될 때 주로 유용합니다.

  1. 앱이 또는 LocalPackage.install 메서드를 호출할 때 또는 ON_NEXT_RESUMEON_NEXT_RESTART 설치 모드 값을 지정합니다sync. 앱이 다시 시작되거나(최종 사용자 또는 OS에서) 다시 시작될 때까지 업데이트가 적용되지 않으므로 업데이트가 최종 사용자에게 즉시 표시되지 않습니다.

  2. 앱별 사용자 이벤트(예: 최종 사용자가 앱의 홈 경로로 다시 이동)를 통해 눈에 거슬리지 않는 방식으로 업데이트를 적용할 수 있으며, 다음 다시 시작 또는 다시 시작할 때까지 기다리는 것보다 더 빨리 최종 사용자에게 업데이트를 받을 수 있습니다.

codePush.sync

codePush.sync(options: Object, syncStatusChangeCallback: function(syncStatus: Number), downloadProgressCallback: function(progress: DownloadProgress), handleBinaryVersionMismatchCallback: function(update: RemotePackage)): Promise<Number>;

앱의 JavaScript 번들 및 이미지 자산을 구성된 배포에 대한 최신 릴리스와 동기화합니다. 업데이트가 있는지 확인하고 다음에 sync 수행할 작업을 제어하는 checkForUpdate 메서드와 달리 업데이트 검사, 다운로드 및 설치 환경을 처리합니다.

이 메서드는 서로 다른 요구 사항이 있는 앱을 쉽게 사용하도록 설정하는 두 가지 (사용자 지정 가능한) "모드"를 지원합니다.

  1. 자동 모드(기본 동작) 는 사용 가능한 업데이트를 자동으로 다운로드하고 다음에 앱이 다시 시작될 때 적용합니다(예: OS 또는 최종 사용자가 종료했거나 디바이스가 다시 시작됨). 이렇게 하면 업데이트 프롬프트 또는 "가상" 앱이 다시 시작되지 않으므로 전체 업데이트 환경은 최종 사용자에게 "자동"입니다.

  2. 업데이트를 사용할 수 있는 활성 모드는 다운로드하기 전에 최종 사용자에게 사용 권한을 묻는 메시지를 표시한 다음 즉시 업데이트를 적용합니다. 플래그를 사용하여 mandatory 업데이트가 릴리스된 경우 최종 사용자에게 업데이트에 대한 알림이 계속 표시되지만 무시할 수 있는 선택은 없습니다.

사용 예:

// Fully silent update that keeps the app in
// sync with the server, without ever
// interrupting the end user
codePush.sync();

// Active update, which lets the end user know
// about each update, and displays it to them
// immediately after downloading it
codePush.sync({ updateDialog: true, installMode: codePush.InstallMode.IMMEDIATE });

최종 사용자의 디바이스 배터리 수준, 네트워크 상태 등에 따라 사용 가능한 업데이트를 검사 또는 다운로드할지 결정하려는 경우 원하는 경우에만 호출하도록 하는 조건으로 호출을 sync 래핑합니다.

SyncOptions

메서드는 sync 구성이 거의 없는 자동 및 활성 업데이트를 쉽게 수행하려고 하지만 위에서 언급한 기본 동작의 여러 측면을 사용자 지정할 수 있는 "options" 개체를 허용합니다. 사용할 수 있는 옵션은 다음과 같은 옵션을 제외하고 checkFrequencyCodePushOptions와 동일합니다.

사용 예:

// Use a different deployment key for this
// specific call, instead of the one configured
// in the Info.plist file
codePush.sync({ deploymentKey: "KEY" });

// Download the update silently, but install it on
// the next resume, as long as at least 5 minutes
// has passed since the app was put into the background.
codePush.sync({ installMode: codePush.InstallMode.ON_NEXT_RESUME, minimumBackgroundDuration: 60 * 5 });

// Download the update silently, and install optional updates
// on the next restart, but install mandatory updates on the next resume.
codePush.sync({ mandatoryInstallMode: codePush.InstallMode.ON_NEXT_RESUME });

// Changing the title displayed in the
// confirmation dialog of an "active" update
codePush.sync({ updateDialog: { title: "An update is available!" } });

// Displaying an update prompt which includes the
// description for the CodePush release
codePush.sync({
   updateDialog: {
    appendReleaseDescription: true,
    descriptionPrefix: "\n\nChange log:\n"
   },
   installMode: codePush.InstallMode.IMMEDIATE
});

// Shortening the retry delay and increasing
// the number of maximum retry attempts
// in comparison to defaults
codePush.sync({
   rollbackRetryOptions: {
    delayInHours: 8,
    maxRetryAttempts: 3
   }
});

옵션 sync 외에도 메서드는 "파이프라인"의 sync 수명 주기를 구독하여 필요에 따라 추가 UI를 표시할 수 있는 몇 가지 선택적 함수 매개 변수를 허용합니다(예: "업데이트 모달 확인 또는 다운로드 진행 모달).

  • syncStatusChangedCallback((syncStatus: Number) => void) - 동기화 프로세스가 전체 업데이트 프로세스에서 한 단계에서 다른 단계로 이동할 때 호출됩니다. 메서드는 현재 상태를 나타내는 상태 코드와 함께 호출되며 값이 SyncStatus 될 수 있습니다.

  • downloadProgressCallback((progress: DownloadProgress) => void) - CodePush 서버에서 사용 가능한 업데이트를 다운로드할 때 주기적으로 호출됩니다. 메서드는 다음 두 속성을 포함하는 개체를 사용하여 호출 DownloadProgress 됩니다.

    • totalBytes(Number) - 이 업데이트에 대해 수신될 것으로 예상되는 총 바이트 수입니다(이전 릴리스에서 변경된 파일 집합의 크기).

    • receivedBytes(Number) - 다운로드 진행률을 추적하는 데 사용할 수 있는 지금까지 다운로드한 바이트 수입니다.

  • handleBinaryVersionMismatchCallback((update: RemotePackage) => void) - 사용 가능한 이진 업데이트가 있을 때 호출됩니다. 메서드는 개체를 사용하여 RemotePackage 호출됩니다. 자세한 내용은 codePush.checkForUpdate 섹션을 참조하세요.

사용 예:

// Prompt the user when an update is available
// and then display a "downloading" modal
codePush.sync({ updateDialog: true },
  (status) => {
      switch (status) {
          case codePush.SyncStatus.DOWNLOADING_PACKAGE:
              // Show "downloading" modal
              break;
          case codePush.SyncStatus.INSTALLING_UPDATE:
              // Hide "downloading" modal
              break;
      }
  },
  ({ receivedBytes, totalBytes, }) => {
    /* Update download modal progress */
  }
);

이 메서드는 호출이 Promise성공한 이유를 나타내는 코드로 SyncStatus 확인되는 를 sync 반환합니다. 이 코드는 다음 SyncStatus 값 중 하나일 수 있습니다.

  • codePush.SyncStatus.UP_TO_DATE(4) - 앱이 CodePush 서버를 사용하여 최신 상태입니다.

  • codePush.SyncStatus.UPDATE_IGNORED(5) - 앱에 최종 사용자가 무시하도록 선택한 선택적 업데이트가 있었습니다. (이 기능은 가 사용되는 경우에만 적용할 수 있습니다 updateDialog .)

  • codePush.SyncStatus.UPDATE_INSTALLED(6) - 업데이트가 설치되었으며 함수가 반환된 직후 syncStatusChangedCallback 또는 다음에 앱이 다시 시작/다시 시작될 때 에 SyncOptions지정된 에 InstallMode 따라 실행됩니다.

  • codePush.SyncStatus.SYNC_IN_PROGRESS(7) - 현재 호출이 실행되지 않도록 하는 진행 중인 sync 작업이 실행되고 있습니다.

메서드는 sync 업데이트를 위해 검사 원하는 모든 위치에서 호출할 수 있습니다. 루트 구성 요소의 수명 주기 이벤트, 구성 요소의 <TouchableHighlight> onPress 처리기, 주기적 타이머 콜백 또는 필요에 맞는 다른 모든 항목이 있을 componentWillMount 수 있습니다. 메서드와 checkForUpdate 마찬가지로 백그라운드에서 업데이트를 검사 네트워크 요청을 수행하므로 UI 스레드 또는 JavaScript 스레드의 응답성에 영향을 주지 않습니다.

패키지 개체

getUpdateMetadata 메서드는 checkForUpdate 개체를 반환 Promise 합니다. 이 개체는 확인되면 "package" 개체에 대한 액세스를 제공합니다. 패키지는 코드 업데이트 및 추가 메타데이터(예: 설명, 필수?)를 나타냅니다. CodePush API는 다음 유형의 패키지를 구분합니다.

  • LocalPackage: 이미 실행 중이거나 설치되어 있고 앱 다시 시작을 보류 중인 다운로드한 업데이트를 나타냅니다.

  • RemotePackage: 아직 다운로드되지 않은 CodePush 서버에서 사용 가능한 업데이트를 나타냅니다.

LocalPackage

로컬로 다운로드되었거나 이미 설치된 업데이트에 대한 세부 정보를 포함합니다. 모듈 수준 getUpdateMetadata 메서드를 호출하거나 메서드에서 반환된 promise 값으로 이 개체의 instance 대한 참조를 RemotePackage.download 가져올 수 있습니다.

속성
  • appVersion: 이 업데이트가 종속된 앱 이진 버전입니다. CLI의 명령을 호출할 때 매개 변수를 appStoreVersion 통해 지정된 값입니다 release . (문자열)
  • deploymentKey: 원래 이 업데이트를 다운로드하는 데 사용된 배포 키입니다. (문자열)
  • description: 업데이트에 대한 설명입니다. 이는 업데이트를 릴리스할 때 CLI에서 지정한 것과 동일한 값입니다. (문자열)
  • failedInstall: 이 업데이트가 이전에 설치되었지만 롤백되었는지 여부를 나타냅니다. 메서드는 sync 이전에 실패한 업데이트를 자동으로 무시하므로 를 사용하는 checkForUpdate경우에만 이 속성에 대해 걱정할 필요가 있습니다. (부울)
  • isFirstRun: 설치 후 업데이트가 처음 실행되었는지 여부를 나타냅니다. 이는 "새로운 기능"을 표시할지 여부를 결정하는 데 유용합니다. 업데이트를 설치한 후 최종 사용자에게 UI를 적용합니다. (부울)
  • isMandatory: 업데이트가 필수로 간주되는지 여부를 나타냅니다. 업데이트가 릴리스되었을 때 CLI에 지정된 값입니다. (부울)
  • isPending: 이 업데이트가 "보류 중" 상태인지 여부를 나타냅니다. 이면 true업데이트가 다운로드되고 설치되었지만 적용하는 데 필요한 앱 다시 시작이 아직 발생하지 않았기 때문에 변경 내용이 현재 최종 사용자에게 표시되지 않습니다. (부울)
  • label: CodePush 서버에서 업데이트에 자동으로 지정된 내부 레이블(예: v5)입니다. 이 값은 배포 내에서 업데이트를 고유하게 식별합니다. (문자열)
  • packageHash: 업데이트의 SHA 해시 값입니다. (문자열)
  • packageSize: 업데이트 내에 포함된 코드의 크기(바이트)입니다. (숫자)
메서드
  • install(installMode: codePush.InstallMode = codePush.InstallMode.ON_NEXT_RESTART, minimumBackgroundDuration = 0): 약속<void>: 런타임에서 최신 버전의 앱을 찾을 것으로 예상되는 디스크의 위치에 저장하여 업데이트를 설치합니다. 매개 변수는 installMode 변경 내용이 최종 사용자에게 표시되는 시기를 제어합니다. 기본값은 다음 앱이 다시 시작될 때까지 기다렸다가 변경 내용을 표시하지만, 열거형 참조를 참조하여 InstallMode 사용 가능한 옵션과 해당 옵션에 대한 설명을 참조할 수 있습니다. 매개 변수가 installModeminimumBackgroundDuration 설정된 InstallMode.ON_NEXT_RESUME경우 매개 변수를 사용하면 앱이 다시 시작된 후 설치를 강제로 적용하기 전에 백그라운드에 있어야 하는 기간을 제어할 수 있습니다.

RemotePackage

CodePush 서버에서 다운로드할 수 있는 업데이트에 대한 세부 정보를 포함합니다. 업데이트를 사용할 수 있을 때 메서드를 호출 checkForUpdate 하여 이 개체의 instance 대한 참조를 가져옵니다. API를 sync 사용하는 경우 다운로드 및 설치 프로세스가 자동으로 처리되므로 에 대해 RemotePackage걱정할 필요가 없습니다.

속성

RemotePackage 와 동일한 속성을 LocalPackage모두 상속하지만 하나 더 포함됩니다.

  • downloadUrl: 패키지를 다운로드할 수 있는 URL입니다. 메서드가 자동으로 업데이트 획득을 처리하므로 이 속성은 고급 사용에 download 만 필요합니다. (문자열)
메서드
  • download(downloadProgressCallback?: Function): Promise<LocalPackage>: CodePush 서비스에서 사용 가능한 업데이트를 다운로드합니다. 가 downloadProgressCallback 지정된 경우 완료될 때까지 다운로드 진행률을 보고하는 개체({ totalBytes: Number, receivedBytes: Number })를 DownloadProgress 사용하여 주기적으로 호출됩니다. 로 확인되는 Promise를 LocalPackage반환합니다.

열거형

CodePush API에는 업데이트 환경을 사용자 지정하는 데 사용할 수 있는 다음 열거형이 포함되어 있습니다.

InstallMode

이 열거형은 설치된 업데이트를 실제로 적용할 시기를 지정하고 또는 LocalPackage.install 메서드에 sync 전달할 수 있습니다. 여기에는 다음 값이 포함됩니다.

  • codePush.InstallMode.IMMEDIATE(0) - 업데이트를 설치하고 앱을 즉시 다시 시작하려고 했음을 나타냅니다. 이 값은 설치를 수락한 직후 변경 내용이 표시될 것으로 예상되므로 사용자에게 업데이트 프롬프트를 표시할 때뿐만 아니라 디버깅 시나리오에도 적합합니다. 또한 이 모드는 업데이트 설치와 다음 번에 최종 사용자가 앱을 다시 시작하거나 다시 시작할 때 원치 않는 대기 시간을 제거하기 때문에 필수 업데이트를 적용하는 데 사용할 수 있습니다.

  • codePush.InstallMode.ON_NEXT_RESTART(1) - 업데이트를 설치하려고 하지만 강제로 앱을 다시 시작하지 않음을 나타냅니다. OS 또는 최종 사용자로 인해 앱이 "자연스럽게" 다시 시작되면 업데이트가 원활하게 선택됩니다. 이 값은 자동 업데이트를 수행할 때 적합합니다. 앱이 갑자기 갑자기 다시 시작되는 경우 최종 사용자에게 방해가 될 수 있기 때문일 수 있습니다. 그들은 업데이트가 다운로드되었다는 것을 깨닫지 못했습니다. 및 LocalPackage.install 메서드 모두 sync 에 사용되는 기본 모드입니다.

  • codePush.InstallMode.ON_NEXT_RESUME(2) - 업데이트를 설치하려고 하지만 다음에 최종 사용자가 백그라운드에서 다시 시작할 때까지 앱을 다시 시작하지 않음을 나타냅니다. 이렇게 하면 현재 세션을 중단하지는 않지만 다음 자연 다시 시작을 기다리는 것보다 더 빨리 업데이트를 받을 수 있습니다. 이 값은 비침습적 방식으로 다시 시작 시 적용할 수 있는 자동 설치에 적합합니다.

  • codePush.InstallMode.ON_NEXT_SUSPEND(3) - 앱 일시 중단이 중요하지 않을 만큼 길지 않은 한 사용자 컨텍스트가 손실되지 않도록 백그라운드에 있는 동안 에만(기본적으로 0) 백그라운드 minimumBackgroundDuration 에서 업데이트를 설치하려고 했음을 나타냅니다.

CheckFrequency

이 열거형은 업데이트를 위해 앱을 서버와 동기화할 시기를 지정하고 데코레이터에 codePushify 전달할 수 있습니다. 여기에는 다음 값이 포함됩니다.

  • codePush.CheckFrequency.ON_APP_START(0) - 앱 프로세스가 시작될 때마다 업데이트를 검사 하려는 것을 나타냅니다.

  • codePush.CheckFrequency.ON_APP_RESUME(1) - "백그라운드"가 된 후 앱이 포그라운드로 돌아올 때마다 업데이트를 검사 하려는 것을 나타냅니다(사용자가 홈 단추를 누르고 앱이 별도의 결제 프로세스를 시작하는 등).

  • codePush.CheckFrequency.MANUAL(2) - 업데이트에 대한 자동 검사를 사용하지 않도록 설정하지만 앱 코드에서 가 호출된 경우에만 검사codePush.sync().

SyncStatus

이 열거형은 전체 업데이트 프로세스에 syncStatusChangedCallback 연결하기 위해 sync 메서드에 전달할 수 있는 함수에 제공됩니다. 여기에는 다음 값이 포함됩니다.

  • codePush.SyncStatus.CHECKING_FOR_UPDATE(0) - CodePush 서버에서 업데이트를 쿼리하고 있습니다.
  • codePush.SyncStatus.AWAITING_USER_ACTION(1) - 업데이트를 사용할 수 있으며 최종 사용자에게 확인 대화 상자가 표시되었습니다. (이 기능은 가 사용되는 경우에만 적용할 수 있습니다 updateDialog .)
  • codePush.SyncStatus.DOWNLOADING_PACKAGE(2) - CodePush 서버에서 사용 가능한 업데이트가 다운로드되고 있습니다.
  • codePush.SyncStatus.INSTALLING_UPDATE(3) - 사용 가능한 업데이트가 다운로드되어 설치될 예정입니다.
  • codePush.SyncStatus.UP_TO_DATE(4) - 앱이 구성된 배포를 통해 완전히 최신 상태입니다.
  • codePush.SyncStatus.UPDATE_IGNORED(5) - 최종 사용자가 무시하도록 선택한 선택적 업데이트가 앱에 있습니다. (이 기능은 가 사용되는 경우에만 적용할 수 있습니다 updateDialog .)
  • codePush.SyncStatus.UPDATE_INSTALLED(6) - 사용 가능한 업데이트가 설치되었으며 함수가 반환된 직후 syncStatusChangedCallback 또는 다음에 앱이 다시 시작/다시 시작될 때 에 SyncOptions지정된 에 InstallMode 따라 실행됩니다.
  • codePush.SyncStatus.SYNC_IN_PROGRESS(7) - 현재 호출이 실행되지 않도록 하는 지속적인 sync 작업이 있습니다.
  • codePush.SyncStatus.UNKNOWN_ERROR(-1) - 동기화 작업에서 알 수 없는 오류를 발견했습니다.

UpdateState

이 열거형은 업데이트가 현재 상태이며 메서드를 호출 getUpdateMetadata 할 때 지정할 수 있는 상태를 지정합니다. 여기에는 다음 값이 포함됩니다.

  • codePush.UpdateState.RUNNING(0) - 업데이트가 현재 실행 중인 앱의 버전을 나타낸다는 것을 나타냅니다. 이는 "새로운 기능" 대화 상자에 릴리스 설명을 표시하거나 최신 버전을 분석 또는 크래시 보고 서비스에 보고하는 등의 시나리오에서 앱에 대한 특성을 식별하는 데 유용할 수 있습니다.

  • codePush.UpdateState.PENDING(1) - 업데이트가 설치되었지만 앱이 아직 다시 시작되지 않았음을 나타냅니다. 이는 보류 중인 업데이트가 있는지 여부를 결정하는 데 유용할 수 있으며, 이를 통해 restartApp프로그래밍 방식으로 다시 시작하도록 강제 적용할 수 있습니다.

  • codePush.UpdateState.LATEST(2) - 업데이트가 사용 가능한 최신 릴리스를 나타내며 현재 실행 중이거나 보류 중일 수 있음을 나타냅니다.

Objective-C API 참조(iOS)

Objective-C API는 헤더를 CodePush.hAppDelegate.m 파일로 가져와 사용할 수 있으며 라는 CodePush단일 공용 클래스로 구성됩니다.

CodePush

가장 최근의 JavaScript 번들 파일을 나타내는 를 검색하기 NSURL 위한 정적 메서드를 포함하며 AppDelegate.m 파일에서 앱을 부트스트래핑할 RCTRootView때 의 initWithBundleURL 메서드에 전달할 수 있습니다.

클래스의 메서드는 CodePush 다음 시나리오를 수용하기 위해 항상 적절한 번들을 로드하는 복합 확인자로 간주할 수 있습니다.

  1. 최종 사용자가 저장소(예: 1.0.0)에서 앱을 설치하면 이진 파일에 포함된 JS 번들을 받게 됩니다. 이는 CodePush를 사용하지 않고 얻을 수 있는 동작이지만 :) 중단되지 않도록 합니다.

  2. CodePush 업데이트 릴리스를 시작하는 즉시 최종 사용자는 구성된 배포에 대한 최신 릴리스를 나타내는 JS 번들을 받게 됩니다. 이는 스토어에 배송한 것 이상으로 반복할 수 있는 동작입니다.

  3. 앱 스토어(예: 1.1.0)에 대한 업데이트를 릴리스하고 최종 사용자가 업데이트하는 즉시 이진 파일에 포함된 JS 번들을 다시 가져옵니다. 이 동작은 이전 이진 버전을 대상으로 하는 CodePush 업데이트가 사용되지 않도록 하고(작동할지 모르기 때문에) 최종 사용자에게는 항상 앱의 작동 버전이 있습니다.

  4. CodePush 릴리스 및 앱 스토어 릴리스가 무한대(그리고 그 너머)로 계속 진행되면 #2 및 #3을 반복합니다.

이 동작으로 인해 필요에 따라 앱 스토어와 CodePush 모두에 업데이트를 안전하게 배포할 수 있으며 최종 사용자는 항상 최신 버전을 얻을 수 있습니다.

메서드

  • (NSURL *)bundleURL - 위에서 설명한 대로 가장 최근의 JS 번들을 NSURL 반환합니다. 이 메서드는 앱 이진 파일에 포함된 JS 번들의 이름이 라고 main.jsbundle가정합니다.

  • (NSURL *)bundleURLForResource:(NSString *)resourceName - 메서드와 동일 bundleURL 하지만 앱 이진 파일 내에서 검색되는 JS 번들의 이름을 사용자 지정할 수도 있습니다. 기본 규칙인 이 파일 main 의 이름을 지정하지 않는 경우에 유용합니다. 이 메서드는 JS 번들의 확장이 이라고 가정 합니다 *.jsbundle.

  • (NSURL *)bundleURLForResource:(NSString *)resourceName withExtension:(NSString *)resourceExtension: 메서드와 동일 bundleURLForResource: 하지만 앱 이진 파일 내에서 검색되는 JS 번들에서 사용하는 확장을 사용자 지정할 수도 있습니다. 기본 규칙인 이 파일 *.jsbundle 의 이름을 지정하지 않는 경우에 유용합니다.

  • (void)overrideAppVersion:(NSString *)appVersionOverride - 애플리케이션의 이진 인터페이스 버전을 설정합니다. 그렇지 않으면 Info.plist에서 로 지정된 App Store 버전으로 CFBundleShortVersionString 기본 설정됩니다. 번들 URL이 로드되기 전에 한 번 호출해야 합니다.

  • (void)setDeploymentKey:(NSString *)deploymentKey - 업데이트를 쿼리할 때 앱에서 사용해야 하는 배포 키를 설정합니다. 이는 Info.plist에서 배포 키를 설정하거나 또는 sync를 호출 checkForUpdate 할 때 JS에서 배포 키를 지정하는 동적 대안입니다.

Java API 참조(Android)

React Native 0.60 이상용 API

autolinking 를 사용하여 react-native.config.js 플러그 인을 연결하므로 생성자가 해당 파일에 지정됩니다. 그러나 이러한 값을 문자열 리소스에 배치하여 CodePush 플러그 인을 관리하도록 사용자 지정 변수를 재정의할 수 있습니다.

  • 공개 키 - 코드 서명 기능의 번들 확인에 사용됩니다. 코드 서명 기능에 대한 자세한 내용은 코드 서명 섹션을 참조하세요. 공개 키를 설정하려면 이름 를 사용하여 공개 키의 콘텐츠를 에 strings.xmlCodePushPublicKey추가해야 합니다. CodePush는 자동으로 이 속성을 가져오고 코드 서명 기능을 사용하도록 설정합니다. 예를 들면 다음과 같습니다.

    <string moduleConfig="true" name="CodePushPublicKey">your-public-key</string>
    
  • 서버 URL - CodePush 서버 URL을 지정하는 데 사용됩니다. 기본값: "https://codepush.appcenter.ms/" 이름이 CodePushServerUrl인 에 경로를 추가하여 를 재정의합니다strings.xml. CodePush는 자동으로 이 속성을 가져오고 이 경로를 사용하여 요청을 보냅니다. 예를 들면 다음과 같습니다.

    <string moduleConfig="true" name="CodePushServerUrl">https://yourcodepush.server.com</string>
    

0.60보다 낮은 React Native 대한 API

Java API는 클래스를 com.microsoft.codepush.react.CodePushMainActivity.java 파일로 가져와 사용할 수 있으며 라는 CodePush단일 공용 클래스로 구성됩니다.

CodePush

CodePush 클라이언트 런타임을 생성하고 앱의 패키지 목록에 추가하는 instance 나타냅니다 ReactPackage .

생성자

  • CodePush(String deploymentKey, Activity mainActivity) - 제공된 배포 키를 통해 서비스에 업데이트를 쿼리하는 데 사용되는 CodePush 런타임의 새 instance 만듭니다. mainActivity 클래스 내에서 MainActivity React 패키지 목록을 구성할 때 항상 매개 변수를 로 설정 this 해야 합니다. 이 생성자는 CodePush 런타임을 "릴리스 모드"로 설정하므로 디버깅 동작을 사용하도록 설정하려면 다음 생성자를 대신 사용합니다.

  • CodePush(String deploymentKey, Activity mainActivity, bool isDebugMode) - 이전 생성자와 동일하지만 CodePush 런타임이 디버그 모드에 있는지 여부를 지정할 수 있습니다. 이 생성자를 사용할 때는 항상 매개 변수를 isDebugMode 로 설정 BuildConfig.DEBUG 하여 빌드 형식과 동기화 상태를 유지해야 합니다. CodePush를 디버그 모드로 전환할 때 다음 동작이 사용하도록 설정됩니다.

    1. 새 이진 파일이 에뮬레이터/디바이스에 배포될 때마다 이전 CodePush 업데이트는 스토리지에서 삭제되지 않습니다. 이 동작을 사용하면 개발 중에 버전을 충돌하지 않고 앱이 를 호출 sync할 때마다 동일한 업데이트를 지속적으로 받지 않고 새 이진 파일을 배포할 수 있습니다.

    2. React Native 런타임이 디버그 모드에서 유지 관리하는 로컬 캐시는 CodePush 업데이트가 설치될 때마다 삭제됩니다. 이렇게 하면 업데이트가 적용된 후 앱이 다시 시작될 때 예상되는 변경 내용을 볼 수 있습니다. 이 PR이 병합되는 즉시 더 이상 이 작업을 수행할 필요가 없습니다.

  • CodePush(String deploymentKey, Context context, boolean isDebugMode, Integer publicKeyResourceDescriptor) - 이전 생성자와 동일하지만 공개 키 콘텐츠를 읽는 데 필요한 공개 키 리소스 설명자를 지정할 수 있습니다. 코드 서명 기능에 대한 자세한 내용은 코드 서명 섹션을 참조하세요.

  • CodePush(String deploymentKey, Context context, boolean isDebugMode, String serverUrl) - 생성자를 사용하면 CodePush 서버 URL을 지정할 수 있습니다. 기본값: "https://codepush.appcenter.ms/" 는 에 serverUrl지정된 값으로 재정의됩니다.

정적 메서드

  • getBundleUrl() - 리소스 이름이 이라고 가정하여 앱의 JS 번들 파일의 최신 버전 경로를 반환합니다 index.android.bundle. 앱이 다른 번들 이름을 사용하는 경우 이 메서드의 오버로드된 버전을 사용하여 지정할 수 있습니다. 이 메서드는 위에서 설명한 Objective-C와 동일한 해상도 동작을 가합니다.

  • getBundleUrl(String bundleName) - 지정된 리소스 이름(예 index.android.bundle: )을 사용하여 앱의 JS 번들 파일의 최신 버전에 대한 경로를 반환합니다. 이 메서드는 위에서 설명한 Objective-C와 동일한 해상도 동작을 가합니다.

  • overrideAppVersion(String appVersionOverride) - 애플리케이션의 이진 인터페이스 버전을 설정하며, 그렇지 않으면 build.gradle에서 로 지정된 Play Store 버전으로 versionName 기본 설정됩니다. CodePush instance 생성되기 전에 한 번 호출해야 합니다.