{"id":18,"date":"2014-09-24T21:21:29","date_gmt":"2014-09-24T21:21:29","guid":{"rendered":"http:\/\/lalloue.fr\/blog\/?p=18"},"modified":"2015-02-04T16:02:49","modified_gmt":"2015-02-04T15:02:49","slug":"rate-my-app-notez-mon-application-universelle","status":"publish","type":"post","link":"http:\/\/lalloue.fr\/blog\/rate-my-app-notez-mon-application-universelle\/","title":{"rendered":"Rate My app : notez mon application universelle"},"content":{"rendered":"<p><em>Les notes et les commentaires de vos applications sont la cl\u00e9 de la r\u00e9ussite.<\/em><\/p>\n<p><em>Plus vous avez de bonnes notes, et plus vous avez de t\u00e9l\u00e9chargements, plus vous avez de t\u00e9l\u00e9chargements et plus vous gagnez d&#8217;argents&#8230;<\/em><br \/>\n<em> Donc il ne faut pas sous-estimer les notations des utilisateurs.<\/em><\/p>\n<p>Je vous propose ici, d&#8217;ajouter un rappel \u00e0 l&#8217;utilisateur pour qu&#8217;il note votre application universelle (Windows 8.1 et Windows Phone 8.1 WinRT).<\/p>\n<p>Pour les applications Windows Phone 8 Silverlight, il \u00e9tait facile d&#8217;ajouter ce type de rappel, Nokia nous avait concoct\u00e9 une solution cl\u00e9 en main : &#8220;RateMyApp&#8221; (<a href=\"http:\/\/developer.nokia.com\/community\/wiki\/Implement_%22Rate_My_App%22_in_under_60_seconds\">http:\\\\developer.nokia.com<\/a>).<\/p>\n<p>Mais pour les applications Universelles, rien de disponible, il faut donc se cr\u00e9er un composant sois-m\u00eame. Mais rassurez vous, rien de difficile !<\/p>\n<p><!--more--><\/p>\n<h3>Cr\u00e9ation<\/h3>\n<p>Tout d&#8217;abord, on va cr\u00e9er une classe qui va s&#8217;occuper de cr\u00e9er ce rappel sous forme de popup.<br \/>\nOn va appeler cette classe &#8220;RateMyAppHelper&#8221;.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nnamespace MyApp.Utils\r\n{\r\n    public class RateMyAppHelper\r\n    {\r\n\r\n    }\r\n}\r\n<\/pre>\n<h3>&#8220;LA&#8221; m\u00e9thode<\/h3>\n<p>Puis on va cr\u00e9er une m\u00e9thode qui, quand on l\u2019appellera, v\u00e9rifiera si l&#8217;on doit afficher la popup de demande pour noter l&#8217;application, et si oui, l&#8217;affichera.<br \/>\nTr\u00eave de bavardage, voici la fameuse m\u00e9thode, je l&#8217;expliquerai apr\u00e8s.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic static async void launchReview()\r\n{\r\n    int review = StorageHelper.GetSetting(&quot;nbLaunchApp&quot;, -1);\r\n\r\n    if (review == -1)\r\n    {\r\n        \/\/ C'est la premi\u00e8re fois, on initialise les valeurs\r\n        StorageHelper.StoreSetting(&quot;nbLaunchApp&quot;, 1, true);\r\n        StorageHelper.StoreSetting(&quot;isRated&quot;, false, true);\r\n    }\r\n    else\r\n    {\r\n        review = StorageHelper.GetSetting(&quot;nbLaunchApp&quot;);\r\n        bool check = StorageHelper.GetSetting(&quot;isRated&quot;);\r\n\r\n        review++;\r\n\r\n        \/\/ Afficher la popup de demande de note quand l'application s'est lanc\u00e9e 4, 7 et 10 fois.\r\n        if ((review == 4 || review == 7 || review % 10 == 0) &amp;amp;&amp;amp; check == false)\r\n        {\r\n            MessageDialog md = new MessageDialog(&quot;Donner votre avis et noter cette application nous aide \u00e0 l'am\u00e9liorer. Voulez-vous la noter?&quot;, &quot;Noter Mon Application&quot;);\r\n            bool? result = null;\r\n            md.Commands.Add(\r\n                new UICommand(&quot;Oui&quot;, new UICommandInvokedHandler((cmd) =&amp;gt; result = true)));\r\n            md.Commands.Add(\r\n                new UICommand(&quot;Annuler&quot;, new UICommandInvokedHandler((cmd) =&amp;gt; result = false)));\r\n\r\n            await md.ShowAsync();\r\n            if (result == true)\r\n            {\r\n                StorageHelper.StoreSetting(&quot;isRated&quot;, true, true);\r\n                #if WINDOWS_PHONE_APP\r\n                await Windows.System.Launcher.LaunchUriAsync(new Uri(WindowsPhoneAppUri));\r\n                #endif\r\n                #if WINDOWS_APP\r\n                await Windows.System.Launcher.LaunchUriAsync(new Uri(WindowsAppUri));\r\n                #endif\r\n            }\r\n        }\r\n        StorageHelper.StoreSetting(&quot;nbLaunchApp&quot;, review, true);\r\n    }\r\n}\r\n<\/pre>\n<p>Dans cette m\u00e9thode on a donc les \u00e9l\u00e9ments suivants :<\/p>\n<h3>L&#8217;initialisation des compteurs<\/h3>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nint review = StorageHelper.GetSetting(&quot;nbLaunchApp&quot;, -1);\r\n\r\nif (review == -1)\r\n{\r\n    \/\/ If first time, init values\r\n    StorageHelper.StoreSetting(&quot;nbLaunchApp&quot;, 1, true);\r\n    StorageHelper.StoreSetting(&quot;isRated&quot;, false, true);\r\n}\r\n<\/pre>\n<p>Ici j&#8217;utilise la classe &#8220;StorageHelper&#8221; pour m&#8217;aider \u00e0 g\u00e9rer le stockage des param\u00e8tres en local.<br \/>\nPour plus d&#8217;informations sur cette classe, je vous invite \u00e0 aller voir cet article :<\/p>\n<p>Je v\u00e9rifie donc ici que le param\u00e8tre\u00a0&#8220;nbLaunchApp&#8221; n&#8217;existe pas en \u00a0local (LocalSettings), et dans ce cas la je cr\u00e9e les 2 param\u00e8tres suivants :<\/p>\n<ul>\n<li>&#8220;nbLaunchApp&#8221; : ce compteur va nous permettre de savoir combien de fois l&#8217;application a \u00e9t\u00e9 lanc\u00e9e.<\/li>\n<li>&#8220;isRated&#8221; : cette variable indiquera si l&#8217;utilisateur a d\u00e9j\u00e0 not\u00e9 l&#8217;application.<\/li>\n<\/ul>\n<h3>V\u00e9rifications<\/h3>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nreview = StorageHelper.GetSetting(&quot;nbLaunchApp&quot;);\r\nbool check = StorageHelper.GetSetting(&quot;isRated&quot;);\r\n\r\nreview++;\r\n\r\nif ((review == 4 || review == 7 || review % 10 == 0) &amp;amp;&amp;amp; check == false)\r\n{\r\n}\r\n<\/pre>\n<p>Les lignes pr\u00e9c\u00e9dentes v\u00e9rifient que l&#8217;utilisateur n&#8217;a pas d\u00e9j\u00e0 not\u00e9 l&#8217;application : &#8220;isRated=true&#8221;, et si ce n&#8217;est pas le cas, affichera la popup de notation au 4, 7 et 10\u00e8me lancement de l&#8217;application.<\/p>\n<h3>L&#8217;affichage de la popup<\/h3>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nMessageDialog md = new MessageDialog(&quot;Donner votre avis et noter cette application nous aide \u00e0 l'am\u00e9liorer. Voulez-vous la noter?&quot;, &quot;Noter Mon Application&quot;);\r\nbool? result = null;\r\nmd.Commands.Add(\r\n    new UICommand(&quot;Oui&quot;, new UICommandInvokedHandler((cmd) =&amp;gt; result = true)));\r\nmd.Commands.Add(\r\n    new UICommand(&quot;Annuler&quot;, new UICommandInvokedHandler((cmd) =&amp;gt; result = false)));\r\n\r\nawait md.ShowAsync();\r\nif (result == true)\r\n{\r\n    StorageHelper.StoreSetting(&quot;isRated&quot;, true, true);\r\n    #if WINDOWS_PHONE_APP\r\n    await Windows.System.Launcher.LaunchUriAsync(new Uri(WindowsPhoneAppUri));\r\n    #endif\r\n    #if WINDOWS_APP\r\n    await Windows.System.Launcher.LaunchUriAsync(new Uri(WindowsAppUri));\r\n    #endif\r\n}\r\n<\/pre>\n<p>Pour lancer cette fameuse &#8220;popup&#8221; (qui n&#8217;en est pas vraiment une), on fait appel au composant &#8220;MessageDialog&#8221; qui permet d&#8217;afficher ce type de message aussi bien sur Windows Phone que sur Windows pour les applications universelles.<br \/>\nA l&#8217;ouverture de la popup on laisse alors l&#8217;utilisateur choisir s&#8217;il veut (OUI) ou non (Annuler) noter l&#8217;application.<br \/>\nEt si oui, on lance alors le chargement de la page de notation de l&#8217;application \u00e0 l&#8217;aide de la commande suivante :<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nawait Windows.System.Launcher.LaunchUriAsync(new Uri(myAppUri));\r\n<\/pre>\n<p>Pour les applications Windows Phone 8.1, la variable &#8220;WindowsPhoneAppUri&#8221; correspond \u00e0 ceci :<\/p>\n<ul>\n<li><strong>ms-windows-store:reviewapp?appid=&lt;appId&gt;<\/strong> : avec appId que vous pouvez retrouver sur le d\u00e9tail de votre app sur\u00a0<a href=\"dev.windowsphone.com\" target=\"_blank\">dev.windowsphone.com<\/a>.<\/li>\n<\/ul>\n<p>Pour les applications Windows 8.1, la variable &#8220;WindowsAppUri&#8221; correspond \u00e0 cela:<\/p>\n<ul>\n<li><strong>ms-windows-store:REVIEW?PFN=&lt;packageName&gt;<\/strong> : avec packageName correspondant au nom du package de l&#8217;application. Vous pouvez retrouver cet \u00e9l\u00e9ment dans le fichier &#8220;package.appxmanifest&#8221; de votre projet, onglet &#8220;packaging&#8221;.<\/li>\n<\/ul>\n<h3>L&#8217;appel de la popup<\/h3>\n<p>Il ne reste plus qu&#8217;a appeler cette popup pour l&#8217;afficher \u00e0 l&#8217;\u00e9cran.<br \/>\nComme la m\u00e9thode &#8220;launchReview&#8221; est &#8220;static&#8221;, cela nous permet de l&#8217;appeler n&#8217;importe o\u00f9 sans avoir \u00e0 instancier la class &#8220;RateMyAppHelper&#8221;.<\/p>\n<p>Il vous suffit donc de faire l&#8217;appel suivant et le tour est jou\u00e9:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nRateMyAppHelper.launchReview();\r\n<\/pre>\n<p>Attention, il n&#8217;est toute fois pas possible d&#8217;appeler cette m\u00e9thode dans le constructeur de votre &#8220;Main&#8221;. La popup ayant besoin de s\u2019ex\u00e9cuter sur le thread UI qui n&#8217;est alors pas encore disponible.<\/p>\n<p>Et voil\u00e0, c&#8217;\u00e9tait tout simple finalement !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les notes et les commentaires de vos applications sont la cl\u00e9 de la r\u00e9ussite. Plus vous avez de bonnes notes, et plus vous avez de t\u00e9l\u00e9chargements, plus vous avez de t\u00e9l\u00e9chargements et plus vous gagnez d&#8217;argents&#8230; Donc il ne faut pas sous-estimer les notations des utilisateurs. Je vous propose ici, d&#8217;ajouter un rappel \u00e0 l&#8217;utilisateur &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/lalloue.fr\/blog\/rate-my-app-notez-mon-application-universelle\/\" class=\"more-link\">Continuer la lecture <span class=\"screen-reader-text\"> \u00ab\u00a0Rate My app : notez mon application universelle\u00a0\u00bb<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[13,27,5,4],"tags":[6,7,8],"_links":{"self":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts\/18"}],"collection":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/comments?post=18"}],"version-history":[{"count":30,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts\/18\/revisions"}],"predecessor-version":[{"id":163,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/posts\/18\/revisions\/163"}],"wp:attachment":[{"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/media?parent=18"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/categories?post=18"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/lalloue.fr\/blog\/wp-json\/wp\/v2\/tags?post=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}