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.


Réponses

  • AliGatorAliGator Membre, Modérateur
    juin 2015 modifié #2
    Je ne vois pas trop le rapport, pourquoi marquer "destructive" à  YES pour une action (ce qui ne fait que montrer visuellement à  l'utilisateur que l'action est destructive ou dangereuse, comme une action "Supprimer" par exemple) aurait un effet sur le temps alloué à  cette action pour exécuter du traitement ?


    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


  • AliGatorAliGator Membre, Modérateur
    En fait ces définitions et comportements sont exactement les mêmes que ce qui a toujours été utilisé pour les UIAlertView et UIActionSheet :

    - 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.


  • AliGatorAliGator Membre, Modérateur
    juin 2015 modifié #7
    Il faut que tu utilises la nouvelle fonctionnalité des "Notifications Interactives" de iOS8.

    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.

    J'ai fait des tests avec écran verrouillé, déverrouillé et dans le centre de notif, je n'ai que 2 boutons à  chaque fois.

    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:



    var notificationActionCancel :UIMutableUserNotificationAction = UIMutableUserNotificationAction()
    notificationActionCancel.identifier = "NOT_NOW_IDENTIFIER"
    notificationActionCancel.title = "Not Now"
    notificationActionCancel.destructive = false
    notificationActionCancel.authenticationRequired = false
    notificationActionCancel.activationMode = UIUserNotificationActivationMode.Foreground

    var notificationActionOk :UIMutableUserNotificationAction = UIMutableUserNotificationAction()
    notificationActionOk.identifier = "ACCEPT_IDENTIFIER"
    notificationActionOk.title = "Ok"
    notificationActionOk.destructive = false
    notificationActionOk.authenticationRequired = false
    notificationActionOk.activationMode = UIUserNotificationActivationMode.Background

    var notificationActionOk2 :UIMutableUserNotificationAction = UIMutableUserNotificationAction()
    notificationActionOk.identifier = "ACCEPT_IDENTIFIER2"
    notificationActionOk.title = "Ok2"
    notificationActionOk.destructive = false
    notificationActionOk.authenticationRequired = false
    notificationActionOk.activationMode = UIUserNotificationActivationMode.Background




    var notificationCategory:UIMutableUserNotificationCategory = UIMutableUserNotificationCategory()

    notificationCategory.identifier = "INVITE_CATEGORY"
    notificationCategory .setActions([notificationActionCancel, notificationActionOk, notificationActionOk2], forContext: UIUserNotificationActionContext.Default)
    notificationCategory .setActions([notificationActionCancel, notificationActionOk, notificationActionOk2], forContext: UIUserNotificationActionContext.Minimal)

    application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Sound | UIUserNotificationType.Alert |
    UIUserNotificationType.Badge, categories: NSSet(array:[notificationCategory]) as Set<NSObject>
    ))
  • AliGatorAliGator Membre, Modérateur
    Ah effectivement vu ton code ça devrait t'afficher les 3 actions même sur le LockScreen puisque tu as bien mis 3 actions même pour le contexte .Minimal...
    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 :)

  • AliGatorAliGator Membre, Modérateur
    juin 2015 modifié #11
    En fait en y réfléchissant 2 secondes, je pense que dans le contexte ".Minimal", tu ne peux de toute façon prévoir que 2 actions. C'est normal, c'est pour ça qu'est fait le contexte "Minimal", c'est quand il n'y a pas assez de place pour afficher toutes les actions mais seulement au maximum 2. Comme sur le LockScreen o quand tu swipe il n'est pas prévu d'afficher plus de 2 actions de toute façon.

    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.




  • 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"

  • AliGatorAliGator Membre, Modérateur
    Oui mais justement, l'affichage "PopUp" d'une notification est un des rares cas où ça doit utiliser le contexte "Default" et pas "minimal", non ?

    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"


  • Oui mais justement, l'affichage "PopUp" d'une notification est un des rares cas où ça doit utiliser le contexte "Default" et pas "minimal", non ?


    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.

Connectez-vous ou Inscrivez-vous pour répondre.