1

我目前正在尝试使用此 API/端点https://addons.mozilla.org/api/v3/addons在我的构建管道中自动更新我的 Web 扩展。

所以我使用的实际命令如下所示:

curl "https://addons.mozilla.org/api/v3/addons/" -g -XPOST --form "upload=@dist/firefox/psono.firefox.PW.zip" -F "version=1.0.17" -H "Authorization: JWT ABCDEFG..."

(此处的文档http://addons-server.readthedocs.io/en/latest/topics/api/signing.html#uploading-without-an-id

我现在是我总是得到的地方(经过大量的身份验证尝试和错误):

{"error":"Duplicate add-on ID found."} 

我的清单中有这个:

"manifest_version": 2,
"name": "psono.PW",
"description": "Psono Password Manager",
"version": "1.0.17",

... alot of other stuff ...

"applications": {
    "gecko": {
        "id": "{3dce78ca-2a07-4017-9111-998d4f826625}"
    }
}

如果我删除了这个“应用程序”属性,那么它会通过,但它会创建一个新的扩展而不是更新现有的扩展。我已经区分了现有扩展和新扩展的清单,除了 JSON 的一些格式和版本属性的明显差异之外,它们看起来相同。

我错过了什么,AMO API 实际上无法将我的更新与我现有的扩展匹配?

4

1 回答 1

3

虽然我没有对其进行测试,但您显然将请求发送到用于没有 ID 的 WebExtensions的 URL,而不是用于上传带有 ID 的新版本附加组件的 URL。AMO 使用附加组件 ID 将附加组件与当前存在的 ID 匹配。WebExtension 唯一没有 ID 的情况是您第一次将新扩展上传到 AMO(并且您在开发期间选择不自己分配 ID)。

首次将插件上传到 AMO 并列出 WebExtension 后,它有一个 ID。因此,我假设文档不是 100% 清楚地表明没有 ID的上传用于上传的WebExtension 附加组件。唯一让我认为您正在使用的 URL可能用于带有 ID 的 WebExtensions 是声称可能出现的错误消息,但该错误列表可能只是另一个部分的复制和粘贴。

上传新的 WebExtensions 插件(无 ID):

curl "https://addons.mozilla.org/api/v3/addons/"
    -g -XPOST -F "upload=@build/my-addon.xpi" -F "version=1.0"
    -H "Authorization: JWT <jwt-token>"

上传新版本的附加组件(带有 ID):

curl "https://addons.mozilla.org/api/v3/addons/@my-addon/versions/1.0/"
    -g -XPUT --form "upload=@build/my-addon.xpi"
    -H "Authorization: JWT <jwt-token>"

例如,在您的情况下:

curl "https://addons.mozilla.org/api/v3/addons/{3dce78ca-2a07-4017-9111-998d4f826625}/versions/1.0.17/"
    -g -XPUT --form "upload=@dist/firefox/psono.firefox.PW.zip"
    -H "Authorization: JWT ABCDEFG..."

我认为这是上传过程文档中的一个问题,其中应该澄清 WebExtensions-no-ID URL 的实际使用描述。

请对此进行测试,以验证您是否可以使用上传版本的普通 URL 上传新版本(包括manifest.jsonapplications中的)。如果您确认可行,我将向文档提交拉取请求以使其更加清晰。

注意:MDN 上的文档在谈到更新插件时指出:

对于此工作流程,您必须使用 AMO 上的页面手动更新插件,否则 AMO 将无法理解提交是对现有插件的更新,并将更新视为全新的插件.

但是,应该注意的是,即使该部分也在讨论更新没有在applications密钥中指定 ID 的附加组件。因此,即使该文档也不是 100% 清楚的。

其他可能性

如果您使用的 URL 实际上既适用于没有 ID 的新 WebExtensions,也适用于具有 ID的现有 WebExtensions 的新版本

  1. 您已经上传了 1.0.17 版本的插件。如果是这样,则有一个错误会返回"Duplicate add-on ID found."错误,而不是让错误文本说明此 ID 存在重复版本。如果是这种情况,那么我认为在文档中还需要澄清 URL 适用于带有和不带有 ID 的 WebExtensions:说明它没有 ID 仅与使用的 URL 和传递给API。
  2. 您尚未上传插件的 1.0.17 版本。如果是这样,则存在不允许上传现有附加 ID 的新版本的错误。对此的一个简单解决方案是仅声明这是预期的操作并更改文档以明确应使用“带 ID”URL/PUT 而不是新的附加组件、“无 ID”URL /邮政。
于 2017-06-10T18:14:21.130 回答