Minuteur iOS en dehors de l'application

J'essaie de faire ma première application, ça va vraiment bien. Je connais pas mal de langages de programmation, mais j'ai rencontré un problème.

J'essaye de limiter l'user à faire, au plus, une action toutes les heures. J'ai essayé de faire une timer. J'ai également essayé un code côté server pour m'aider, mais je n'arrive pas à le faire fonctionner. Je me demandais si quelqu'un avait des réponses qui pourraient m'aider?

Vous ne pouvez pas le faire via iPhone localement.

  • On peut changer l'heure de l'horloge sur l'appareil et la solution avec l'horodatage stocké ne fonctionnera pas.
  • Les timers ne sont pas en marche arrière. Donc, cette solution ne fonctionnera pas.

Pour y parvenir, vous devrez écrire des affaires côté server. Avant d'effectuer une opération, vérifiez à partir du server si une heure a été dépassée ou non. Chaque fois qu'il y aura une request au server, le server mettra à jour la dernière heure d'opération (si l'heure a été passée) pour cet user particulier. Cette heure sera définie par le server et ne dépendra pas de l'heure locale du client.

Probablement la meilleure approche serait la suivante: 1. Gardez la dernière action de l'user est un file ou une database (ou dans NSUserDefaults) 2. En laissant l'user effectuer une action vérifier l'horodateur stocké pour voir si 1 heure est passée depuis dernière invocation.

En outre, il peut être nécessaire de vérifier cela par rapport à un server (pour éviter de supprimer et de réinstaller l'application, réinitialisez l'horodatage enregistré).

Utilisez NSTimer pour désactiver l'action une heure.

scheduledTimerWithTimeInterval vous aidera à atteindre cet objective.

 NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:yourTimeinterval target:self selector:@selector(sortinggger) userInfo:nil repeats:YES]; 

Essayez quelque chose comme ceci:

 @interface YourClass @property (assign, nonatomic) double lastActionTime; @end @implementation YourClass - (BOOL)isActionAllowed { double currentTime = [[NSDate date] timeIntervalSince1970]; if (currentTime - 3600 > lastActionTime) { lastActionTime = currentTime; return YES; } return NO; } @end 

Vous pouvez save lastActionTime dans NSUserDefaults pour que même l'application soit fermée.

Cette solution suppose que l'user ne change pas de date ou ne réinstalle pas l'application.