J'ai une application que je souhaite commercialiser en tant qu'application payante. Je voudrais avoir une autre version qui serait une version "d'essai" avec une limite de temps de disons, 5 jours?
Comment puis-je faire cela?
J'ai une application que je souhaite commercialiser en tant qu'application payante. Je voudrais avoir une autre version qui serait une version "d'essai" avec une limite de temps de disons, 5 jours?
Comment puis-je faire cela?
Réponses:
Actuellement, la plupart des développeurs accomplissent cela en utilisant l'une des 3 techniques suivantes.
La première approche est facilement contournée, la première fois que vous exécutez l'application, enregistrez la date / l'heure dans un fichier, une base de données ou des préférences partagées et chaque fois que vous exécutez l'application après cela, vérifiez si la période d'essai est terminée. Ceci est facile à contourner car la désinstallation et la réinstallation permettront à l'utilisateur d'avoir une autre période d'essai.
La seconde approche est plus difficile à contourner, mais toujours contournable. Utilisez une bombe à retardement codée en dur. Fondamentalement, avec cette approche, vous coderez en dur une date de fin pour l'essai, et tous les utilisateurs qui téléchargent et utilisent l'application cesseront de pouvoir utiliser l'application en même temps. J'ai utilisé cette approche parce qu'elle est facile à mettre en œuvre et, pour la plupart, je n'avais tout simplement pas envie de passer par la troisième technique. Les utilisateurs peuvent contourner cela en modifiant manuellement la date sur leur téléphone, mais la plupart des utilisateurs ne se donneront pas la peine de faire une telle chose.
La troisième technique est la seule façon dont j'ai entendu parler pour vraiment être en mesure d'accomplir ce que vous voulez faire. Vous devrez configurer un serveur, puis chaque fois que votre application démarre, votre application envoie l' identifiant unique du téléphone au serveur. Si le serveur n'a pas d'entrée pour cet identifiant de téléphone, il en crée une nouvelle et note l'heure. Si le serveur dispose d'une entrée pour l'identifiant du téléphone, il effectue une simple vérification pour voir si la période d'essai a expiré. Il communique ensuite les résultats du contrôle d'expiration de l'essai à votre application. Cette approche ne doit pas être contournable, mais nécessite la mise en place d'un serveur Web et autres.
Il est toujours recommandé d'effectuer ces vérifications dans onCreate. Si l'expiration est terminée, affichez un AlertDialog avec un lien de marché vers la version complète de l'application. N'incluez qu'un bouton "OK", et une fois que l'utilisateur clique sur "OK", appelez "Terminer ()" pour mettre fin à l'activité.
la source
J'ai développé un SDK d'essai Android que vous pouvez simplement insérer dans votre projet Android Studio et il se chargera de toute la gestion côté serveur pour vous (y compris les périodes de grâce hors ligne).
Pour l'utiliser, simplement
Ajoutez la bibliothèque à votre module principal
build.gradle
Initialisez la bibliothèque dans la
onCreate()
méthode de votre activité principaleAjoutez un gestionnaire de rappel:
Pour démarrer un essai, appelez la
mTrialy.startTrial("YOUR_TRIAL_SKU", mTrialyCallback);
clé de votre application et la référence SKU d'essai se trouve dans votre tableau de bord du développeur Trialy .la source
C'est une vieille question mais de toute façon, peut-être que cela aidera quelqu'un.
Si vous souhaitez utiliser l' approche la plus simpliste (qui échouera si l'application est désinstallée / réinstallée ou si l'utilisateur change la date de l'appareil manuellement), voici comment cela pourrait être:
la source
getTime
ne l' est pasgetTimeInMillis
.Cette question et la réponse de snctln m'ont inspiré à travailler sur une solution basée sur la méthode 3 comme mémoire de licence. Je sais que l'état actuel n'est pas destiné à une utilisation productive, mais j'aimerais savoir ce que vous en pensez! Utiliseriez-vous un tel système? Souhaitez-vous le voir comme un service cloud (vous n'avez pas de problèmes avec la configuration d'un serveur)? Préoccupé par des problèmes de sécurité ou des raisons de stabilité?
Dès que j'ai terminé la procédure de licence, je veux continuer à travailler sur le logiciel. Alors maintenant, c'est le moment où j'ai besoin de vos commentaires!
Sourcecode est hébergé sur GitHub https://github.com/MaChristmann/mobile-trial
Quelques informations sur le système: - Le système comprend trois parties, une bibliothèque Android, un serveur node.js et un configurateur pour gérer plusieurs applications d'essai et comptes d'éditeurs / développeurs.
Il ne prend en charge que les essais chronologiques et utilise votre compte (Play Store ou autre) plutôt qu'un identifiant de téléphone.
Pour la bibliothèque Android, il est basé sur la bibliothèque de vérification des licences Google Play. Je l'ai modifié pour me connecter au serveur node.js et en plus la bibliothèque essaie de reconnaître si un utilisateur a changé la date du système. Il met également en cache une licence d'évaluation récupérée dans les préférences partagées chiffrées AES. Vous pouvez configurer l'heure de validité du cache avec le configurateur. Si un utilisateur "efface les données", la bibliothèque forcera une vérification côté serveur.
Le serveur utilise https ainsi que la signature numérique de la réponse de vérification de licence. Il dispose également d'une API pour les applications d'essai CRUD et les utilisateurs (éditeur et développeur). Les développeurs de bibliothèques de vérification de licence peuvent tester leur implémentation de comportement dans l'application d'essai avec le résultat du test. Ainsi, dans le configurateur, vous pouvez définir explicitement la réponse de votre licence sur "sous licence", "sans licence" ou "erreur de serveur".
Si vous mettez à jour votre application avec une nouvelle fonctionnalité époustouflante, vous voudrez peut-être que tout le monde puisse l'essayer à nouveau. Dans le configurateur, vous pouvez renouveler la licence d'essai pour les utilisateurs avec des licences expirées en définissant un code de version qui devrait déclencher cela. Par exemple, l'utilisateur exécute votre application sur le code de version 3 et vous voulez qu'il essaie les fonctionnalités du code de version 4. S'il met à jour l'application ou la réinstalle, il peut à nouveau utiliser la période d'essai complète car le serveur sait sur quelle version il l'a essayée en dernier. temps.
Tout est sous licence Apache 2.0
la source
Le moyen le plus simple et le meilleur pour ce faire est d'implémenter BackupSharedPreferences.
Les préférences sont conservées, même si l'application est désinstallée et réinstallée.
Enregistrez simplement la date d'installation comme préférence et vous êtes prêt à partir.
Voici la théorie: http://developer.android.com/reference/android/app/backup/SharedPreferencesBackupHelper.html
Voici l'exemple: La sauvegarde Android SharedPreferences ne fonctionne pas
la source
Approche 4: utilisez le temps d'installation de l'application.
Depuis le niveau d'API 9 (Android 2.3.2, 2.3.1, Android 2.3, GINGERBREAD), il y a firstInstallTime et lastUpdateTime dans
PackageInfo
.Pour en savoir plus: Comment obtenir le temps d'installation de l'application depuis Android
la source
Maintenant, dans la version récente de l'abonnement d'essai gratuit Android a été ajoutée, vous ne pouvez déverrouiller toutes les fonctionnalités de votre application qu'après avoir acheté l'abonnement dans l'application pour une période d'essai gratuite. Cela permettra à l'utilisateur d'utiliser votre application pendant une période d'essai, si l'application est toujours désinstallée après la période d'essai, l'argent de l'abonnement vous sera transféré. Je n'ai pas essayé, mais juste partager une idée.
Voici la documentation
la source
À mon avis, le meilleur moyen de le faire est d'utiliser simplement la base de données Firebase Realtime:
1) Ajoutez la prise en charge de Firebase à votre application
2) Sélectionnez «Authentification anonyme» pour que l'utilisateur n'ait pas à s'inscrire ou même à savoir ce que vous faites. Ceci est garanti pour être lié au compte d'utilisateur actuellement authentifié et fonctionnera donc sur tous les appareils.
3) Utilisez l'API de base de données en temps réel pour définir une valeur pour «Installed_date». Au moment du lancement, récupérez simplement cette valeur et utilisez-la.
J'ai fait la même chose et cela fonctionne très bien. J'ai pu tester cela lors de la désinstallation / réinstallation et la valeur dans la base de données en temps réel reste la même. De cette façon, votre période d'essai fonctionne sur plusieurs appareils utilisateur. Vous pouvez même mettre à jour votre install_date afin que l'application «réinitialise» la date d'essai pour chaque nouvelle version majeure.
MISE À JOUR : Après avoir testé un peu plus, il semble que Firebase anonyme semble allouer un identifiant différent au cas où vous auriez différents appareils et n'est pas garanti entre les réinstallations: / Le seul moyen garanti est d'utiliser Firebase mais de le lier à leur google Compte. Cela devrait fonctionner, mais nécessiterait une étape supplémentaire où l'utilisateur doit d'abord se connecter / s'inscrire.
Jusqu'à présent, je me suis retrouvé avec une approche légèrement moins élégante consistant simplement à vérifier les préférences sauvegardées et une date stockée dans les préférences lors de l'installation. Cela fonctionne pour les applications centrées sur les données où il est inutile pour une personne de réinstaller l'application et de saisir à nouveau toutes les données précédemment ajoutées, mais ne fonctionnerait pas pour un jeu simple.
la source
Après avoir examiné toutes les options de ce fil et d'autres, voici mes conclusions
Préférences partagées, base de données Peut être effacé dans les paramètres Android, perdu après la réinstallation d'une application. Peut être sauvegardé avec le mécanisme de sauvegarde d'Android et sera restauré après une réinstallation. La sauvegarde peut ne pas toujours être disponible, mais devrait l'être sur la plupart des appareils
Stockage externe (écriture dans un fichier) Non affecté par une suppression des paramètres ou une réinstallation si nous n'écrivons pas dans le répertoire privé de l'application . Mais: vous oblige à demander à l'utilisateur son autorisation au moment de l' exécution dans les nouvelles versions d'Android, donc cela n'est probablement possible que si vous avez de toute façon besoin de cette autorisation. Peut également être sauvegardé.
PackageInfo.firstInstallTime Est réinitialisé après une réinstallation mais stable entre les mises à jour
Connectez-vous à un compte Peu importe qu'il s'agisse de son compte Google via Firebase ou de celui de votre propre serveur: la version d'évaluation est liée au compte. Créer un nouveau compte réinitialisera l'essai.
Connexion anonyme à Firebase Vous pouvez connecter un utilisateur de manière anonyme et stocker des données pour lui dans Firebase. Mais apparemment, une réinstallation de l'application et peut-être d'autres événements non documentés peuvent donner à l'utilisateur un nouvel identifiant anonyme , réinitialisant leur période d'essai. (Google lui-même ne fournit pas beaucoup de documentation à ce sujet)
ANDROID_ID Peut ne pas être disponible et peut changer dans certaines circonstances , par exemple réinitialisation d'usine. Les opinions sur l'opportunité de l'utiliser pour identifier les appareils semblent différer.
Play Advertising ID Peut être réinitialisé par l'utilisateur. Peut être désactivé par l'utilisateur en désactivant le suivi des annonces.
InstanceID Reset lors d'une réinstallation . Réinitialiser en cas d'événement de sécurité. Peut être réinitialisé par votre application.
La (combinaison de) méthodes qui fonctionne pour vous dépend de votre application et de l'effort que vous pensez que le Jean moyen mettra pour gagner une autre période d'essai. Je recommanderais d'éviter d'utiliser uniquement Firebase et Advertising ID anonymes en raison de leur instabilité. Une approche multifactorielle semble donner les meilleurs résultats. Les facteurs dont vous disposez dépendent de votre application et de ses autorisations.
Pour ma propre application, j'ai trouvé que les préférences partagées + firstInstallTime + sauvegarde des préférences étaient la méthode la moins intrusive mais aussi assez efficace. Vous devez vous assurer de ne demander une sauvegarde qu'après avoir vérifié et stocké l'heure de début de l'essai dans les préférences partagées. Les valeurs des Prefs partagés doivent avoir la priorité sur firstInstallTime. Ensuite, l'utilisateur doit réinstaller l'application, l'exécuter une fois, puis effacer les données de l'application pour réinitialiser la version d'essai, ce qui représente beaucoup de travail. Cependant, sur les appareils sans transport de sauvegarde, l'utilisateur peut réinitialiser la version d'évaluation en réinstallant simplement.
J'ai rendu cette approche disponible sous forme de bibliothèque extensible .
la source
Par définition, toutes les applications Android payantes du marché peuvent être évaluées pendant 24 heures après l'achat.
Il existe un bouton «Désinstaller et rembourser» qui devient «Désinstaller» après 24 heures.
Je dirais que ce bouton est trop important!
la source
Je rencontre cette question en recherchant le même problème, je pense que nous pouvons utiliser des API de date gratuites comme http://www.timeapi.org/utc/now ou une autre API de date pour vérifier l'expiration de l'application de trail. cette méthode est efficace si vous souhaitez fournir la démo et que vous vous inquiétez du paiement et que vous avez besoin d'une démo fixe. :)
trouver le code ci-dessous
sa solution de travail .....
la source
Voici comment j'ai procédé au mien, j'ai créé 2 applications l'une avec une activité d'essai l'autre sans,
j'ai téléchargé celui sans activité d'essai pour jouer au magasin en tant qu'application payante,
et celui avec une activité d'essai en tant qu'application gratuite.
L'application gratuite lors du premier lancement propose des options d'essai et d'achat en magasin.Si l'utilisateur sélectionne l'achat en magasin, elle est redirigée vers le magasin pour que l'utilisateur l'achète, mais si l'utilisateur clique sur l'essai, cela l'amène à l'activité d'essai.
NB: j'ai utilisé l'option 3 comme @snctln mais avec des modifications
d'abord , je ne dépendais pas de l'heure de l'appareil, j'ai obtenu mon temps du fichier php qui fait l'enregistrement d'essai à la base de données,
deuxièmement , j'ai utilisé le numéro de série de l'appareil pour identifier de manière unique chaque appareil,
Enfin , l'application dépend de la valeur de temps renvoyée par la connexion au serveur et non de son propre temps, de sorte que le système ne peut être contourné que si le numéro de série de l'appareil est modifié, ce qui est assez stressant pour un utilisateur.
voici donc mon code (pour l'activité d'essai):
Mon fichier php ressemble à ceci (c'est une technologie REST-slim):
puis sur l'activité principale, j'utilise la préférence partagée (installDate créée dans l'activité d'essai) pour surveiller le nombre de jours restants et si les jours sont terminés, je bloque l'interface utilisateur de l'activité principale avec un message qui les amène au magasin pour acheter.
Le seul inconvénient que je vois ici est que si un utilisateur Rogue achète l'application payante et décide de partager avec des applications comme Zender, le partage de fichiers ou même l'héberger le fichier apk directement sur un serveur pour que les gens le téléchargent gratuitement. Mais je suis sûr que je modifierai bientôt cette réponse avec une solution à cela ou un lien vers la solution.
J'espère que cela sauve une âme ... un jour
Codage heureux ...
la source
L' option 3 @snctln peut être facilement effectuée en ajoutant un fichier php à un serveur Web avec php et mysql installés comme beaucoup d'entre eux.
Du côté Android, un identifiant (l'identifiant de l'appareil, le compte google ou ce que vous voulez) est passé en argument dans l'URL en utilisant HttpURLConnection et le php renvoie la date de la première installation s'il existe dans la table ou il insère une nouvelle ligne et il renvoie la date actuelle.
Ça fonctionne bien pour moi.
Si j'ai le temps, je posterai du code!
Bonne chance !
la source