Question

J'ai une application qui me oblige à prendre une action après une certaine période de temps. Par exemple, si un utilisateur n'a pas été à l'intérieur de l'application dans quelques semaines, lorsque l'utilisateur commence finalement l'application, je dois leur demander de mettre un code spécial qui leur a été donné quand ils ont installé cette application. (Ce qui est une application en interne et je suis tenu de le faire étant ce pour des raisons de sécurité)

J'utilise la méthode pour récupérer la date à laquelle l'utilisateur se connecte à l'intérieur et l'enregistrer dans une base de données [date NSDate]. Je compare cette date enregistrée prochaine fois qu'ils ouvrent l'application et de voir combien de temps son été depuis leur dernière connexion. Le problème est que [date NSDate] donne le temps qui est effectué par les paramètres de temps qui peuvent être modifiés manuellement par l'utilisateur dans l'application des paramètres d'origine. Comme vous pouvez le constater, cela provoque beaucoup de problèmes à ma situation. Si l'utilisateur est supposé mettre le code spécial après 3 semaines d'inactivité, il peut provoquer l'application d'afficher cet écran en modifiant le temps dans les paramètres natifs application ou pire, se éloigner de en définissant l'heure à une date antérieure qui sera dans les 3 semaines de son activité.

Y at-il un moyen d'obtenir le « temps du système » au lieu du « temps utilisateur »? Je l'ai regardé dans mach_absolute_time () mais obtient remis à zéro après le redémarrage de l'appareil. Depuis le temps d'inactivité, je comparerai contre est assez grand, il y a des chances appareil aurait été redémarré alors. J'ai aussi pensé à utiliser la connexion réseau pour obtenir le temps à partir de serveurs en dehors de l'application, mais beaucoup d'utilisateurs n'ont pas accès au wifi où ils utilisent leurs iPads. Ce sera ma dernière solution de recours si je ne trouve rien d'autre. En raison de leur emplacement pendant l'utilisation, je suis en train d'utiliser tout sur l'appareil lui-même.

Suis-je ici avec vue sur simple quelque chose? cela semble trop simple d'un problème de ne pas avoir une réponse. S'il vous plaît me guider vers la bonne direction. Nous vous remercions à l'avance.

Était-ce utile?

La solution

Pourquoi ne pas interroger un serveur distant pour le moment - beaucoup de serveurs NTP sur ou tout simplement faire une demande HTTP simple à un script php sur votre propre serveur. Bien sûr, si votre application est susceptible de ne jamais être connecté à Internet qui pourrait être un problème, mais une fois que vous avez un temps 3ème partie son assez facile de deviner si l'utilisateur a joué avec l'horloge.

Autres conseils

Si cela est une application inhouse (vous n'êtes pas limité par le processus d'approbation des pommes), vous pouvez marquer votre application comme faire des trucs de fond (voip ou de recevoir des mises à jour de localisation), de sorte que l'application sera toujours actif et vous « d être en mesure de mettre à jour une sorte d'un compteur « inutilisé ». app Voip sera même relancé par le système d'exploitation après redémarrage de l'appareil.

Mais bien sûr, il va drainer un peu la batterie.

Soit: faire avoir le temps réel une caractéristique essentielle de votre application. De cette façon, les utilisateurs auront besoin de garder le temps du courant de l'appareil et ne peuvent pas revenir trois semaines

Ou: marquer le code comme expiré et enregistrer ces informations avant l'application informe l'utilisateur. Cela arrêtera le plus utilisateur de fixer le dos de temps. La plupart essayer une ou deux fois, voir que les séjours app personnes handicapées et abandonnera.

Vous pouvez également enregistrer l'horodatage de la dernière exécution réussie et si cela est plus d'un délai raisonnable à l'avenir (rappelez-vous l'heure d'été / hiver) alors considérer comme une « tentative bidouille ». Mettez un contrôle CRC (ou tout autre idée obscure que vous venez avec) sur cet horodatage et de l'enregistrer aussi, et vous arrêter un grand nombre de script kiddies.

Vous ne pouvez jamais arrêter le pirate purs et durs qui cherchent activement à tous les trucs que vous pourriez avoir mis dans l'application. Il suffit de se concentrer sur l'utilisateur « moyen ».

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top