Как изменить идентификатор упакованного приложения Chrome или зачем нам ключевое поле в manifest.json?

Я разрабатываю пакетное приложение для магазина Chrome, используя единовременные платежи через кошелек Chrome. Для моего приложения мне нужно проверять во время выполнения, купил ли пользователь приложение или нет, чтобы решить, будет ли это демонстрационная функциональность или полная функциональность.

Согласно документации API идентификации Chrome:

чтобы сохранить идентификатор приложения постоянным, вам необходимо скопировать ключ из установленного manifest.json в исходный манифест.

У меня есть 2 вопроса об этой процедуре:

1) при каких условиях может измениться id моего приложения? Я пытался переустановить приложение и сделал обновления, но идентификатор приложений остался прежним. Если нет возможности изменить идентификатор приложения, зачем мне эта процедура?

2) как я могу загрузить свой zip-архив с manifest.json (который содержит поле «ключ») на панель инструментов Chrome? Проблема в том, что загрузчик выдает мне ошибку:

Произошла ошибка: не удалось обработать ваш элемент.

ключевое поле не допускается в манифесте.




Ответы (3)


После загрузки в Интернет-магазин Chrome ваш идентификатор расширения фиксируется и больше не может быть изменен.

Идентификатор получен из файла .pem, который был создан, когда вы (или Интернет-магазин Chrome) впервые упаковали расширение в файл .crx. Когда вы загружаете расширение в «распакованном режиме», ID автоматически генерируется непредсказуемым образом. Единственный способ контролировать идентификатор расширения во время разработки - установить _3 _ в файле манифеста, как указано в документации.

Если вы уже опубликовали расширение в Интернет-магазине Chrome, вы можете легко получить значение этого поля "key" с помощью Средство просмотра исходного кода расширений Chrome. После установки расширения перейдите на страницу сведений о своем интернет-магазине Chrome и нажмите кнопку CRX, чтобы просмотреть источник. Когда средство просмотра исходного кода расширения Chrome загрузило расширение, оно отобразит ключ в консоли, который можно напрямую скопировать в ваш manifest.json:

Снимок экрана: открытый ключ (вставьте в manifest.json, чтобы сохранить идентификатор расширения) crxviewer.js: 528 ключ: ....  , crxviewer.js: 529 Расчетный идентификатор расширения: jifpbeccnghkjeaalbbjmodiffmgedin

Если вы не опубликовали свое расширение или не хотите использовать Интернет-магазин Chrome, вам необходимо сначала сгенерировать закрытый ключ.

  1. Перейдите в chrome://extensions/ и включите режим разработчика.
  2. Нажмите «Упаковать расширение ...», выберите каталог вашего приложения / расширения и подтвердите.
    Теперь у вас есть файл .crx и файл .pem. Сделайте резервную копию закрытого ключа (.pem файл)!
  3. Упомянутое расширение можно использовать для получения той же информации. Или посетите интерактивную демонстрацию по адресу https://robwu.nl/crxviewer/ и выберите crx-файл, который вы ' ve только что создан (опять же: просто откройте консоль, чтобы увидеть «ключ» и идентификатор расширения).

Когда вы будете готовы отправить свое приложение / расширение в Интернет-магазин Chrome, выполните следующие действия:

  1. Create a zip file containing your extension (important: manifest.json must be at the root, i.e. "directory/manifest.json" is bad, "manifest.json" is good).
    • Add the .pem file as key.pem!
      (this is necessary to preserve the extension ID)
  2. Загрузите расширение в Интернет-магазин Chrome (без поля «ключ» в manifest.json CWS отклонит любую загрузку, содержащую поле «ключ»).

Для последующих обновлений «key.pem» не следует добавлять в zip-файл, потому что Интернет-магазин Chrome больше не нуждается в нем.

