【问题标题】:How to add software update subscription如何添加软件更新订阅
【发布时间】:2011-03-23 20:01:51
【问题描述】:

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

更新应该是基于订阅的:

  • 用户购买订阅 1 年更新
  • 订阅到期后,将不再提供更新。

有人可以推荐软件或提供商来实现此类服务吗?

我发现了一些自动更新的例子,但它们都没有时间限制。

此服务必须针对每个用户进行限制并允许扩展。

【问题讨论】:

  • 什么平台(我猜是Windows,因为用户需要为更新付费,但我可能错了)以及您想要什么许可证?而且,这很容易实现。
  • 抱歉,我没有提到 - 这是 Windows。我正在寻找示例实现。

标签: c++ subscription


【解决方案1】:

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

  • 一种下载更新的方法 - 我建议为此使用 HTTP(S)
  • 一种对许可证进行编码的方法,包括您有权获得什么样的更新以及您有权获得它多长时间。理想情况下,这对用户来说是不透明的,但在两端都可以轻松验证(因此可以将错误的条目通知给用户,而无需联系服务器)
  • 一种了解更新是否可用以及何时再次检查的简单方法

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

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. 文件被客户端下载后删除

如果下载失败,可以重新启动或再次请求。如果您想对单次下载收费,您需要客户端确认下载成功 - 或在失败时报告错误 - 这样您就不会计算两次单次下载。

当然,这一切都在我的脑海中——可能有一些我没有想到的细节。每种成分都很容易获得。 Arachnida 的开源版本是available on SourceForge,如果您需要,我有一些代码可以对许可证密钥进行编码(将其用于我的另一个产品),但我相信如果您不想这样做,您可以编写用我的。

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

HTH

rlc

【讨论】:

    猜你喜欢
    • 2019-09-09
    • 1970-01-01
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多