2011-03-23 5 views
0

Nous souhaitons ajouter une mise à jour automatique ou une notification de mise à jour à nos produits (C++).Comment ajouter un abonnement de mise à jour logicielle

mise à jour devrait être sur abonnement:

  • utilisateur achète abonnement pour 1 an des mises à jour
  • expiration de l'abonnement, plus de mises à jour sont disponibles. Est-ce que quelqu'un peut suggérer un logiciel ou un fournisseur pour mettre en œuvre un tel service?

J'ai trouvé quelques exemples de mise à jour automatique mais ils sont tous illimités dans le temps.

Ce service doit être limité par utilisateur et autoriser les extensions.

+0

Quelle plate-forme (je suppose que Windows parce que les utilisateurs doivent payer pour les mises à jour, mais je peux me tromper) et quelle licence voulez-vous? En outre, ceci est très facile à mettre en œuvre. –

+0

Désolé, je n'ai pas mentionné - c'est Windows. Je cherche un exemple de mise en œuvre. –

Répondre

1

Qu'est-ce que vous auriez besoin, en termes d'ingrédients, serait:

  • une méthode pour télécharger les mises à jour - je suggère HTTP (S) pour que
  • une méthode pour encoder la licence, y compris quel genre de mises à jour vous avez droit et depuis combien de temps vous y avez droit. Idéalement, cela serait opaque pour l'utilisateur mais facilement vérifiable aux deux extrémités (ainsi une entrée erronée peut être notifiée à l'utilisateur sans avoir à contacter le serveur)
  • un moyen facile de savoir si des mises à jour sont disponibles, et peut-être quand vérifier à nouveau

ce que je suggère serait de définir un XML simple sur le service HTTP à l'aide d'un client HTTP intégrable, par exemple (prise sans vergogne) Arachnida, avec une API simple - quelque chose comme:

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. */ 
}; 

Ils clé elle-même serait, comme vu ci-dessus, une chaîne qui, par son encodage, un certain type d'information quant à sa validité - par ex. une sorte de CRC pour savoir si la chaîne entrée est valide. Le reste de la clé, y compris sa date d'expiration, pourrait être géré côté serveur, bien que les informations d'expiration puissent également être codées dans la clé elle-même (mais cela signifierait changer la clé si l'utilisateur étendait la licence).

En ce qui concerne le côté serveur, lorsqu'il est présenté avec une clé et une demande de mise à jour, le serveur

  1. vérifier la validité du chèque clé
  2. si des mises à jour sont disponibles pour le logiciel la clé est pour (information qui peut ou ne peut pas faire partie de la clé elle-même, selon que vous voulez la gérer dans une base de données ou voulez qu'elle fasse partie de la clé de licence)
  3. Copier ou relier le fichier dans un fichier placez-le peut être téléchargé, avec un nom unique et difficile à deviner
  4. fournissent l'URL à télécharger au client - par ex.dans un flux XML renvoyé pour la requête HTTP
  5. démarrer une temporisation pour supprimer le fichier après qu'il n'a pas été téléchargée pour N secondes/minutes/heures
  6. supprimer le fichier une fois qu'il a été téléchargé par le client

Si un téléchargement échoue, il peut être redémarré ou demandé à nouveau. Si vous souhaitez facturer des téléchargements individuels, vous devez demander au client de confirmer un téléchargement réussi - ou signaler une erreur en cas d'échec - afin de ne pas comptabiliser deux fois les téléchargements individuels.

Bien sûr, tout cela est hors de ma tête - il pourrait y avoir quelques détails que je n'ai pas pensé ici. Chacun des ingrédients sont assez faciles à trouver. Une version open source d'Arachnida est available on SourceForge et j'ai un code pour encoder les clés de licence si vous en avez besoin (utilisé pour un autre de mes produits), mais je suis sûr que vous pouvez écrire cela si vous ne voulez pas utiliser le mien . Vous pouvez penser à une authentification sécurisée de vos clients, afin qu'ils ne partagent pas les clés de licence, sécurisant ainsi votre connexion HTTP afin de ne pas publier vos mises à jour dans le monde, etc. Ni l'un ni l'autre le serveur et le client doivent être très compliqués à mettre en œuvre, car la plupart des blocs de construction existent déjà.

HTH

RLC

Questions connexes