person Rob W    schedule 01.02.2014
comment
Замечательное приложение, просмотрщик CRX! И отличный ответ! - person kzahel; 01.02.2014
comment
@Qvatra Файл .pem, созданный Chrome, содержит ваш закрытый ключ. Соответствующий ему открытый ключ используется в качестве входных данных для вычисления идентификатора расширения. Содержимое файла CRX подписывается закрытым ключом, а подпись вставляется в заголовок файла CRX. Цель подписи - обеспечить целостность, Chrome откажется устанавливать файлы CRX, подпись которых недействительна. Поскольку (почти) невозможно подделать подпись без закрытого ключа, вы не должны его терять. - person Rob W; 02.02.2014
comment
Мне сложно найти ключевое значение, которое нужно установить во время разработки. Кажется, что приложения Chrome не хранятся в папке / Extensions / ..., как обычное расширение. Кто-нибудь знает где его найти? - person Sam Stern; 30.04.2014
comment
Если загружен в распакованном режиме, то файл будет в источнике расширения. В других случаях его можно найти в Default / Extensions. Если вы по-прежнему не можете найти файл, выполните поиск по manifest.json. - person Rob W; 30.04.2014
comment
ХОРОШИЙ ОТВЕТ. Я перехожу к этому вопросу / ответу по этой ссылке (github.com/dropbox/dropbox-js/issues/200), который также полезен. - person Premchandra Singh; 01.04.2016
comment
Поскольку CRX Viewer может вычислять key и ID исключительно по содержимому файла .crx, это означает, что есть вероятность, что два независимых разработчика получат один и тот же идентификатор, если они изначально были сгенерированы из какого-то минималистичного расширения (как это сделал я). - person GetFree; 27.07.2016
comment
@RobW что произойдет, если вы загрузите обновление расширения в Интернет-магазин с добавлением поля "key" в файл манифеста? он работал для поддержания того же идентификатора во время разработки, я не удалял его из манифеста и не загружал новую версию, и я думаю, что данные локального хранилища были сброшены. У вас есть какая-нибудь информация об этом? - person IvanRF; 27.06.2017
comment
@IvanRF Я никогда не пробовал загружать расширение с ключевым полем. Я думаю, что он безоговорочно перезаписывается CWS на основе предоставленного key.pem (автоматически создается при необходимости). - person Rob W; 28.06.2017
comment
По какой-то причине локальное расширение не рассчитало за меня ключ. Но эта ссылка сделала robwu.nl/crxviewer (такое же расширение в Интернете) - person Moti Korets; 12.07.2019
comment
Итак, как лучше всего разработать опубликованное расширение? Просто добавить поле key при разработке и удалить его перед публикацией обновлений? - person claudekennilol; 03.09.2019
comment
Я не думаю, что CWS отвергнет, если присутствует key. Он отклоняет, если это неправильная форма. developer.chrome.com/extensions/manifest - person Sanyam Jain; 13.12.2019
comment
Обновленная ссылка на документ: manifest v2 developer.chrome.com/docs/extensions/mv2 / manifest / key и manifest v3 developer.chrome.com/ документы / расширения / mv3 / манифест / ключ - person driftcatcher; 29.03.2021

Надеюсь, кто-нибудь сможет дать лучший ответ, чем я. Идентификатор приложения генерируется Google, когда вы впервые загружаете его в интернет-магазин. Однако это не тот идентификатор, который используется при локальной разработке. Ваш браузер Chrome сгенерировал другой идентификатор, используя другой механизм.

Когда вы разрабатываете локально из каталога исходного кода в виде распакованного расширения и хотите использовать идентификатор, который веб-магазин Chrome назначил вашему приложению, вы помещаете «ключ» в свой манифест и перезагружаете приложение. Это помогает вам, потому что многие API ожидают, что chrome.runtime.id (идентификатор вашего приложения) будет иметь то же значение, что и приложение в магазине. Вы можете оставить «ключ» в своем манифесте, и он будет проигнорирован.

person kzahel    schedule 01.02.2014
comment
Что вы имеете в виду под локальным развитием? это когда вы загружаете приложение не через панель инструментов, а через параметр меню / инструментов / расширений в Chrome? Правильно ли я понимаю, что ключевое поле необходимо для воспроизведения фактического идентификатора приложения в магазине, пока вы тестируете свое приложение через меню / инструменты / расширения? - person 31415926; 01.02.2014

Для тех, у кого есть проблемы с загрузкой распакованного расширения с ключевым полем в файле manifest.json.

Удалите опубликованное расширение, если оно есть в списке расширений, но отключено. Поскольку в противном случае ваше локальное расширение для разработчиков не загрузится, и ошибка не будет отображаться. Причина в том, что хром обнаруживает повторяющиеся ключи для расширения и молча игнорирует их.

person holmberd    schedule 19.10.2018