Как изменить хром-пакетный идентификатор приложения Или Почему нам нужно ключевое поле в манифесте. Json?

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

В соответствии с хром документацией по API удостоверения:

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

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

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

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

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

Клавиша

не разрешена в манифесте.

Ответ 1

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

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

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

Screenshot: Public key (paste into manifest.json to preserve extension ID) crxviewer.js:528 "key": "....", crxviewer.js:529 Calculated extension ID: jifpbeccnghkjeaalbbjmodiffmgedin

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

  • Перейдите в chrome://extensions/ и включите режим разработчика.
  • Нажмите "Расширение пакета...", выберите каталог своего приложения/расширения и подтвердите.
    Теперь у вас есть .crx файл и файл .pem. Создайте резервную копию закрытого ключа (.pem file)!
  • Указанное расширение можно использовать для получения той же информации. Кроме того, посетите онлайн-демонстрацию https://robwu.nl/crxviewer/ и выберите файл crx, который вы только что создали (еще раз: просто откройте консоль, чтобы увидеть "ключ" и идентификатор расширения).

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

  • Создайте zip файл, содержащий расширение (важно: manifest.json должно быть у корня, т.е. "directory/manifest.json" плохо, "manifest.json" - это хорошо).
    • Добавить файл .pem как key.pem!
      (это необходимо для сохранения идентификатора расширения)
  • Загрузите расширение в Интернет-магазин Chrome (без поля "key" в файле manifest.json), CWS отклонит любую загрузку, содержащую поле "ключ" ).

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

Ответ 2

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

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