可能会出现这样一种情况,你不想让你的应用可以在火狐市场上得到,比如,你可能想要把应用分发给你组织中的成员,进行beta版本测试或者只是单纯的做你自己的事。这种情况下你可以直接使用应用源文件在Firefox OS设备上安装和使用应用,而不是发布到火狐市场。

安装到 Firefox OS 上的 Open Web Apps, 使用 Apps.install or Apps.installPackage 运行在设备上或桌面版中。 这两种情况下, 这些 API 都是通过发送描述要安装的 app 的 manifest URL 来安装的。因此自行发布应用的基本要求如下:

  1. 服务器中包含 app 的manifest
  2. 服务器中包含 app (对 host app 而言) 或 app 的打包 zip 文件
  3. 在网站上的代码会合适的调用 Apps.install or Apps.installPackage

局限性

在利用自主发布 web 应用之前,你应该了解以下局限性:

  • 自主发布应用不可以使用特殊和认证权限API。要使用这些API需要签名使用火狐市场的提交流程。
  • 你的应用不可以使用火狐市场的应用内购买功能。
  • 你需要实现你自己的搜索技术,因为你借助火狐市场列表中完成。

自主发布打包型应用(packed apps)

你可以通过在一个服务器上托管应用的 ZIP 文件及 min-manifest 的方式自己发布一个 package App。mini-manifest 文件必须和 ZIP 在同一目录下,用于识别 app 的安装过程。你可以创建一个脚本来调用 Apps.installPackage从而传递 mini-manifest 的具体信息。我们来看一下这个过程:

步骤

  1. 压缩你的应用内容并命名为package.zip。这个文件应该包含所有的应用资源,包括应用清单。

    注意:你必须要小心你希望出现在打包应用中的压缩内容,不是包含这些内容的目录。如果你压缩的是父目录,应用清单文件将会无法找到,导致打包型应用不可用。

  2. 创建一个名称为  manifest.webapp 的文件,添加内容如下。这个文件也称为 mini-manifest, 因为它是 manifest 文件的裁剪版本,放置在 Packaged App ZIP 文件中。 它会被Apps.installPackage所调用以承接  app 的安装任务。要获得更多的细节,请查看下面的  Mini-manifest 字段
    {
        "name": "My sample app",
        "package_path" : "http://my-server.com/my-app-directory/package.zip",
        "version": "1",
        "developer": {
            "name": "A. Developer",
            "url": "http://my-server.com"
        }
    }
  3. 创建安装 app 的脚本文件。此处我们使用了简单的 HTML 文件 index.html,但是你可以将脚本添加到按钮或使用其他合适的方法来在你的站点上调用。 这个页面的JavaScript 会调用 the Packaged App installer API (Apps.installPackage) 而且还包括了一些回调函数,用于提供安装是否成功的提示信息。
    <html>
      <body>
        <p>Packaged app installation page</p>
        <script>
          // This URL must be a full url.
          var manifestUrl = 'http://my-server.com/my-app-directory/manifest.webapp';
          var req = navigator.mozApps.installPackage(manifestUrl);
          req.onsuccess = function() {
            alert(this.result.origin);
          };
          req.onerror = function() {
            alert(this.error.name);
          };
        </script>
      </body>
    </html>
  4. 通过拷贝 package.zip, package.manifest, 和index.html 到你选定目录( 本例中是 my-app-directory )在你的服务器或站点上配置文件。
  5. 现在你就可以使用一个兼容的设备(如 Firefox OS 手机)来安装 app 了。打开 index.html 文件后 (本例中的路径是 http://my-server.com/my-app-directory/index.html)  你就会得到一个弹出框,询问你是否想要安装应用。继续安装过程,一旦完成,你的 Web 页面就会提供一个安装成功或失败的提示信息。

提示: 你可以将 Package App 托管在本地,并在设备上测试。Web Server 和设备必须网络相同,服务器必须能够处理本地网络的请求。你只需要在 mini-manifest 的 package_path 中包含绝对路径(如下所示)。如果你使用了非标准端口,记得要包含端口信息,例如 http://10.10.12.1:8080/package.zip.

Mini-manifest 字段

当火狐市场为你的应用生成一个迷你清单,它会从你的应用清单中取出信息填充一些字段。你可以在应用清单中找到这些字段的说明。而迷你清单中独有的字段有package_path, release_notes和 size而迷你清单中的name, version, developerlocales字段必须和应用清单相同。

这里有一些关于在本地调试时,迷你清单相关的信息:

name
(必须) 应用名称,最大长度128个字符。
package_path
(必须) 可以找到应用zip文件的URL。确保package_path是zip文件所在的绝对路径
version
应用的版本号。
size
应用zip文件的字节数。这对于本地测试不是必须,但是会在安装过程中提供一个进度条。
{
  "name": "My app",
  "package_path": "http://thisdomaindoesnotexist.org/myapp.zip",
  "version": "1.0",
  "size": 172496,
  "release_notes": "First release",
  "developer": {
    "name": "Developer Name",
    "url": "http://thisdomaindoesnotexist.org/"
  },
  "locales": {
    "fr-FR": {
      "name": "Mon application"
    },
    "se-SE": {
      "name": "Min balla app"
    }
  },
  "icons": {
    "16": "/icons/16.png",
    "32": "/icons/32.png",
    "256": "/icons/256.png"
  }
}
 
release_notes
应用发行的相关信息。在火狐市场中,这些信息会出现在提交过程中的一个页面中。
developer
开发者相关信息,包括nameurl字段。开发者信息需要迷你清单和zip中的主要清单一致。
locales
本地化信息。值应该是xx-YY格式。
icons
应用图标。

注意:在迷你清单和应用清单中的许多值需要一致,否则会导致安装失败。最安全的方式是把应用清单中的内容拷贝到迷你清单中然后加上package_path

自行发布托管应用 Hosted Apps

与 Packaged Apps 相比, 自行发布 Hosted App 是更直接的方式。is more straightforward, if you create its content in the same way as you would for Firefox Marketplace publication. This basically means creating the manifest file for your app. You then need to add the code to invoke Apps.install. This code is essentially the same as that you would use for a Packaged App, shown above, the only difference being that you can make relative reference to the location of the manifest file if you wish.

参考

文档标签和贡献者

 此页面的贡献者: ReyCG_sub, baiyangcao, ziyunfei
 最后编辑者: ReyCG_sub,