0

製品に自動更新または更新通知を追加したい (C++)。

更新はサブスクリプション ベースである必要があります。

  • ユーザーは 1 年間の更新のサブスクリプションを購入します
  • サブスクリプションの有効期限が切れると、それ以上の更新は利用できなくなります。

そのようなサービスを実装するためのソフトウェアまたはプロバイダーを提案できますか?

自動更新の例をいくつか見つけましたが、それらはすべて時間無制限です。

このサービスは、ユーザーごとに制限され、拡張を許可する必要があります。

4

1 に答える 1

1

材料に関して、あなたが必要とするものは次のようになります:

  • アップデートをダウンロードする方法-そのためのHTTP(S)をお勧めします
  • 資格のある更新の種類や資格のある期間など、ライセンスをエンコードする方法。理想的には、これはユーザーには不透明ですが、両端で簡単に確認できます(したがって、サーバーに接続しなくても、誤ったエントリをユーザーに通知できます)。
  • アップデートが利用可能かどうか、そしておそらくいつ再確認するかを知る簡単な方法

私が提案するのは、(恥知らずなプラグ)Arachnidaなどの埋め込み可能なHTTPクライアントを使用して単純なAPIを使用して単純なXMLoverHTTPサービスを定義することです。

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. クライアントによってダウンロードされたら、ファイルを削除します

ダウンロードが失敗した場合は、再起動するか、再度要求することができます。個別のダウンロードに対して課金する場合は、クライアントがダウンロードの成功を確認するか、失敗時にエラーを報告する必要があるため、個別のダウンロードを2回カウントすることはありません。

もちろん、これはすべて私の頭のてっぺんから外れています-私がここで考えていなかったいくつかの詳細があるかもしれません。それぞれの材料はとても簡単に手に入ります。ArachnidaのオープンソースバージョンはSourceForgeで入手でき、必要に応じてライセンスキーをエンコードするためのコードがあります(他の製品で使用しています)が、必要がない場合は、それを記述できると確信しています。私を使用してください。

あなたが考えたいと思うかもしれないいくつかのことはあなたのクライアントの安全な認証です-それで彼らはライセンスキーを共有しません-あなたがあなたの更新を世界に公開することになることのないようにあなたのHTTP接続を保護しますほとんどのビルディングブロックはすでに存在するため、クライアントの実装は非常に複雑である必要があります。

HTH

rlc

于 2011-03-24T01:09:36.887 に答える