開發者可能不想透過 Firefox Marketplace 發佈 App,例如你只想提供給組織內的成員、執行測試版 App,或只是自己試好玩的。本篇文章將說明開發者如何在 Firefox Marketplace 之外自行發佈 App。
Open Web App 可透過 Apps.install
或 Apps.installPackage
,安裝到 Firefox OS、執行 Firefox for Android 的裝置,或是執行桌面版 Firefox 的桌機之上。而這些 API 均會送出 manifest 檔案的網址,其內將敘述所將安裝的 App。因此要自行發佈 App 就必須滿足下列基本要求:
- 伺服器必須裝載 App 的 manifest 檔案
- 伺服器必須裝載 (架設/托管式) App,或 (封裝式) App 的 ZIP 檔案
- 置於網站上的程式碼必須觸發合適的
Apps.install
或Apps.installPackage
限制
在自己發佈 Open Web App 之前,必須注意下列限制:
- 自行發佈的 App 不能使用 Privileged API。若要使用這類 API,則必須為封裝式 (Packaged) App 並具備自己的 ZIP 檔案,另需經由 Firefox Marketplace 提交程序而完成簽署。
- 你的 App 不能使用 Firefox Marketplace 的 App 內購買功能。
- 由於 App 無法在 Firefox Marketplace 上曝光,所以開發者必須自行研究 App 的發佈技術。
自行發佈封裝式 App
只要在伺服器上架設/托管 ZIP 檔案與其 mini-manifest,就能自行發佈封裝式 App。而 mini-manifest 必須置於 ZIP 相同的目錄之下,以利安裝程序能識別 App。接著可建立指令碼以觸發 Apps.installPackage
,送出 mini-manifest 的細節。可參閱下方以了解:
-
將 App 的內容壓縮為 ZIP 並命名為
package.zip
。 此檔案應容納 App 的所有資源檔案,並包含 (主要) manifest 檔案。重要:請注意封裝式 App 所要壓縮的內容,不要包含檔案本身的目錄。如果你連母目錄都壓縮進去,則 manifest 檔案就位於錯誤地方,整個封裝式 App 隨即無效。
- 建立名為
manifest.webapp
的檔案,並加入以下內容。此檔案即所謂的 mini-manifest,也是封裝式 App 壓縮檔內的精簡版 manifest 檔案。而Apps.installPackage
將使用 mini-manifest,以進行 App 的安裝程序。若要進一步了解細節,可參閱下方的 Mini-manifest 欄位。
{ "name": "My sample app", "package_path" : "https://my-server.com/my-app-directory/package.zip", "version": "1", "developer": { "name": "A. Developer", "url": "https://my-server.com" } }
- 建立可安裝 App 的指令碼。這裡我們使用了名為「
index.html
」的簡易 HTML 檔案。但你也可將指令碼新增至按鈕,或使用任何適當的函式,以於自己的網站上觸發作業。此頁面上的 JavaScript 將呼叫 Packaged App installer API (Apps.installPackage
),並針對安裝作業的成功與否進行回呼 (Callback)。<html> <body> <p>Packaged app installation page</p> <script> // This URL must be a full url. var manifestUrl = 'https://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>
- 將「
package.zip
」、「package.manifest
」、「index.html」
複製到你指定的目錄中 (此範例則為my-app-directory
),即可在自己的伺服器或網站上設定檔案。 - 以相容設備 (如 Firefox OS 手機) 安裝 App。只要開啟
index.html
檔案 (此範例的路徑為https://my-server.com/my-app-directory/index.html
) 就會看到系統詢問是否要安裝該 App。繼續執行安裝步驟直到完畢,接著網頁指令就會顯示安裝作業是否成功。
秘訣:你可於本端架設/托管 1 個封裝式 App,並於裝置中進行測試。伺服器與裝置必須位於同一個網路之上,而伺服器必須能接收本端網路的請求。你只要在 mini-manifest 檔案的 package_path
中加入絕對路徑即可。只要用相同的方式,正常情況就已經納入絕對路徑 (可參閱下方)。如果要使用非標準通訊埠,例如 https://10.10.12.1:8080/package.zip
,則記得應納入通訊埠的資訊。
Mini-manifest 檔案的欄位
如果要在 Firefox Marketplace 發佈 App,就不需擔心該如何建立 mini-manifest 檔案;Firefox Marketplace 可為開發者代勞。Marketplace 將使用 manifest 檔案中的相關資訊。可參閱《App 的 manifest 檔案》一文。
如果要自行發佈 App,也就必須自行建立 mini-manifest 檔案。最好就是複製「主要」的 manifest 檔案,並依需求將之更新。先複製完整內容就能輕鬆建立 mini-manifest 檔案,因其內的 name
、version
、developer
、locales
欄位必須完全相同。開發者亦可添增其他內容。mini-manifest 檔案專屬的欄位則包含 package_path
、release_notes
、size
。
-
package_path
(必填) -
儲存 App 壓縮檔的絕對路徑 (需為完整的網址,如
https://my-server.com/my-app-directory/manifest.webapp
) -
release_notes
(選填) - App 版本資訊。在 Firefox Marketplace 的提交過程中,就必須提供此項資訊。
-
size
(選填) -
以 byte 計算的 App 壓縮檔容量。而
Apps.installPackage
將使用此項資訊,才能在安裝過程中顯示安裝進度。
以下提供範例:
{
"name": "My app",
"package_path": "https://thisdomaindoesnotexist.org/myapp.zip",
"version": "1.0",
"size": 172496,
"release_notes": "First release",
"developer": {
"name": "Developer Name",
"url": "https://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"
}
}
此範例中的其他欄位包含:
-
name
(必填) - App 的名稱,最長 128 個字元。
-
version
(選填) - App 的目前版本。
-
developer
(選填) -
開發者的資訊,內含
name
與url
欄位。而 mini-manifest 與 manifest 檔案中的開發者資訊必須相同。 -
locales
(選填) -
語系資訊,必須為
xx-YY
格式。 -
icons
(選填) - App 所使用的圖示。
若要進一步了解 manifest 檔案,可參閱《App 的 manifest 檔案》。
自行發佈架設/托管式 App
與封裝式 App 相較,如果你建立內容的方式,就與 Firefox Marketplace 發佈的方式相同,則自行發佈架設/托管式 (Hosted) App 就更簡單了。基本上就是為自己的 App 建立 manifest 檔案。接著加入程式碼以觸發 Apps.install
。此程式碼必須與上述封裝式 App 所用的相同。唯一不同點在於,你可對 manifest 檔案設立相對的參考位置。
另請參閱