gpt4 book ai didi

c++ - 如何添加软件更新订阅

转载 作者:行者123 更新时间:2023-11-28 08:22:09 25 4
gpt4 key购买 nike

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

更新应该是基于订阅的:

  • 用户购买订阅 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. */
};

如上所示,它们的 key 本身将是一个字符串,通过其编码,将包含某种关于其有效性的信息——例如某种 CRC 来知道输入的字符串是否有效。 key 的其余部分 - 包括其到期日期 - 可以在服务器端进行管理,尽管到期信息也可以编码在 key 本身中(但这意味着如果用户扩展许可证则更改 key )。

至于服务器端,当收到 key 和更新请求时,服务器会

  1. 检查 key 的有效性
  2. 检查 key 所针对的软件是否有可用的更新(信息可能是也可能不是 key 本身的一部分,具体取决于您是想在数据库中管理它还是希望它成为许可证的一部分键)
  3. 将文件复制或硬链接(hard link)到可以下载的位置,并使用独特且难以猜测的名称
  4. 提供客户端下载的 URL - 例如在为 HTTP 请求返回的 XML 流中
  5. 在 N 秒/分钟/小时未下载文件后开始超时以删除文件
  6. 客户端下载后删除文件

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

当然,所有这些都超出了我的想象 - 可能有一些细节是我在这里没有想到的。每种成分都很容易获得。 Arachnida 的开源版本是 available on SourceForge我有一些代码可以在您需要时对许可证 key 进行编码(将其用于我的另一个产品),但我相信如果您不想使用我的代码也可以编写。

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

HTH

rlc

关于c++ - 如何添加软件更新订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5410936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com