2011-03-23 43 views
0

我們希望向我們的產品(C++)添加自動更新或更新通知。如何添加軟件更新訂閱

更新應基於訂閱的是:當訂閱過期,沒有更多的可用更新

  • 用戶購買訂閱1年更新
  • 的。

有人可以建議軟件或提供商實施這樣的服務嗎?

我發現了幾個自動更新的例子,但它們都是無限的。

此服務必須限制在每個用戶的基礎上並允許擴展。

+0

什麼平臺(我猜的Windows,因爲用戶需要支付的更新,但我可能是錯的),並且你要什麼許可證?而且,這很容易實現。 – 2011-03-23 20:05:28

+0

對不起,我沒有提及 - 這是Windows操作系統。我正在尋找示例實現。 – 2011-03-23 20:43:29

回答

1

你需要什麼,在配料方面,應該是:

  • 的方法來下載更新 - 我建議爲
  • 的方法HTTP(S)來編碼許可證,其中包括您有權獲得什麼樣的更新以及您有權獲得多長時間的更新。理想情況下,這對用戶來說是不透明的,但在兩端都容易驗證(所以錯誤的輸入可以通知用戶而不必聯繫服務器)
  • 一種簡單的方法來知道更新是否可用,以及可能何時再次檢查

我的建議是使用一個嵌入式HTTP客戶端,如(無恥插頭)Arachnida,用一個簡單的API定義通過HTTP服務的簡單的XML - 是這樣的:

class UpdateAgent 
{ 
/* boilerplate */ 
public : 
    /* set the key to use. Throws an InvalidKey exception if not valid 
    * validity is checked locally - no HTTP queries are used. 
    * Key may have been invalidated on the server without notification 
    * at this point */ 
    void setKey(const std::string &key); 
    // Get the key currently set 
    std::string getKey() const; 
    /* using a synchronous HTTPS query, check with the server if updates are 
    * available for the current key. Throws on error: one of the QueryError 
    * subclasses if there has been a query error, or InvalidKey is the 
    * key is either not set or is not valid (i.e. invalidated server-side) */ 
    bool isUpdateAvailable() const; 
/* etc. */ 
}; 

如上所述,它們的關鍵字本身是一個字符串,通過它的編碼,在某種信息的有效性 - 例如某種類型的CRC來知道輸入的字符串是否有效。其餘的密鑰 - 包括其到期日期 - 可以在服務器端進行管理,儘管過期信息也可以在密鑰本身編碼(但這意味着如果用戶擴展許可證則更改密鑰)。

至於服務器端,當用鑰匙和更新的請求提交,服務器會

  1. 檢查關鍵
  2. 檢查是否有任何更新可用的軟件的有效性關鍵是(信息可能是也可能不是密鑰本身的一部分,具體取決於您是要在數據庫中管理它還是希望它成爲許可密鑰的一部分)
  3. 將文件複製或硬鏈接到它可以下載,用一個獨特的和難以猜測的名字
  4. 提供下載到客戶端的URL - 例如在爲HTTP請求返回的XML流中
  5. 啓動超時以在文件未被下載後以N秒/分鐘/小時的方式刪除文件
  6. 刪除文件,一旦它被客戶端下載後

如果下載失敗,則可以重新啓動或再次請求。如果你想爲個人下載收費,你需要在客戶端確認下載成功 - 或者失敗報告錯誤 - 所以你不要指望個人下載兩次。

當然,這一切都是從我的頭頂 - 可能有一些細節我都沒有想到在這裏。每種成分都很容易來。蛛形綱的一個開源版本是available on SourceForge,我有一些代碼,如果你需要它(用它爲我的另外一個產品)來編碼的許可證密鑰,但我敢肯定,你可以寫,如果你不想用我的。

你可能要考慮的幾件事情是你的客戶安全認證 - 所以他們不同意許可證密鑰 - 保護您的HTTP連接,所以你最終不會發布您更新到全球,無論是等由於大多數構建塊已經存在,因此服務器和客戶端都不需要執行起來非常複雜。

HTH

RLC