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

Posted

技术标签:

【中文标题】如何更改 chrome 打包的应用程序 ID 或者为啥我们需要 manifest.json 中的 key 字段?【英文标题】:How to change chrome packaged app id Or Why do we need key field in the manifest.json?如何更改 chrome 打包的应用程序 ID 或者为什么我们需要 manifest.json 中的 key 字段? 【发布时间】:2014-02-25 04:38:11 【问题描述】:

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

根据镀铬identity API documentation:

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

我对这个程序有 2 个问题:

1) 在什么情况下我的应用程序的 id 可能会改变?我已尝试重新安装应用程序并进行了更新,但应用程序 ID 保持不变。如果无法更改应用程序 ID,我为什么需要此过程?

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

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

清单中不允许有键字段。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

本地开发是什么意思?当您不是通过仪表板而是通过 chrome 中的菜单/工具/扩展选项上传应用程序时,是不是这样?我是否理解您在通过菜单/工具/扩展测试您的应用程序时需要关键字段才能在商店中重现实际应用程序 ID?【参考方案2】:

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

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

当您已经在 Chrome 网上应用店中发布扩展程序时,您可以使用 Chrome Extension Source Viewer 轻松获取此 "key" 字段的值。安装扩展程序后,转到您的 Chrome 网上商店详细信息页面,然后单击 CRX 按钮以查看源代码。 Chrome Extension Source viewer 加载完扩展后,会在控制台显示key,可以直接复制粘贴到你的manifest.json中:

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

    转到chrome://extensions/ 并启用开发者模式。 点击“Pack extension...”,选择您的应用/扩展的目录并确认。 现在你有了一个 .crx 文件和一个 .pem 文件。备份私钥(.pem 文件)! 提到的扩展可以用来获取相同的信息。或者,访问https://robwu.nl/crxviewer/ 的在线演示并选择您刚刚创建的 crx 文件(同样:只需打开控制台即可查看“密钥”和扩展 ID)。

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

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

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

【讨论】:

很棒的应用程序,CRX 查看器!很好的答案! @Qvatra Chrome 创建的.pem 文件包含您的私钥。其对应的公钥用作计算扩展 ID 的输入。 CRX 文件的内容使用私钥进行签名,并且签名插入到 CRX 文件头中。签名的目的是为了保证完整性,Chrome会拒绝安装签名无效的CRX文件。由于(几乎)不可能在没有私钥的情况下伪造签名,因此您不应该丢失它。 我在开发过程中找不到要设置的“关键”值。似乎 Chrome 应用程序不像普通扩展程序那样存储在 /Extensions/... 文件夹中。有谁知道在哪里可以找到它? 那么开发已发布扩展的最佳方式是什么?只需在开发时添加 key 字段并在发布任何更新之前将其删除? 更新文档链接:manifest v2 developer.chrome.com/docs/extensions/mv2/manifest/key 和 manifest v3 developer.chrome.com/docs/extensions/mv3/manifest/key【参考方案3】:

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

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

【讨论】:

以上是关于如何更改 chrome 打包的应用程序 ID 或者为啥我们需要 manifest.json 中的 key 字段?的主要内容,如果未能解决你的问题,请参考以下文章

前端打包成桌面应用以及chrome扩展

chrome打包程序

打包google浏览器插件到本地

如何修改谷歌Chrome应用商店的插件,绕过Chrome检查

Chrome 打包应用程序上的输入类型颜色

如何使用命令行在Macos上打包Chrome扩展程序?