如何更改 chrome 打包的应用程序 ID 或者为什么我们需要manifest.json中的密钥字段?

How to change chrome packaged app id Or Why do we need key field in the manifest.json?

提问人:31415926 提问时间:2/1/2014 更新时间:4/8/2022 访问量:55050

问:

我正在使用一次性 chrome 钱包付款为 chrome 商店开发打包应用程序。对于我的应用程序,我需要在运行时检查用户是否购买了该应用程序,以决定它是演示功能还是完整功能。

根据 chrome 标识 API 文档

要保持应用程序 ID 不变,您需要将密钥复制到 安装manifest.json到源清单。

关于此过程,我有 2 个问题:

1) 在什么情况下,我的申请ID可能会发生变化?我尝试重新安装应用程序并进行了更新,但应用程序 ID 保持不变。如果没有办法更改应用程序ID,那么为什么我需要此过程?

2) 如何将带有manifest.json(包含“key”字段)的 zip 存档上传到 chrome 仪表板?问题是上传者向我抛出一个错误:

发生错误:无法处理您的项目。

清单中不允许使用 key 字段。

谷歌浏览器 扩展程序 google-chrome-devtools chromium 谷歌浏览器应用程序

评论

0赞 nsolent 4/5/2022
“在什么情况下,我的申请ID可能会发生变化?”当密钥不存在时生成的 id 似乎仅在解压缩扩展的路径更改时才会更改,并且每个系统也不同(路径中的 prob 用户名)。我希望这对于团队设置中的扩展开发来说是一个更痛苦的问题(需要维护许多身份验证域)。我不喜欢使用密钥,因此开发扩展显示在列表顶部,我也可以通过启用/禁用而不是卸载/安装来切换开发与生产扩展。

答:

11赞 kzahel 2/1/2014 #1

希望有人能给出比我更好的答案。当您首次将应用上传到网上商店时,Google 会生成应用的 ID。但是,它与本地开发时拥有的 ID 不同。您的 chrome 浏览器使用其他机制生成了一些其他 ID。

当您从源代码目录作为解压缩扩展进行本地开发时,如果想要使用 chrome 网上应用店分配给您的应用的 ID,请将“密钥”放在清单中并重新加载您的应用。这对你很有帮助,因为许多 API 都希望 chrome.runtime.id(应用的 ID)与应用商店中的应用具有相同的值。您可以将“密钥”保留在清单中,它将被忽略。

评论

0赞 31415926 2/2/2014
本地开发是什么意思?是不是通过仪表板而是通过 Chrome 中的菜单/工具/扩展选项上传应用程序?我是否理解您正确,当您通过菜单/工具/扩展测试您的应用程序时,需要密钥字段才能在商店中复制实际的应用程序 ID?
164赞 Rob W 2/2/2014 #2

上传到 Chrome 网上应用店后,您的扩展程序 ID 是固定的,无法再更改。

该 ID 源自您(或 Chrome 网上应用店)首次将扩展程序打包到文件中时创建的文件。当您在“解压缩模式”下加载扩展时,会以不可预知的方式自动生成 ID。在开发过程中控制扩展 ID 的唯一方法是在清单文件中设置“key”字段,如文档所示.pem.crx

如果您已经在 Chrome 网上应用店中发布了扩展程序,那么您可以使用 Chrome 扩展程序源查看器轻松获取此字段的值。安装扩展程序后,转到您的Chrome网上商店详细信息页面,然后单击CRX按钮查看源代码。当 Chrome 扩展程序源查看器加载扩展程序后,它将在控制台中显示密钥,该密钥可以直接复制粘贴到您的manifest.json:"key"

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

如果您尚未发布扩展程序,或者不想使用 Chrome 网上应用店,则需要先生成私钥。

  1. 转到并启用开发人员模式。chrome://extensions/
  2. 单击“打包扩展...”,选择您的应用程序/扩展程序的目录并确认。
    现在,您已经获得了一个 .crx 文件和一个 .pem 文件。备份私钥(文件)!
    .pem
  3. 提到的扩展名可用于获取相同的信息。或者,访问 https://robwu.nl/crxviewer/ 的在线演示,然后选择您刚刚创建的crx文件(同样:只需打开控制台即可查看“密钥”和扩展ID)。

当您准备好将应用/扩展程序提交到 Chrome 网上应用店时,请按以下步骤操作:

  1. 创建一个包含扩展名的 zip 文件(重要提示:必须在根目录下,即“directory/manifest.json”不好,“manifest.json”是好的)。manifest.json
    • 将 .pem 文件添加为 key.pem
      (这是保留扩展 ID 所必需的)
  2. 将扩展程序上传到 Chrome 网上应用店(manifest.json中没有“key”字段,CWS 将拒绝任何包含“key”字段的上传)。

对于后续更新,不应将“key.pem”添加到 zip 文件中,因为 Chrome 网上应用店不再需要它。

评论

1赞 Rob W 2/2/2014
@Qvatra Chrome 创建的文件包含您的私钥。其对应的公钥用作计算扩展 ID 的输入。CRX文件的内容使用私钥进行签名,并将签名插入CRX文件头中。签名的目的是为了确保完整性,Chrome 将拒绝安装签名无效的 CRX 文件。由于没有私钥(几乎)不可能伪造签名,因此您不应该丢失它。.pem
2赞 Sam Stern 4/30/2014
我无法找到要在开发过程中设置的“键”值。Chrome 应用程序似乎没有存储在 /Extensions/...文件夹,就像普通扩展名一样。有谁知道在哪里可以找到它?
0赞 Rob W 4/30/2014
如果在解压缩模式下加载,则文件将位于扩展源。在其他情况下,可以在 Default/Extensions 中找到它。如果仍然找不到该文件,请搜索manifest.json
3赞 claudekennilol 9/3/2019
那么,开发已发布扩展的最佳方法是什么?只是在开发时添加字段并在发布任何更新之前将其删除?key
1赞 floer32 3/30/2021
更新了文档链接:manifest v2 developer.chrome.com/docs/extensions/mv2/manifest/key 和 manifest v3 developer.chrome.com/docs/extensions/mv3/manifest/key
1赞 holmberd 10/20/2018 #3

对于在文件中使用键字段加载解压缩扩展名时遇到问题的任何人。manifest.json

如果已发布的扩展在扩展列表中但已禁用,请将其删除。否则,您的本地开发扩展将不会加载,并且不会显示任何错误。原因是 chrome 检测到扩展程序的重复键并静默忽略它。