我们希望向我们的产品添加自动更新或更新通知(C ++)。
更新应该是基于订阅的:
有人可以建议实施此类服务的软件或提供商吗?
我找到了一些自动更新的例子,但它们都是无限制的。
此服务必须基于每个用户限制并允许扩展。
答案 0 :(得分:1)
就成分而言,您需要的是:
我建议使用可嵌入的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知道输入的字符串是否有效。密钥的其余部分 - 包括其到期日期 - 可以在服务器端进行管理,尽管到期信息也可以在密钥本身中编码(但这意味着如果用户扩展了许可证,则更改密钥)。
对于服务器端,当提供密钥和更新请求时,服务器将
如果下载失败,可以重新启动或再次询问。如果您想为单个下载付费,则需要客户端确认下载成功 - 或者在失败时报告错误 - 因此您不会计算两次个人下载。
当然,所有这些都是我的头脑 - 可能有一些我在这里没有想过的细节。每种食材都很容易找到。 Arachnida的开源版本是available on SourceForge我有一些代码来编码许可证密钥,如果你需要它(用于我的另一个产品),但我相信你可以写这个,如果你不我想用我的。
您可能想要考虑的一些事情是对您的客户进行安全身份验证 - 因此他们不共享许可证密钥 - 保护您的HTTP连接,这样您就不会最终向世界发布您的更新,等等。服务器和客户端实现起来都非常复杂,因为大多数构建块已经存在。
HTH
RLC