J'ai donc configuré le LVL Android avec mon application pour vérifier les licences. Cela semble fonctionner très bien avec les comptes de test. Le problème est, si j'éteins la connexion Internet de téléphones et essaye d'exécuter l'application, la vérification de permis échouera et me dira que ce n'est PAS sous licence! Une chose est, pourquoi me dit-elle que l'application n'est PAS sous licence et plus important encore, comment puis-je faire en sorte que l'application se souvienne si elle est sous licence ou non.Bibliothèque de vérification des licences Android hors ligne
Répondre
Apparemment, la réponse à cette question est que la licence n'est pas mise en cache lors des tests, mais qu'elle l'est sur le marché. J'ai créé une petite application pour tester ça et ça marche!
Désolé mais, moi aussi, je confirme que le mode avion ne permet pas de s'appuyer sur un cache. Théoriquement, si l'application était en ligne et envoyait une commande ping au serveur de licences juste avant de se déconnecter, cela pourrait fonctionner. Toutefois, si le téléphone est hors ligne pour une durée significative, il n'existe aucun mécanisme de mise en cache. Regardez le code. J'ai déposé un bug contre android: http://code.google.com/p/android/issues/detail?id=12978
Parce que mes utilisateurs de Shout n 'Snap shoutnsnap.com sont DÉJÀ confirmant ce comportement stupide.
J'ai fait une solution de contournement en utilisant un défi en 2 parties sur le côté client. EG:
IF LICENSED:
PERSIST random key as LK
PERSIST obfuscated random key as OLK
ELSE:
if (deobfuscate(OLK) == LK)
GRANT ACCESS
ELSE:
GET LOST
code
Pensez-vous que c'est un mauvais plan? stocker dans une base de données quelque part le résultat de la vérification de la licence, puis l'utiliser si elle est disponible? –
En fait, j'ai stocké un uid aléatoirement généré, ET une version obfusquée de celui-ci. Si deobfuscate (uid) = uid alors c'est bon d'y aller. La seule façon d'avoir la désobfuscation est d'avoir réellement le code. Pour plus de protection, il serait bon d'obscurcir votre apk aussi bien. – hunterp
Cette technique sonne bien car elle corrige un trou dans LVL mais c'est exactement la même chose que de stocker un booléen à la suite d'une vérification de licence, ou deux booléens disons, et cryptés. Par cela je veux dire, si quelqu'un peut mettre sa main sur les deux chaînes LK et 0LK, et les a eu automatiquement dans la base de données (ou les préférences obscurcies), il fera passer le contrôle de licence. – Snicolas
Je crois que vous avez tort. – gregm
Depuis ce que j'ai constaté qu'il ne cache pas du tout car j'ai eu des moments où l'utilisateur est hors ligne et l'application ne validera pas. Aucune suggestion? –
On dirait que c'est le cas: les réponses aux tests ne sont pas mises en cache mais les vraies réponses sont mises en cache. http://groups.google.com/group/android-developers/browse_thread/thread/a7861900d99de4f8# – Snicolas