38 votes

GESTION DE NOTIFICATION

Je suis en train de lire Apple docs sur

La manipulation Locale et à Distance des Notifications

et il me semble avoir des déclarations contradictoires. Quelqu'un peut éclaircir la confusion de ces points? Nous allons parler strictement de la notification à distance (ou en local) pour l'instant.

Les docs disent que si le bouton d'action sur la notification est activée, elle appelle application:didFinishLaunchingWithOptions et passe dans la notification de la charge utile. Plus tard, il dit si l'application est en cours d'exécution au premier plan, il offre la notification par l'application:didReceiveRemoteNotification:. Cela implique, pour moi, que lorsque l'application est backgrounded ou ne fonctionne pas, alors l'application:didFinishLaunchingWithOptions est appelé. Sinon, demande:didReceiveRemoteNotification: est appelé.

Plus tard, il y a un iOS Remarque en disant ce qui suit:

"iOS Remarque: Dans iOS, vous pouvez déterminer si une application est lancée comme une conséquence de l'utilisateur en appuyant sur le bouton d'action ou si la notification a été livré à la déjà en cours d'exécution de l'application, par l'examen de l'état de l'application. Le délégué de la mise en œuvre de l'application:didReceiveRemoteNotification: ou de l'application:didReceiveLocalNotification: la méthode, d'obtenir la valeur de la applicationState de la propriété et de l'évaluer. Si la valeur est UIApplicationStateInactive, l'utilisateur a appuyé sur l'action du bouton; si la valeur est UIApplicationStateActive, la demande a été au premier plan quand il a reçu la notification."

Cela implique pour moi que de l'application:didReceiveRemoteNotification: est appelé à la fois lorsque l'application est déjà mis au premier plan et si l'utilisateur appuie sur le bouton d'action (ou des diapositives de l'action curseur dans iOS 5) à l'avant-plan/le lancement de l'application.

La source de ma confusion peut-être avec la première partie où les docs implique la notification de la charge utile est envoyé avec la demande:didFinishLaunchingWithOptions: méthode ou une incompréhension de ce qu'est une "course" de l'application est (est un backgrounded application considéré comme "en cours"?). La documentation de l'application:didReceiveRemoteNotification: etats, il est appelé à "l'exécution" des applications.

Donc, pour résumer, j'ai pu obtenir des précisions sur:

1) Est d'application:didReceiveRemoteNotification: toujours appelé lorsque l'application est marqué ou lorsque l'utilisateur sélectionne "d'agir" sur la notification? Si non, comment pouvons-nous donner un sens de l'iOS Note sur la détermination de l'État de l'Application d'être actif ou inactif?

2) Est un backgrounded app "en cours", au moins dans le sens de la docs prétendant application:didReceiveRemoteNotification est appelé pour des applications en cours d'exécution?

3) Pour l'achèvement, est un backgrounded application UIApplicationStateInactive ou Actif?

92voto

ch3rryc0ke Points 1104

La formulation prête à confusion, en particulier autour du mot semi-finition.

Lorsque l'application est vraiment pas chargé en mémoire (e,g. lorsque vous le lancez l'écran de démarrage s'affiche, etc), puis demande:didFinishLaunchingWithOptions est appelé, et vous pouvez obtenir la notification push comme suit:

NSDictionary *remoteNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if(remoteNotif)
{
    //Handle remote notification
}

Si l'application est chargé en mémoire et est ACTIF (par exemple, l'application est actuellement en cours sur l'appareil) puis seule application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo est appelé.

Si l'application est chargée dans la mémoire, mais n'est pas ACTIF et PAS la semi-finition (par exemple, vous avez lancé l'application, puis appuyé sur le bouton home, et j'ai attendu 10 secondes), puis vous cliquez sur le bouton d'action sur une notification push, seulement didReceiveRemoteNotification est appelé.

Vous pouvez capturer ce cas comme suit:

-(void)application:(UIApplication *)app didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if([app applicationState] == UIApplicationStateInactive)
    {
        //If the application state was inactive, this means the user pressed an action button
        // from a notification. 

    //Handle notification
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X