6
votes

Vérification de la longue application iPhone de l'arrière-plan lorsqu'il est entré au premier plan

J'ai une application iPhone qui permet aux utilisateurs de se connecter et d'interagir avec un service Web. J'aimerais avoir la possibilité que l'utilisateur soit automatiquement déconnecté après une période d'inactivité ... Plus précisément si l'application est en arrière-plan pendant plus d'une période de temps (par exemple 1 heure).

J'aimerais idéalement exécuter une vérification de l'application Méthode de délégué ApplicationWillenterRountground qui vérifie la durée de l'application à l'arrière-plan puis si elle a été sur le temps autorisé, prenez-les à l'écran de connexion.

Comment puis-je exécuter cette vérification dans la méthode ci-dessus? J'apprécierais un exemple de code.

Si ce n'est pas le meilleur moyen d'atteindre mes exigences, des suggestions également les bienvenues!

Merci beaucoup d'avance

andy


0 commentaires

4 Réponses :


2
votes

Écrivez l'heure et la date à Nsuserdefault lorsque l'application entre dans l'arrière-plan ou est arrêtée. Ensuite, lisez cette heure et remontez de Nsuserdefault dans l'applicationWillenterforeTround et comparez. S'il est plus d'une heure (ou tout ce que vous définissez votre délai d'attente), affichez l'écran de connexion.


0 commentaires

3
votes

Enregistrez l'heure lorsque l'application entre dans l'arrière-plan sur Nsuserdefault. Ensuite, lisez-le quand il se réjouit de premier plan.

Dans ApplicationWillenerForeFrefore Si la différence de temps est supérieure à 1 heure, vous définiriez un drapeau ou poster une notification. C'est-à-dire que vous pourriez avoir une méthode dans votre délégué de votre application qui enregistre l'utilisateur ou que vous pourriez avoir une vérification d'un drapeau dans la viewwillappear, que si nécessaire enregistre l'utilisateur.


0 commentaires

0
votes

Définissez d'abord la minuterie dans la méthode ApplicationDIdFinishLaunching:

Vérifiez maintenant l'heure dans la méthode ApplicationDidecomeactive: Ceci est appelé à chaque fois que l'utilisateur démarre l'application.

Si le temps est supérieur à l'ex (1 heure), puis réinitialisez la minuterie et déconnectez l'utilisateur.


1 commentaires

En fait, vous devriez arrêter toutes les minuteries de fonctionnement lorsque l'application entrait en arrière-plan.



12
votes

Vous pouvez utiliser ceci:

- (void)applicationWillResignActive:(UIApplication *)application
{    
    NSDate *thisMagicMoment = [NSDate date];
    [[NSUserDefaults standardUserDefaults] setObject:thisMagicMoment forKey:@"lastMagicMoment"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    NSDate *thisMagicMoment = [NSDate date];
    NSDate *lastMagicMoment =  (NSDate *)[[NSUserDefaults standardUserDefaults] objectForKey:@"lastMagicMoment"];

    if (lastMagicMoment==nil)
    {
        NSLog (@"First launch!");
    }
    else
    {
        NSTimeInterval timeOfNoMagic = [thisMagicMoment timeIntervalSinceDate:lastMagicMoment]/3600.0;
        NSLog (@"Application was in background for %.1f hours", timeOfNoMagic);

        //do your stuff - treat NSTimeInterval as double

        if (timeOfNoMagic > 1.0)
        {
            //logout
        }
    }
}


4 commentaires

(Ceci est une opinion personnelle que vous pouvez ou non être d'accord avec ...) Bien que ce soit gentil de votre part de faire le travail de la personne qui postive la question, je pense qu'il serait préférable de poster des directives pour la publication de la question de la question. pourrait aller chercher plus d'informations ou des choses à penser à écrire leurs propres implémentations. Le débordement de la pile obtient progressivement plus de questions qui se terminent par "Veuillez poster un certain code" et ce code apparaît alors dans une autre question avec "J'ai ce code, et je veux maintenant faire cela supplémentaire. S'il vous plaît poster le code". Qui n'aime vraiment pas l'apprentissage.


@Nick: du point de vue éducatif, je suis d'accord 70%. Je pense que le codage doit apprendre à étudier la documentation et à voir également (parfois copier-coller). L'apprentissage uniquement de la documentation d'Apple serait une douleur dans le ... mais: ne l'utilise pas seulement pour apprendre - beaucoup l'utilisent comme un référentiel public pour les extraits de code abrégés résolvant des problèmes non cruciaux (productivité d'une croître). Cela dit: J'ai donné +1 à la réponse de votre Ade et une heure il y a une heure exactement parce qu'ils sont éducatifs. Je voudrais (si je pouvais) donner le mien aussi +1 parce que cela peut être un orthone pour quiconque avec le même "problème". :-)


Pouvez-vous s'il vous plaît laissez-moi savoir si j'avais utilisé l'applicationDidyTerbackground et l'applicationWillenerFreverfore Sergnory respectivement


Le problème avec ces deux méthodes est qu'au moment de leur appelé, l'application est en arrière-plan (déjà en arrière-plan et toujours en arrière-plan). Il devrait toujours fonctionner mais ce n'est pas le genre de travail qui doit être fait en arrière-plan. Voir ce graphique .