none
Activation depuis notification avec paramètre RRS feed

  • Discussion générale

  • Bonjour à tous,

    Je voudrais détecter lorsque mon application est activée depuis une notification. Je développe mon application en HTML/Javascript.

    J'ai donc ajouté dans la création de la notification la ligne suivante :

    toastXML.setAttribute("launch", '{"type":"toast","ouverture":"mails"}');

    Ensuite je n'arrive pas à lire ce paramètre "ouverture". J'ai ajouté les lignes de code suivantes, mais je ne sais pas quoi mettre dedans :

    Windows.UI.WebUI.WebUIApplication.addEventListener('activated', function (args) {
    
    });

    Qu'est ce que je dois rajouter pour vérifier si l'activation s'est faire depuis ma notification ou non ?

    Merci d'avance de votre aide :)

    samedi 26 décembre 2015 17:04

Toutes les réponses

  • Bonjour, yoanpg,

    Veuillez consulter l'article en bas :
    Windows 8 Development - Application Startup
     Je vous remercie par avance de votre retour.
    Joyeux Noël

    Cordialement,
    Teodora

    Votez! Appel à la contribution TechNet Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    dimanche 27 décembre 2015 15:45
    Modérateur
  • Merci pour votre réponse.

    Malheureusement je n'ai pas trouvé sur cette page comment exploiter le args pour lire les paramètres envoyés depuis une notification cliquée :(

    lundi 28 décembre 2015 08:32
  • Bonjour

    Avez-vous essayé d'accéder à la propriété detail.argument de votre objet args dans votre gestionnaire d'événement OnActivated :

    onActivated: function (args) {
    
      if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
          if (args.detail.arguments) {
              var launchString = args.detail.arguments;
              
          }
          else {
              console.log("Not launched from toast notification")
          }
      }
    }

    Normalement vous devriez pouvoir y récupérer la chaîne de caractère passée dans l'attribut "launch" de votre toast.

    lundi 28 décembre 2015 11:38
  • J'ai créée une notification qui me renvoie args.detail.kind, mais cette valeur vaut "undefined" :(
    lundi 28 décembre 2015 12:37
  • Avez-vous essayé les étapes suivantes :

    1. Création de la notification (toastXml étant un object XmlDocument)

    var launchAttribute = toastXml.createAttribute("launch");
    launchAttribute.value = "{\"ouverture\":\"mails\"}";
    var toastNode = toastXml.selectSingleNode("/toast");
    toastNode.attributes.setNamedItem(launchAttribute);
    

    2. Abonnement à l'événement Activated :

    WinJS.Application.addEventListener("activated", onActivatedHandler, false);

    3. Implémentation du gestionnaire d'événement Activated :

    function onActivatedHandler(args) {
        if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
            var launchString = args.detail.arguments;
    
            // Handle activation as required for your app, using the launch string.
        }
    }
    

    Vous trouverez une documentation MSDN détaillée ici . Si l'attribut "launch" de votre notification toast est bien spécifiée, vous devriez recevoir un événement "Activated" de type "launch".

    mardi 29 décembre 2015 18:23
  • Non ça ne fonctionne décidément pas :(

    Voici mon code :

    function notification(titre, texte1, texte2) {
        var notifications = Windows.UI.Notifications;
        var modele = notifications.ToastTemplateType.toastText04;
        var sourceXml = notifications.ToastNotificationManager.getTemplateContent(modele);
    
        var textes = sourceXml.getElementsByTagName("text");
        textes[0].appendChild(sourceXml.createTextNode(titre));
        textes[1].appendChild(sourceXml.createTextNode(texte1));
        textes[2].appendChild(sourceXml.createTextNode(texte2));
    
        //var images = sourceXml.getElementsByTagName("image");
        //images[0].setAttribute("src", "ms-appx:///images/accueil50.scale-100.png");
    
        var toastXML = sourceXml.selectSingleNode("/toast");
        var audio = sourceXml.createElement("audio");
        audio.setAttribute("src", "ms-winsoundevent:Notification.Mail");
        toastXML.appendChild(audio);
    
        // Pour ajouter des paramètres lors du clic sur la notification
        //toastXML.setAttribute("launch", '{"type":"toast","ouverture":"mails"}');
        var launchAttribute = sourceXml.createAttribute("launch");
        launchAttribute.value = "{\"ouverture\":\"mails\"}";
        var toastNode = sourceXml.selectSingleNode("/toast");
        toastNode.attributes.setNamedItem(launchAttribute);
    
        var notification = new notifications.ToastNotification(sourceXml);
        notifications.ToastNotificationManager.createToastNotifier().show(notification);
    }
    
    Windows.UI.WebUI.WebUIApplication.addEventListener("activated", onActivatedHandler, false);
    function onActivatedHandler(args) {
        notification(args.detail.kind, "", "");
        if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
            var launchString = args.detail.arguments;
            console.log(launchString);
            // Handle activation as required for your app, using the launch string.
        }
    }

    La fonction notification est appelé par une autre partie du code, pour me créer ma notification sur laquelle je clique.

    Si je laisse WinJS.Application.addEventListener() comme vous proposez, la fonction ne semble pas appelée lorsque je clique sur ma première notification. Par contre si je mets Windows.UI.WebUI.WebUIApplication.addEventListener() la fonction est appelée, une nouvelle notification s'affiche avec "undefined" comme contenu :(

    mardi 29 décembre 2015 19:54
  • Bonjour, 

    J'ai complété votre code avec ceci. 

    Globalement pas beaucoup de modifications, si ce n'est que la manière dont vous mettez l'attribut Launch : 

    function notification(titre, texte1, texte2) {
    	var notifications = Windows.UI.Notifications;
    
    	//Création du template du toast
    	var template = notifications.ToastTemplateType.toastText04;
    	var toastXml = notifications.ToastNotificationManager.getTemplateContent(template);
    
    	// Ajout des textes
    	var toastTextElements = toastXml.getElementsByTagName("text");
    	toastTextElements[0].appendChild(toastXml.createTextNode(titre));
    	toastTextElements[1].appendChild(toastXml.createTextNode(texte1));
    	toastTextElements[2].appendChild(toastXml.createTextNode(texte2));
    
    	//Ajout du son
    	var audio = toastXml.createElement("audio");
    	audio.setAttribute("src", "ms-winsoundevent:Notification.Mail");
    
    	toastNode.appendChild(audio);
    
    	//Mise en place des paramètres de lancement de l'appli
    	toastXml.selectSingleNode("/toast").setAttribute("launch", '{"type":"toast","ouverture":"mails"}');
    
    	//Création du toast en fonction du contenu XML
    	var toast = new notifications.ToastNotification(toastXml);
    	
    	// Envoi du Toast
    	var toastNotifier = notifications.ToastNotificationManager.createToastNotifier();
    	toastNotifier.show(toast);
    }
    
    Windows.UI.WebUI.WebUIApplication.addEventListener("activated", onActivatedHandler, false);
    
    function onActivatedHandler(args) {
        notification(args.detail.kind, "", "");
        if (args.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
            var launchString = args.detail.arguments;
            console.log(launchString);
            //Ici vous devriez avoir launchString = '{"type":"toast","ouverture":"mails"}'
        }
    }

    Cordialement, 


    Kevin BEAUGRAND, Modis FRANCE
    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont résolu votre problème.

    lundi 4 janvier 2016 15:01
  • Merci pour ta réponse.

    J'avais vu ce code sur un tuto, mais ça ne marche pas pour moi. J'ai toujours la notification qui affiche "undefined" :(

    vendredi 8 janvier 2016 15:40