如何添加软件更新订阅

时间:2011-03-23 20:01:52

标签: c++ subscription

我们希望向我们的产品添加自动更新或更新通知(C ++)。

更新应该是基于订阅的:

  • 用户购买订阅1年更新
  • 订阅到期时,不再有更新。

有人可以建议实施此类服务的软件或提供商吗?

我找到了一些自动更新的例子,但它们都是无限制的。

此服务必须基于每个用户限制并允许扩展。

1 个答案:

答案 0 :(得分:1)

就成分而言,您需要的是:

  • 下载更新的方法 - 我建议使用HTTP(S)
  • 对许可进行编码的方法,包括您有权获得的更新类型以及您有权获得的更新时间。理想情况下,这对用户来说是不透明的,但在两端都很容易验证(因此可以在不必联系服务器的情况下将错误的条目通知给用户)
  • 了解更新是否可用以及可能何时再次检查的简便方法

我建议使用可嵌入的HTTP客户端定义一个简单的XML over HTTP服务,例如(无耻插件)Arachnida,使用简单的API - 类似于:

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. 客户端下载后删除文件
  7. 如果下载失败,可以重新启动或再次询问。如果您想为单个下载付费,则需要客户端确认下载成功 - 或者在失败时报告错误 - 因此您不会计算两次个人下载。

    当然,所有这些都是我的头脑 - 可能有一些我在这里没有想过的细节。每种食材都很容易找到。 Arachnida的开源版本是available on SourceForge我有一些代码来编码许可证密钥,如果你需要它(用于我的另一个产品),但我相信你可以写这个,如果你不我想用我的。

    您可能想要考虑的一些事情是对您的客户进行安全身份验证 - 因此他们不共享许可证密钥 - 保护您的HTTP连接,这样您就不会最终向世界发布您的更新,等等。服务器和客户端实现起来都非常复杂,因为大多数构建块已经存在。

    HTH

    RLC

相关问题