web-dev-qa-db-fra.com

Mise en œuvre d'un contre-la-montre de 30 jours

Question pour les développeurs Mac indépendants:

Comment mettre en œuvre un contre-la-montre de 30 jours de manière non perverse? Mettre un compteur dans les préférences n'est pas une option, car l'effacement des préférences une fois par mois n'est pas un problème pour un utilisateur moyen. Mettre le compteur dans un fichier caché quelque part semble un peu douteux - en tant qu'utilisateur, je déteste quand des applications saupoudrent mon disque dur de fichiers aléatoires. Des idées?

46
svintus

Ce problème revient à plusieurs reprises sur la liste de diffusion de cacao-dev et la réponse consensuelle est toujours de faire la chose la plus simple possible. Les pirates déterminés briseront toutes les solutions sauf la plus sophistiquée. Et il est peu probable qu'ils paient pour le logiciel de toute façon. Optez pour la solution 80/20: la solution facile qui obtient 80% d'effet pour 20% d'effort. Dans ce cas, mettez quelque chose dans ~/Library/Application Support/your.app.com /. Vous pouvez nommer le fichier quelque chose d'innocent si vous voulez brouiller un peu les choses. L'utilisation des paramètres par défaut de l'utilisateur est également facile.

Quoi que vous fassiez, n'utilisez pas l'adresse MAC ou un autre ID matériel. Les utilisateurs disposant d'un répertoire de base réseau (par exemple dans un laboratoire partagé) vous détesteront. Utiliser des identifiants matériels est tout simplement mauvais.

Si quelqu'un est tellement amoureux de votre programme qu'il est prêt à briser vos limites d'essai, laissez-le. Le logiciel libre ne vous coûte rien et sa bonne volonté (et peut-être sa recommandation aux autres) vaut beaucoup.

Enfin, écrivez un logiciel que les gens veulent utiliser et évaluez-le pour sa valeur. Si votre prix est une bonne valeur et personnes veulent pour l'utiliser, la plupart des gens paieront pour cela.

59
Barry Wark

Je suggérerais de mettre en œuvre peu de choses qui sont moins intrusives et peuvent éviter à un utilisateur normal de désinstaller ou d'acheter sur une période d'un mois.

  1. Utilisez une série spéciale de numéro de série d'essai qui stocke la date d'expiration. Vous pouvez utiliser le cryptage pour enregistrer la date d'expiration dans le numéro de série.
  2. Créez maintenant un fichier de configuration qui stocke les données au format crypté et contient le numéro de série.

En outre, implémentez ces éléments dans le fichier de configuration.

  1. Notez l'heure/la date à chaque fois que l'utilisateur démarre l'application.
  2. Notez la durée d'ouverture de la demande.

En effectuant la journalisation de l'horodatage, vous pouvez éviter ces solutions de contournement:

  1. Si l'utilisateur annule la date de l'ordinateur, vous saurez que l'application a déjà été exécutée ce jour-là. Supposons que l'utilisateur ait exécuté l'application les 1 et 3 jours du mois. Maintenant, après 30 jours, inverse la date et la définit sur le 2ème du mois. Maintenant, par fichier de configuration, vous saurez que l'application fonctionnait déjà sur 1 et 3, donc l'utilisateur a raté les dates sur l'ordinateur.
  2. Supposons que chaque utilisateur démarre votre application en définissant pour la première fois la date sur le 5 du mois. En enregistrant le temps d'exécution de votre application, vous verrez que si le nombre total d'heures dans une journée dépasse 24, l'utilisateur se trompe.

Assurez-vous que votre application ne s'exécute pas sans le fichier de configuration. Donc, essentiellement, vous envoyez le numéro de série crypté dans un fichier ou peut-être en entrant le numéro de série, vous pouvez créer un fichier. Étant donné que le numéro de série a déjà la date d'expiration, l'utilisateur ne peut pas non plus réutiliser le numéro de série.

Je ne suggérerais pas le moyen Internet car les gens sont énervés lorsque l'application essaie de se connecter au serveur à chaque fois. De plus, on peut se méfier du fait que vous essayez d'envoyer des données personnelles d'utilisateurs à vos serveurs.

Une chose que je voudrais dire: quelle que soit la force de la technique anti-piratage que vous utilisez, quelqu'un est tenu de la casser. Vous ne créez pas votre application pour ces types. Vous créez votre application pour les personnes qui aimeraient votre logiciel et l'achèteront avec plaisir. Ayez donc l'anti-piratage dans ses limites sans perdre les vrais clients en rendant votre application trop intrusive pendant la période d'essai. Une pensée dit également que si votre logiciel est piraté, cela signifie qu'il devient également populaire. Encore une fois, les opinions peuvent différer et ne voudrait pas faire une digression sur ces questions.

24
K Singh

Considère ceci. Combien d'utilisateurs potentiels de votre logiciel sont là-bas, impatients de l'utiliser solidement pendant les 30 prochains jours?

Je soupçonne que le cas beaucoup plus normal est le suivant: les utilisateurs rencontrent un nouveau progiciel qui résout un problème qu'ils ont e sur un site comme lifehacker.com. le logiciel est téléchargé, joué brièvement, puis mis de côté. Peut-être son logiciel d'extraction de mp3 et ils n'ont pas de CD à extraire à ce moment-là. Ou ils sont simplement occupés ce jour-là, mais ils passeront bientôt en revue ce logiciel.

