Как изменить идентификатор упакованного приложения Chrome Или зачем нам нужно ключевое поле в manifest.json?
Я разрабатываю упакованное приложение для магазина Chrome, используя единовременные платежи Chrome Wallet. Для моего приложения мне нужно проверить во время выполнения, купил ли пользователь приложение или нет, чтобы решить, будет ли это демонстрационная функциональность или полная функциональность.
Согласно документации API идентификации Chrome:
Чтобы сохранить постоянный идентификатор приложения, вам необходимо скопировать ключ из установленного manifest.json в исходный манифест.
У меня есть 2 вопроса об этой процедуре:
1) при каких условиях идентификатор моего приложения может измениться? Я попытался переустановить приложение и сделал обновления, но идентификатор приложения остается тем же. Если нет способа изменить идентификатор приложения, то зачем мне эта процедура?
2) как я могу загрузить свой zip-архив с manifest.json (который содержит поле "ключ") на панель инструментов chrome? Проблема в том, что загрузчик выдает ошибку:
Произошла ошибка: не удалось обработать ваш товар.
Ключевое поле не допускается в манифесте.
4 ответа
После загрузки в Интернет-магазин Chrome идентификатор вашего расширения является фиксированным и больше не может быть изменен.
Идентификатор получен из .pem
файл, который был создан в первый раз, когда вы (или Интернет-магазин Chrome) упаковали расширение в .crx
файл. Когда вы загружаете расширение в "распакованном режиме", идентификатор автоматически генерируется непредсказуемым образом. Единственный способ контролировать идентификатор расширения во время разработки - это установить "key"
поле в файле манифеста, как предполагает документация.
Если вы уже опубликовали расширение в Chrome Web Store, вы можете легко получить значение этого "key"
поле с помощью Chrome Extension Source Viewer. После установки расширения перейдите на страницу сведений о веб-магазине Chrome и нажмите кнопку CRX, чтобы просмотреть исходный код. Когда средство просмотра Chrome Extension Source загрузит расширение, оно отобразит ключ в консоли, который можно напрямую вставить в файл manifest.json:
Если вы не опубликовали свое расширение или не хотите использовать Интернет-магазин Chrome, то сначала вам нужно сгенерировать закрытый ключ.
- Идти к
chrome://extensions/
и включите режим разработчика. - Нажмите "Pack extension...", выберите каталог вашего приложения / расширения и подтвердите.
Теперь у вас есть файл.crx и файл.pem. Резервное копирование закрытого ключа (.pem
файл)! - Упомянутое расширение может быть использовано для получения той же информации. Кроме того, посетите онлайн-демонстрацию по адресу https://robwu.nl/crxviewer/ и выберите только что созданный файл crx (опять же: просто откройте консоль, чтобы увидеть "ключ" и идентификатор расширения).
Когда вы будете готовы отправить свое приложение / расширение в Интернет-магазин Chrome, выполните следующие действия:
- Создайте zip-файл, содержащий ваше расширение (важно:
manifest.json
должен быть в корне, то есть "directory / manifest.json" - это плохо, "manifest.json" - хорошо).- Добавьте файл.pem как
key.pem
!
(это необходимо для сохранения идентификатора расширения)
- Добавьте файл.pem как
- Загрузите расширение в Интернет-магазин Chrome (без поля "ключ" в manifest.json CWS отклонит любую загрузку, содержащую поле "ключ").
Для последующих обновлений "key.pem" не следует добавлять в zip-файл, поскольку в Chrome Web Store он больше не нужен.
Надеюсь, кто-нибудь может дать лучший ответ, чем я. Идентификатор приложения генерируется Google при первой загрузке его в интернет-магазин. Однако это не тот же идентификатор, который вы используете при локальной разработке. Ваш браузер Chrome сгенерировал какой-то другой идентификатор, используя другой механизм.
Когда вы разрабатываете локально из своего каталога исходного кода как распакованное расширение и хотите использовать идентификатор, назначенный вашему приложению в chrome web store, вы помещаете "ключ" в свой манифест и перезагружаете свое приложение. Это помогает вам, потому что многие API ожидают, что chrome.runtime.id (идентификатор вашего приложения) будет иметь то же значение, что и приложение в магазине. Вы можете оставить "ключ" в своем манифесте, и он будет проигнорирован.
Если у вас возникли проблемы с загрузкой распакованного расширения с помощью ключевого поля в manifest.json
файл.
Удалите опубликованное расширение, если оно есть в списке расширений, но отключено. Так как в противном случае ваше локальное расширение dev не будет загружаться и ошибки не будут отображаться. Причина в том, что Chrome обнаруживает дубликаты ключей для расширения и игнорирует его молча.
Когда тебе нужен ключ
Вам нужно только указать в manifest.json, чтобы локальные установки распознавались как то же расширение в магазине.
Обычно в этом нет необходимости, поскольку Chrome с радостью будет запускать версию из Магазина и локальную версию бок о бок, но это проблема, когда вы пытаетесь использовать API, зависящие от ключа, например
chrome.identity
а также
web_accessible_resources
нужен постоянный ключ.
Как получить ключ
- Загрузите расширение без
key
поле - Получите ключ по URL расширения в магазине
Вот и все. Другие ответы излишне усложняют задачу для большинства пользователей. Вам никогда не нужно создавать ключи вручную или иметь дело с какими-либо
.pem
файлы.