在 Firefox OS 上建立付費 App

作者:
瀏覽:561

第一眼看到 Firefox OSFirefox Marketplace 時,會覺得與 Apple Store或 Google Play Store 有些相似,但其中有個關鍵差異:Firefox Marketplace 不會要求你必須和 Mozilla 或和自己的 Firefox OS手機綁定。透過Receipt協議,應用程式開發人員就能銷售網路 App,並能在任何開放式網路裝置上運作。只要建構出收據格式,任何不屬於 Mozilla Marketplace 的網路商店,亦可在 Firefox OS 上銷售 App,且付費 App 亦將同樣執行順暢,不會讓使用者感到任何差異。

理論上,只要其他裝置也支援此 Receipt 協議,使用者的任一款 App 僅需付費一次,即可在任何裝置上執行該 App。當然,這裡同樣也會有雞生蛋、蛋生雞的問題。Mozilla  希望擔任雞蛋的角色,能確實拓展這個「收據」的概念,並透過協議的方式將之落實。Mozilla 亦積極邀請廠商共襄盛舉而合作此收據驗證,讓付費 App 能夠達到更高的可攜性與網路化。

App 開發人員觀點

所有付費 App 都必須驗證自己的收據。如果你是應用程式開發人員,想透過 Firefox OS 上銷售自己的 App,就可透過這篇文章讓自己著手建構收據驗證。你也可能希望建構相容的 Web 動態或線上商城,那這篇文章應該也有幫助。

屬於 JavaScript API 之一的 navigator.mozApps,可將裝置收據揭露給 App。最簡單的收據驗證方式,就是納入用戶端的函式庫 (如receiptverifier.js),並使用收據中托管的驗證服務 URL。收據驗證器的相關文件可提供較多細節。但其實在啟動此 App 時,就如同呼叫此 JavaScript 程式碼同樣簡單:

這樣就可以了!透過這個高階的捷徑,即使收據遺失或無效,你的 App 螢幕上隨即會跳出提示框。驗證器相關文件亦將說明初階驗證的建構方式。

這裡提供更完整的例子。你可檢查 Private Yacht (我們常用此 App 進行測試) 中的程式碼。此 App 可透過 receiptverifier.js 函式庫而檢查用戶端,亦可透過 node.js 檢查伺服端。我們也有 Python 函式庫 (另有特別用於 Django 的函式庫),可在伺服端上驗證收據。

此機制是如何運作的呢?各組收據均混搭了 JSON Web Tokens。其屬性之一就是提供鏈結,可銜接托管的驗證服務,而進一步檢查該收據。你也可以選擇離線驗證收據,但另需定期同步金鑰。而還有如退款與補發處理等的細節問題,目前尚未完整支援離線驗證功能。

在 App manifest 檔案中的 installs_allowed_from 參數,將載明所有商店的 URL。而依預設值,系統將僅允許來自於這些商店之一的收據。若你是開發人員,則必須與所有商城建立明確的付款關係,也因此可選擇自己所想要販售 App 的商城平台。這就如同為自己的 App 建立收據清單。由於客戶端 JavaScript 的條件較為寬鬆,因此可驗證伺服器端 (也就是在自己的 App 伺服器上) 的收據,進而更嚴加控管此清單。

Firefox Marketplace 的付費 App 機制尚未完整,但時間也不會拖得太久。如果你現在就先把收據驗證器整合到自己的 App 上,則一旦提交流程可支援付款作業時,就能立刻上線。

防止詐欺機制

Mozilla 針對開放 Web App 的願景之一,就是讓任一方均可於網路上販售 App。然而,想不致於過度集中收據,又要同時在沒有 DRM 的情況下保護 App 資產,確實有其難度。目前發現如 DNS 代理伺服器 (Proxy) 的用戶端受過攻擊,藉以存取付費 App。但在使用 CSP、CORS、HSTS (僅列舉其中 3 個解決方案) 之後,該情況已經有所改善。而今天在 iOS/Android 上的付費 App 並沒有太大的差異。這個開放性的問題,其實有助於達到更高效益的商城清單。同時在更多商店與開發人員的參與之下,Mozilla 希望能進一步強化該系統。另說到簽章的封包式 App,雖可多提供一層資產保護機制,但需要更完備的設計以解決許可權限問題。

一如往常,如果你遇到任何問題,請隨時反應給我們!如果是 App 平台的錯誤,可選擇 Core (component: DOM: Apps) 或選擇 Marketplace (component: Payments/Refunds)。

 

在 Firefox OS 上建立付費 App

 

英文原文:https://hacks.mozilla.org/2013/02/building-a-paid-app-for-firefox-os/