30 jours passent. Probablement plus. Seulement alors ils achètent un CD, rencontrent une sorte de "problème" et se souviennent, "aha, il y a cette version d'essai que j'ai téléchargée! Où l'ai-je remis? Cela n'a pas d'importance. Sans jamais être utilisé, le "procès" a expiré.

Je ne peux pas compter le nombre d'outils logiciels qui sont tombés dans ce seau pour moi. Le jour où un logiciel m'est recommandé, le jour où je vois une critique positive sur lifehacker, n'est JAMAIS le jour où j'ai réellement besoin - ni même le temps - d'utiliser/d'analyser le programme que j'ai téléchargé et installé.

11
Chris Becke

Faire expirer le logiciel après 30 jours calendaires est mauvais car que se passe-t-il si quelqu'un le télécharge, l'exécute une fois, puis décide de l'évaluer un mois plus tard? La prochaine fois qu'ils le lanceront, un mois plus tard, il indiquera qu'il a expiré.

J'irais avec une limitation à 14 lancements, ou quelque chose comme 120 minutes d'utilisation.

En ce qui concerne l'implémentation, un fichier (caché ou non) dans le dossier Préférences de l'utilisateur, avec un nom obscurci, semble être la meilleure solution. Le fichier n'est pas placé au hasard sur le disque dur, mais l'utilisateur ne peut pas facilement déterminer quel fichier supprimer.

7
lucius

Le moyen le moins mauvais est de simplement demander à l'utilisateur de supprimer le programme après un mois ou de le payer;)

4
Andreas Brinck

Au moment du téléchargement, fournissez-leur un numéro de série d'essai. Lorsqu'ils entrent le numéro de série, faites-le se connecter à votre serveur et obtenez les informations d'expiration (stockées et cryptées localement pour éviter tout appel "phone home" supplémentaire).

En procédant de cette façon, vous leur rendez assez difficile le contournement de votre fenêtre de 30 jours, car la date d'expiration est stockée en permanence sur le serveur. Vous pouvez le configurer de manière à ce que la suppression de la clé et sa nouvelle saisie entraînent à nouveau la connexion de votre application à votre serveur et le téléchargement de la même date d'expiration qu'auparavant.

Ou vous pouvez le faire comme le fait WinZip (ou l'habitude de le faire?): Fournissez un essai de 30 jours et affichez simplement un écran à chaque chargement indiquant depuis combien de temps vous l'utilisez et des liens pour acheter.

2
Brad Butner

Nous l'avons fait pour l'une de nos applications clientes. Certes, cela a été fait dans .NET pour Windows, mais les mêmes principes peuvent être appliqués sous MAC.

Comme eckesickle mentionné, si votre utilisateur a accès à Internet (ou devrait), vous pouvez alors avoir un service Web qui enregistrera un identifiant unique de l'ordinateur hôte avec la date de début de l'essai (l'adresse MAC est une bonne). Avec cela, l'utilisateur ne peut pas vraiment tromper le programme à moins de tenter sa carte réseau tous les mois.

Désormais, si l'utilisateur n'a pas accès à Internet pour une raison quelconque, vous pouvez soit arrêter le programme jusqu'à ce qu'il s'y connecte, soit utiliser une période de grâce. Ce fichier enregistre la dernière fois que l'application est ouverte. Lorsque Internet n'est pas accessible, nous arrêtons d'écrire l'heure (nous y écrivons toujours quelque chose pour que l'utilisateur ne remarque pas que le fichier n'est pas mis à jour).

Si un utilisateur remarque que ce fichier contient les informations et le supprime (ou le modifie en utilisant une copie qu'il possède), alors vous avez besoin d'un moyen de contrer cela. Vous pouvez avoir une autre valeur dans un autre fichier de configuration (toujours chiffré) et vérifier la cohérence. Ce que vous faites si vous découvrez que l'utilisateur essaie de tricher dépend de vous, mais nous obligons l'utilisateur à se connecter à Internet pour que cela fonctionne.

C'est peut-être exagéré pour un programme, mais cela fonctionne définitivement.

2
David Brunelle

J'avais l'habitude de proposer une édition lite de 30 jours de mon application iOS qui intégrait la date d'installation et diverses dates d'enregistrement dans le fichier de données d'exportation que l'utilisateur pouvait télécharger sur son ordinateur.

Si l'utilisateur était un bon marché et qu'il venait de réinstaller l'édition allégée et d'essayer de réimporter les données, la logique remarquerait qu'au moins une des dates était antérieure à 30 jours et l'application définirait sa date d'installation à la plus ancienne de ces dates à partir de le fichier, le rendant expiré à nouveau.

Dans l'édition payante complète, cette logique n'existait pas et le fichier de données pouvait être importé facilement.

Ce fut une douleur de soutenir les gens dans cette migration de données (puisque les applications sont complètement sandbox les unes des autres) et certains autres utilisateurs ont estimé que l'édition allégée leur suffisait, donc ils n'ont jamais mis à niveau.

Depuis, j'ai arrêté de proposer mon édition allégée et j'ai simplement réduit le prix de l'édition complète. Désormais, les clients potentiels n'ont plus qu'à payer un petit montant ou à trouver des logiciels concurrents.

Dans l'ensemble, c'était la meilleure stratégie pour obtenir des utilisateurs payants.

2
Jason Fuerstenberg

Lire un UUID d'un composant matériel et effectuer une vérification par rapport à votre service Web pour voir si votre logiciel a déjà été installé pendant 30 jours au lancement du programme?

1
Fredrik E