자동 업데이트

Google은 버그 및 보안 수정사항을 통합하고, 새로운 기능 또는 성능 개선사항을 추가하고, 사용자 인터페이스를 개선하기 위해 Google Chrome 자체와 동일한 이유로 확장 프로그램과 앱이 자동으로 업데이트되기를 바랍니다.

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

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

이전에는 오프스토어 확장 프로그램이 지원될 때 바이너리와 확장 프로그램을 동시에 업데이트할 수 있었습니다. 그러나 Chrome 웹 스토어에 호스팅된 확장 프로그램은 개발자가 제어할 수 없는 Chrome 업데이트 메커니즘을 사용하여 업데이트됩니다. 확장 프로그램 개발자는 바이너리에 종속된 확장 프로그램 (예: NPAPI를 사용하는 기존 확장 프로그램)을 업데이트할 때 주의해야 합니다.

개요

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

브라우저는 몇 시간마다 설치된 확장 프로그램 또는 앱에 업데이트 URL이 있는지 확인합니다. 각 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/를 참고하세요. 확장 프로그램 시스템은 업데이트 매니페스트의 <app><updatecheck> 요소에 다음 속성을 사용합니다.

appid

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

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

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

.crx 파일의 URL입니다.

version

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

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

테스트

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

고급 사용: 요청 매개변수

기본 자동 업데이트 메커니즘은 서버 측 작업을 최소화하도록 설계되었습니다. Apache와 같은 웹 서버에 정적 XML 파일을 추가하고 확장 프로그램의 새 버전을 출시할 때 이 XML 파일을 업데이트하면 됩니다.

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

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

?x=_<extension_data>_

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

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

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

  • 확장 프로그램 1
    • ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • 버전: '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 자체는 자동 업데이트되지만, 대부분의 사용자층이 특정 새 버전으로 업데이트되기까지 며칠이 걸릴 수 있습니다. 특정 업데이트가 특정 버전 이상의 Google Chrome 버전에만 적용되도록 하려면 업데이트 매니페스트의 <app> 요소에 '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로 자동 업데이트됩니다.