자동 업데이트

Google은 버그 및 보안 수정사항 통합, 새로운 기능 또는 성능 향상 추가, 사용자 인터페이스 개선 등의 이유로 Chrome 확장 프로그램과 앱을 자동 업데이트하고자 합니다.

Chrome 개발자 대시보드를 사용하여 게시하는 경우 이 페이지를 무시해야 합니다. 미리보기를 통과한 Chrome 웹 스토어 제출물은 확장 프로그램의 Chrome 웹 스토어 항목 등록정보에 자동으로 제공되고 최종 사용자에게 배포됩니다.

웹 서버에서 CRX 파일을 호스팅하고 엔터프라이즈 정책을 사용하여 관리 기기로 푸시하는 경우 계속 읽어보세요. 호스팅패키징도 읽어야 합니다.

이전에는 오프 스토어 확장 프로그램이 지원되는 경우 네이티브 바이너리와 확장 프로그램을 잠금 단계에서 업데이트할 수 있었습니다. 하지만 Chrome 웹 스토어에서 호스팅되는 확장 프로그램은 개발자가 제어하지 않는 Chrome 업데이트 메커니즘을 통해 업데이트됩니다. 확장 프로그램 개발자는 네이티브 바이너리에 종속 항목이 있는 확장 프로그램 (예: NPAPI를 사용하는 기존 확장 프로그램)을 업데이트할 때 주의해야 합니다.

개요

  • 매니페스트에는 업데이트 확인을 수행할 위치를 가리키는 'update_url' 필드가 포함될 수 있습니다.
  • 업데이트 확인에서 반환되는 콘텐츠는 최신 버전의 확장 프로그램이 나열된 업데이트 매니페스트 XML 문서입니다.

브라우저에서 설치된 확장 프로그램이나 앱에 업데이트 URL이 있는지 몇 시간마다 확인합니다. 파일마다 업데이트 매니페스트 XML 파일을 찾기 위해 해당 URL에 요청을 보냅니다. 업데이트 매니페스트에 설치된 버전보다 더 최신인 버전이 언급되면 브라우저에서 새 버전을 다운로드하여 설치합니다. 수동 업데이트와 마찬가지로 새 .crx 파일은 현재 설치된 버전과 동일한 비공개 키로 서명해야 합니다.

업데이트 URL

자체 확장 프로그램 또는 앱을 호스팅하는 경우 다음과 같이 manifest.json 파일에 'update_url' 필드를 추가해야 합니다.

{
  "name": "My extension",
  ...
  "update_url": "http://myhost.com/mytestextension/updates.xml",
  ...
}

매니페스트 업데이트

서버에서 반환하는 업데이트 매니페스트는 다음과 같은 XML 문서여야 합니다(강조표시는 수정해야 하는 부분을 나타냄).

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

이 XML 형식은 Google의 업데이트 인프라인 Omaha에서 사용하는 형식을 차용한 것입니다. 자세한 내용은 http://code.google.com/p/omaha/를 참조하세요. 확장 프로그램 시스템은 업데이트 매니페스트의 요소에 다음 속성을 사용합니다.

appid

패키징에 설명된 대로 공개 키의 해시를 기반으로 생성된 확장 프로그램 또는 앱 ID입니다. 확장 프로그램 페이지(chrome://extensions)로 이동하여 확장 프로그램 또는 Chrome 앱의 ID를 찾을 수 있습니다.

하지만 호스팅된 앱은 확장 프로그램 페이지에 표시되지 않습니다. 다음 단계에 따라 앱의 ID를 찾을 수 있습니다.

  • 앱을 엽니다. 새 탭 페이지에서 앱 아이콘을 클릭하면 됩니다.
  • JavaScript 콘솔을 엽니다. 렌치 아이콘을 클릭하고 도구 > 자바스크립트 콘솔을 선택하면 됩니다.
  • JavaScript 콘솔에 다음 표현식을 입력합니다. chrome.app.getDetails().id Console에는 앱 ID가 따옴표로 묶인 문자열로 표시됩니다.
코드베이스

.crx 파일의 URL입니다.

버전

클라이언트가 codebase에서 지정한 .crx 파일을 다운로드해야 하는지 결정하는 데 사용됩니다. .crx 파일의 manifest.json 파일에 있는 'version'의 값과 일치해야 합니다.

업데이트 매니페스트 XML 파일에는 여러 요소를 포함하여 여러 확장자에 관한 정보가 포함될 수 있습니다.

테스트

기본 업데이트 확인 빈도는 몇 시간이지만 확장 프로그램 페이지의 지금 확장 프로그램 업데이트 버튼을 사용하여 강제로 업데이트할 수 있습니다.

고급 사용법: 요청 매개변수

기본 자동 업데이트 메커니즘은 서버 측 작업이 간단하게 Apache와 같은 일반 웹 서버에 드롭되고 확장 프로그램의 새 버전을 출시할 때 XML 파일을 업데이트하는 것처럼 쉽게 작동하도록 설계되었습니다.

고급 개발자는 업데이트 매니페스트 요청에 매개변수를 추가하여 확장 프로그램 ID와 버전을 표시한다는 점을 활용하는 것이 좋습니다. 그러면 모든 확장 프로그램에 동일한 업데이트 URL을 사용하여 정적 XML 파일 대신 동적 서버 측 코드를 실행하는 URL을 가리킬 수 있습니다.

요청 매개변수의 형식은 다음과 같습니다.

?x=_<extension_data>_

여기서 _<extension_data>_는 다음 형식의 URL 인코딩 문자열입니다.

_id=<id>_&v=_<version>_

예를 들어 두 개의 확장 프로그램이 있고 둘 다 동일한 업데이트 URL(http://test.com/extension_updates.php)을 가리키고 있다고 가정해 보겠습니다.

  • 확장 프로그램 1
    • ID: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaa'
    • 버전: '1.1'
  • 확장 프로그램 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • 버전: '0.4'

각 개별 확장 프로그램 업데이트 요청은 다음과 같습니다.

  • http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
  • http://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

고유한 업데이트 URL마다 하나의 요청에 여러 확장 프로그램을 표시할 수 있습니다. 위 예에서는 사용자가 두 확장 프로그램을 모두 설치한 경우 두 요청이 단일 요청으로 병합됩니다.

http://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

동일한 업데이트 URL을 사용하는 설치된 확장 프로그램 수가 GET 요청 URL이 너무 길면 (2,000자 이상) 업데이트 검사는 필요에 따라 추가 GET 요청을 실행합니다.

고급 사용: 최소 브라우저 버전

확장 프로그램 시스템에 더 많은 API가 추가됨에 따라 최신 버전의 브라우저에서만 작동하는 확장 프로그램이나 앱의 업데이트된 버전을 출시하고 싶을 수 있습니다. Chrome 자체는 자동 업데이트되지만, 대부분의 사용자층이 새 버전으로 업데이트되려면 며칠이 걸릴 수 있습니다. 특정 업데이트가 특정 버전 이상의 Chrome 버전에만 적용되도록 하려면 'prodversionmin' 속성을 업데이트 매니페스트의 요소에 추가합니다. 예를 들면 다음과 같습니다.

<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
  <app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
    <updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
  </app>
</gupdate>

이렇게 하면 Chrome 3.0.193.0 이상을 실행하는 경우에만 버전 2로 자동 업데이트됩니다.