domingo, 21 de abril de 2013

L&A SISTEMAS, participando del Windows Appceleration Program



 Como ustedes saben, L&A SISTEMAS fue seleccionada por Microsoft entre más de 50 proyectos de empresas que se postularon para el Windows Appceleration Program. El Windows Appceleration Program está dirigido a una cantidad reducida de proyectos que fueron seleccionados entre las empresas de Argentina y Uruguay que se postularon. Las mismas, presenciaron la apertura oficial dónde oradores de primera como Miguel Angel Saez y Ariel Schapiro  expusieron las oportunidades del mercado para todos los presentes. CMT, la aplicación para llevar mantenimientos de vehículos de L&A, fue elegida para participar a partir del 10 de abril de la experiencia de aceleración en plataformas Windows 8 y/o la plataforma móvil de más rápido crecimiento de América Látina, Windows Phone, junto con Microsoft. Para L&A, el objetivo de formar parte del programa está en llevar adelante la adaptación del producto para sincronizar los datos entre diferentes dispositivos que utilicen la aplicación. L&A será acompañada de manera personal en el ciclo de vida completo de una aplicación con los recursos profesionales, capacitación y herramientas, con un enfoque de colaboración a largo plazo para trabajar en garantizar los mejores resultados de calidad, los cuales serán avalados mediante el logo de participación en el programa y mediante la difusión en los sitios de Microsoft. Windows 8 y Windows Phone juntos permiten llegar a un amplio espectro de dispositivos, no solo cubriendo Smartphones, sino también PCs de escritorio, laptops y tabletas, facilitando una mayor cantidad de descargas. Para lograr dicho resultado, L&A deberá analizar y cumplir con las generalidades y requisitos del programa. Entre ellas, contar con un proyecto para llevar a cabo durante el programa, destinar las horas necesarias para participar de los entrenamientos y el desarrollo del proyecto y pasar por las instancias de certificación y publicación de la aplicación. “Agradecemos a Microsoft  por habernos seleccionado  y que nos haya elegido nuevamente por presentar un proyecto innovador”, dijo Leonardo Borzillo, socio fundador de L&A SISTEMAS. Y agregó: “Nuestro objetivo a cumplir, es sincronizar la información entre dispositivos que utilicen nuestra aplicación Car Maintenance Tracker” en el lanzamiento del programa.

 Más información del programa en http://msdn.microsoft.com/es-ar/xx187195

martes, 9 de abril de 2013

Error en CurrentApp.LoadListingInformationAsync() HRESULT: 0x801900CC

Amigos,

Como mucho de ustedes ya sabrán, en los últimos días hemos estado bastante ocupados tratando de certificar una aplicación que tenemos pronta hace ya un tiempo, sin éxito.

Luego de un ida y vuelta con los técnicos que certifican las aplicaciones del Windows Store, pudimos obtener el error que nos estaba impidiendo certificar nuestra aplicación.

El error surge cuando un intenta llamar a la función CurrentApp.LoadListingInformationAsync() sin estar conectado a Internet.

Es necesario controlar las excepciones de red lanzadas por CurrentApp.LoadListingInformationAsync, así la aplicación no se bloqueará cuando pase por el proceso de certificación y para que no se bloquee cuando un usuario intenta ejecutarla sin conectividad con el Store.

Si por algún motivo, no se obtener la información devuelta por la función anteriormente mencionada, nuestra aplicación aún debería poder funcionar en modo de prueba (trial), desactivando todas las opciones de compra dentro de la aplicación, ya que las mismas obviamente no se pueden completar sin estar conectados.

Los detalles de dicha implementación dependerán de su aplicación y de como tiene implementadas las compras en la misma.

Si caducó el periodo de prueba, la aplicación no se inicia, por lo que no es necesario pensar la lógica para ese caso en particular

Finalmente quiero comentarles que el ejemplo que uno se baja de Microsoft - Trial app and in-app purchase sample - carece de estos chequeos que mencionaba anteriormente
por lo que he decidido compartir con ustedes un código un poco mas completo (por lo menos en lo que tiene que ver con aplicaciones de prueba)

  935 private static async Task<bool> ChequearEstadoDeLaLicencia()
  936   {
  937       if (CurrentApp.LicenseInformation == null)
  938       {
  939           return false;
  940       }
  941 
  942       var hayInternet = HayConexionInternet();
  943 
  944       if (CurrentApp.LicenseInformation.IsActive)
  945       {
  946           try
  947           {
  948               if (hayInternet)
  949               {
  950                   var listing = await CurrentApp.LoadListingInformationAsync();
  951                   App.LicenciaPrecio = listing.FormattedPrice;
  952               }
  953           }
  954           catch (Exception ex)
  955           {
  956               MetroEventSource.Log.Error("MainPage.Xaml: Error en CurrentApp.LoadListingInformationAsync(). Detalle:" + ex.Message);
  957               hayInternet = false;
  958           }
  959 
  960           if (CurrentApp.LicenseInformation.IsTrial)
  961           {
  962               var licenciaDiasRestantesDeTrial = (CurrentApp.LicenseInformation.ExpirationDate - DateTime.Now).Days;
  963 
  964               if (licenciaDiasRestantesDeTrial <= 0)
  965               {
  966                   var apretoComprar = false;
  967                   var messageDialog = new MessageDialog("Your_trial_has_expired__Do_you_want_to_purchase_full_license");
  968                   if (hayInternet)
  969                   {
  970                       messageDialog.Commands.Add(new UICommand("Purchase", (command) =>; apretoComprar = true));   
  971                   }
  972                   messageDialog.Commands.Add(new UICommand("Close", (command) =>; { }));
  973                   await messageDialog.ShowAsync();
  974                   if (apretoComprar)
  975                   {
  976                       await ConvertirTrialToFull();
  977                   }
  978 
  979                   return false;
  980               }
  981               else
  982               {
  983                   var apretoComprar = false;
  984                   var messageDialog =
  985                       new MessageDialog(
  986                           "Thank_you_for_evaluating_Our_App__Your_license_will_expire_in"
  987                           + licenciaDiasRestantesDeTrial + " days." + Environment.NewLine
  988                           + "Do_you_want_to_purchase_full_license");
  989 
  990                   if (hayInternet)
  991                   {
  992                       messageDialog.Commands.Add(new UICommand("Purchase"), (command) =>; { apretoComprar = true; }));
  993                   }
  994                   messageDialog.Commands.Add(new UICommand("Continue_using_trial", (command) =>; { }));
  995                   await messageDialog.ShowAsync();
  996                   if (apretoComprar)
  997                   {
  998                       await ConvertirTrialToFull();
  999                       return false;
 1000                   }
 1001               }
 1002 
 1003           }
 1004           else
 1005           {
 1006               // Show the features that are available only with a full license.
 1007               return true;
 1008           }
 1009       }
 1010       else
 1011       {
 1012           // A license is inactive only when there's an error.
 1013           var messageDialog = new MessageDialog("Could_not_find_any_valid_license_for_Our_App__The_application_will_be_closed");
 1014           messageDialog.Commands.Add(new UICommand("Ok", (command) => { }));
 1015           await messageDialog.ShowAsync();
 1016           return false;
 1017       }
 1018 
 1019       return true;
 1020   }
 1021 
 1022 
 1023   public static bool HayConexionInternet()
 1024   {
 1025       ConnectionProfile connections = NetworkInformation.GetInternetConnectionProfile();
 1026       bool internet = connections != null && connections.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess;
 1027       return internet;
 1028   }
 
 
Espero les sea de utilidad, hasta la próxima!