UIMutableUserNotificationAction.destructive?
Hello,
Je me demandais si le fait de mettre la propriété destructive d'un UIMutableUserNotificationAction permet de faire des actions?
Ce que j'entends par la: Si je met destructive a YES mais l'activationMode à UIUserNotificationActivationModeBackground, est ce que j'ai du temps alloué par le système pour des traitements?
J'ai fait un test et ma méthode suivante est bien appelée.
handleActionWithIdentifier identifier: String?, forLocalNotification notification:
Merci d'avance.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Pour moi c'est totalement indépendant, non ? Qu'est ce qui te fait penser que cette propriété "destructive" aurait un impact sur le temps alliué pour l'action ?!
Ok, pour moi le destructive signifie une suppression de l'alerte ni plus/ni moins. Donc is je comprends bien, c'est pour alerter du caractère "dangereux" de l'action.
Ce qui me mène à une seconde question: qu'est ce qui détermine la couleur (bleue/grise) des autres boutons?
J'ai trouvé des choses:
Cas 2 actions (dont une destructive):
- la destructive est rouge
- l'autre est bleue
Cas 2 actions (sans destructive):
- La première (du setActions: est bleue
- L'autre est grise
Cas 3 actions (sans destructive):
- La première est bleue
- la 3 ème est grise
- (On est limité à 2 boutons?)
Cas 3 actions (sans destructive):
Comme le premier scénario
- Toutes les actions sont noires/grises/couleur standard par défaut
- Sauf l'action marquée "destructive" qui est en rouge (pour attirer l'attention de l'utilisateur sur le caractère potentiellement "dangereux" ou "irréversible" de l'action)
- Et sauf l'action par défaut qui est en bleu (et en gras je crois ?)
Ces couleurs ne sont là qu'à titre indicatif pour l'utilisateur et en pratique n'ont aucune différence de comportement.
Par exemple imagine que tu fais une application de gestion d'emails. Sur réception d'un email tu pourrais vouloir afficher une notification avec les actions "Afficher l'email", "Marquer comme lu", "Me rappeler plus tard", "Garder non lu", "Supprimer ce mail". Avec "Afficher l'email" comme action par défaut, et "Supprimer ce mail" comme action marquée "destructive", mais les autres restant comme actions classiques sans couleur particulière.
Merci pour ces précisions, mais dans quels cas de figure on a plus de 2 boutons?
J'ai fait des tests avec écran verrouillé, déverrouillé et dans le centre de notif, je n'ai que 2 boutons à chaque fois.
Avant iOS8 les notifications n'avaient que 2 actions, dont une qui était forcément "Annuler", et l'autre, celle qui ouvrait ton application, pouvait avoir un nom personnalisé ("Ouvrir", "Voir", "Afficher", ...)
Depuis iOS8, on peut " si on code ce qu'il faut en conséquence " faire des notifications ayant plus d'une seule action.
Voir la session 713 de la WWDC de l'an dernier (2014) ainsi que ce paragraphe du Programming Guide Apple sur les Notifications qui explique comment grouper les actions dans des UIMutableUserNotificationCategory, qu'il faut ensuite regrouper dans un UIUserNotificationSettings pour enregistrer toutes les catégories de notifications supportées par ton application, et surtout la liste des actions associées à chaque catégorie.
Par exemple si ton application d'email fait aussi calendrier, tu peux créer une catégorie "INVITE_CATEGORY" qui va décrire les notifications représentant une invitation. Tu vas ainsi décrire que les actions possibles pour ce type de notification sont "Refuser l'invitation", "Accepter", "Me rappeler plus tard". Tu pourrais aussi avoir une autre catégorie "REMINDER_CAT" qui va décrire les notifications décrivant un rappel de rendez-vous, ayant comme actions possibles "OK" ou "Me rappeler plus tard". Et ta catégorie "EMAIL_NOTIF" qui va décrire les notifications de nouveau message, avec les actions "Marquer comme lu", "Marquer comme non lu", etc.
Si tu décris des UI(Mutable)UserNotificationCategory qui n'ont que 2 actions, forcément tu ne verras que 2 boutons. De même, comme indiqué dans la doc sus-citée, " If the second setActions:forContext: were not specified, only the first two actions of the default context would be displayed on the lock screen " autrement dit si tu n'appelles pas "-[registerActions:... forContext:UIUserNotificationActionContextMinimal]" alors dans le contexte minimal (type écran verrouillé) tu ne verras que les 2 premières actions (alors que si ton iPhone n'est pas verrouillé et que tu affiches les notifications sous forme d'alerte et pas dans le centre de notifs, tu verras toutes les actions dans l'alerte)
En plus de la lecture de la doc je te conseille fortement la session WWDC citée plus haut, ça va t'éclaircir les idées.
Merci. Cependant j'ai bien regardé cette session et je m'inspire du PDF pour mon test:
Bon, sur le moment sans + creuser je ne vois pas le souci
Dans tous les cas merci pour ta lumière, je vais continuer à creuser
Du coup si de ma compréhension :
- Si tu spécifies une liste d'actions pour le contexte "Minimal", il faut en spécifier au maximum 2 de toute façon. Si tu en spécifies +, il ne va prendre que les 2 premières et ignorer les autres car il n'aura de toute façon pas la place de les afficher (ça peut porter à débat sur le LockScreen dans le sens où je te vois venir tu vas dire "mais si y'a la place" mais bon Apple a apparemment décidé de ne jamais en afficher + de 2 quand tu swipe sur le LockScreen, c'est comme ça)
- Si tu ne spécifies aucune liste d'actions pour le contexte "Minimal" mais uniquement pour le contexte "Default", c'est exactement comme si tu spécifiais les mêmes actions pour "Minimal" que ce que tu as spécifié pour "Default". Autrement dit, il va prendre les mêmes que pour Default, mais en tronquant la liste pour ne prendre que les 2 premiers car dans le contexte "Minimal" on ne peut pas en afficher plus de 2.
Du coup le seul intérêt de spécifier une liste explicite pour le contexte "Minimal" c'est si les 2 actions que tu veux afficher dans ce type de contexte " où l'espace dispo est plus étroit (genre LockScreen, etc) " ne sont pas les 2 premières actions de la liste du contexte "Default", par exemple que quand tu as la place d'afficher tout tu veuilles alors avoir les boutons dans l'ordre "OK", "Rappeler plus tard" et "Ignorer" mais que dans un contexte minimal tu veuilles "OK" et "Ignorer" plutôt que "OK" et "Rappeler plus tard".
Je les ai utilisées et effectivement on voit seulement 2 boutons, toutefois si dans la doc c'est indiqué qu'on peut en utiliser plusieurs c'est peut-être du à la présentation des notifications ?
On peut les afficher en bandeau mais il y a d'autres façons il me semble ? Je ne suis plus sur.
Effectivement, en affichage "Pop Up"
A mon avis (faudrait vérifier dans la doc, mais c'est ma première supposition), quand la notification est affichée :
- Sur le LockScreen => contexte "Minimal"
- Dans le NotificationCenter => contexte "Minimal"
- Sous forme de PopUp / AlertView => contexte "Default"
C'est ce que j'en ai déduit également. Mais je ne trouve pas la documentation qui en parle.