Xamarin: HockeyApp Custom Events

Hola a todos. Espero que les haya gustado esta serie de post sobre HockeyApp, en esta ocasión les comentare como realizar seguimientos de eventos personalizados desde HockeyApp. Para revisar los post anteriores les dejo los enlaces.

HockeyApp On – Application Insights Off

Xamarin: Integrando HockeyApp

Xamarin: Manejando FeedBack con HockeyApp

Los Customs Events son una funcionalidad en la cual nos permite ver en la plataforma y hacer seguimiento de dichos eventos. Algo así como cuantas veces se le ha echo click a un botón.

HockeyApp Custom Events gives you the ability to track specific user actions and help you better understand how users interact with your app.

Para poder implementarlo lo primero es activar el Preseason Program estas funcionalidades no vienen por defecto ya que están todavía en desarrollo. Teniendo habilitado el sistema nos mostrara un tab nuevo.

image

Para implementarlo debemos incluir una línea de código como se muestra a continuación.

button.Click += delegate
			{
				button.Text = string.Format("{0} clicks! ", count++);
				HockeyApp.Metrics.MetricsManager.TrackEvent("button.Click");
			};

Republicamos en HockeyApp y probamos. Revisamos la plataforma y confirmamos que se vean los datos.

image

Bueno, quería mostrarle esta parte. Espero que sea de agrado este post.

Sl2

Romny

Xamarin: Manejando FeedBack con HockeyApp

Hola a todos. seguimos compartiendo funcionalidades de HockeyApp.

HockeyApp On – Application Insights Off

Xamarin: Integrando HockeyApp

En este punto ya hemos creado una app, la hemos configurado, la hemos publicado y la hemos distribuido con HockeyApp.

Procedemos a revisar la funcionalidad de feedback, esta funcionalidad permite compartir con el dueño de la app, comentarios sobre la misma, si nos gusto o no o si tenemos bugs que reportar.

Abrimos la app

image

Nos dirigimos al botón de feedback y damos click. Se nos mostrara un formulario en donde colocaremos los comentarios que necesitemos enviar.

image

Diligenciamos y enviamos.

image

La siguiente vista se presenta después de enviar los datos.

image

Con esta acción nos llegara un email con la información del feedback. También en la web podemos ver esta información y responder el feedback.

image

Los feedback se puede manejar como bugs, para esto necesitamos configura la funcionalidad Bug Tracker, pero en esta ocasión no lo haremos.

image

Nos regresamos a la app y podremos ver la respuesta.

image

De esta forma podemos usar la funcionalidad de feedback de HockeyApp.

Espero les haya gustado.

Sl2

Romny

Xamarin: Integrando HockeyApp

Hola a todos.

Después de una breve introducción a HockeyApp, el cual pueden leerlo en este post.

HockeyApp On – Application Insights Off

Es hora de integrarlo con nuestra app, para esta prueba usaremos Xamarin Android.

Lo primero crearemos nuestra app de ejemplo.

image

Después procederemos a instalar el paquete de nuget HockeySDK.Xamarin, tener presente habilitar la opción de mirar las versiones previas.

image

Procedemos a realizar unos cambios en la interfaz grafica del Main, donde agregaremos unos botones, los cuales nos permitirán realizar un feedback de la app y de provocar un crash.

<Button
        android:id="@+id/MyButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/Hello" />
    <Button
        android:id="@+id/feedback_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/FeedBack" />
    <Button
        android:id="@+id/buttonCauseCrash"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/buttonCauseCrash" />
//

Para poder usar HockeyApp, necesitamos un App Id, el cual me lo genera la pagina web, pero previo a esto necito configurar el package name en mi app.

image

Vamos a HockeyApp y creamos una nueva app. Damos click en “New App”

image

Escogemos la opción manual.

image

Escogemos la plataforma de la app, que en este caso será Android.

image

Seleccionamos el Release Type, en este caso será beta.

image

Por ultimo le damos un titulo y el package name.

image

Después de crear la app, se mostrara el panel de administración.

image

Algo importante es que administran tantas versiones como se quieran de mi app.

Para realizar la implementación de HockeyApp necesitamos incluir las siguientes líneas de código, las cuales se cargaran en el método OnCreate, por ahora solo vamos a habilitar el seguimiento de los crash, seguimiento de feedback y registro de métricas.

image

Agregamos las siguientes líneas. Estas líneas lo que hacen es, hacer un feedback y provocar un crash.

var feedbackButton = FindViewById<Button>(Resource.Id.feedback_button);

			feedbackButton.Click += delegate
			{
				FeedbackManager.ShowFeedbackActivity(ApplicationContext);
			};

			FindViewById<Button>(Resource.Id.buttonCauseCrash).Click += delegate
			{
				// Throw a deliberate sample crash
				throw new HockeyAppSampleException("You intentionally caused a crash!");
			};
public class HockeyAppSampleException : System.Exception
		{
			public HockeyAppSampleException(string msg)
				: base(msg)
			{
			}
		}

Ahora lo que restas es probar en local y subir el apk a hockeyapp para distribuir a nuestros usuarios. En hockeyApp agregamos una nueva versión. Como nota el apk tiene que estar firmado.

image

Agregamos unas notas para la distribución.

image

Habilitamos las opciones de instalación y de restricciones en las descargas.

image

Por ultimo notificamos a nuestros usuarios.

image

Al final nos muestra un resumen de la versión que estamos cargando.

image

El siguiente es el panel administrativo de la versión que acabamos de subir.

image

Podemos instalar la app de dos formas, con el correo que nos llegara o ir directamente a la pagina en HockeyApp desde nuestros dispositivos.

Revisamos nuestro email para descargar la app.

image

image

Abrimos el enlace y descargamos la app.

image
Abrimos la app y probamos. Si realizan un crash y consultan la web,muy posiblemente no vean el crash, HockeyApp demora de 3 a 5 minutos en poder visualizarlo.

image

Provocamos un crash y la app se cierra, cuando volvemos a abrirla nos muestra el siguiente mensaje.

image

Después este paso ya podemos visualizar el crash en la consola y hacerle seguimiento.

image

Implementamos un botón de feedback, este nos permite escribirle al dueño de la app y dar sus comentarios y apreciaciones de la app. pero esto queda para que lo investiguen.

Para los que deseen ver el código se los deje en el siguiente link.

https://github.com/romnyd/AppHokeyDemo

Espero que les haya gustado este post

Sl2

Romny

HockeyApp On – Application Insights Off

Hola a todos.

Para los que no conocían “Application Insights” es un servicio de Azure con el cual se podía detectar y diagnosticar problemas de nuestras aplicaciones móviles, permitía realizar muchas cosas y era muy interesante por los servicios complementarios como el realizar el big data de nuestra app.

En marzo, salió un articulo donde se explica que a partir del 15 de abril se dejaba de aceptar nuevas aplicaciones móviles con Application Insights, que se recomendaba migrar a HockeyApp. Además a partir de junio 15 se dejaba de mostrar data en azure.

Transitioning Mobile Apps from Application Insights to HockeyApp

En ese tiempo HockeyApp, era una plataforma enfocada en distribuir y testear nuestras app, nuestro amigo walter ya había comentado sobre esto. Cómo probar y distribuir tus apps de manera sistemática: HockeyApp.

HockeyApp dejo de ser un servicio enfocado solo en distribuir y testear nuestras apps, para convertirse en el nuevo Application Insights. Las características que ofrecen hasta ahora son: Distribution, Crash Reports, Feedback, User Metrics, Teams, Enterprise.

Estas características son básicas, para tener las características mas interesantes debes ser parte del  “Preseason Program” donde tendremos Custom Events, Mobile Developer Apps, HockeySDK for tvOS, HockeySDK for UWP que es lo importante de HockeyApp, para aplicar este programa debes tener cuenta, el único dato que no se es cuanto se demoran en activarte estas opciones.

Las personas que ya estén usando Application Insights pueden revisar este articulo para migrar lo existente. Migrate your Application Insights mobile app to HockeyApp today

Bueno, este post fue mas informativo, el próximo será usando HockeyApp

Sl2

Romny

Consumiendo InternalEndPoint–WCF en Azure

Hola a todos.

Después de crear un wcf en Azure y de consumir un EndPoint interno que viaja por tcp, ahora procedemos a consumir dicho EndPoint interno desde una aplicación en un WebRole.

Para revisar el post anterior http://geeks.ms/rduarte/2016/03/13/comunicacin-interna-wcf-en-azure/

Lo primero es agregar una solución web de tipo Web Role, puede ser una aplicación tipo web forms o mvc.

image

Dicha aplicación le colocamos un EndPoint de entrada, para poder acceder a ella.

image

Creamos un botón con la siguiente funcionalidad.

protected void Button1_Click(object sender, EventArgs e)
		{
			try
			{
				var factory = new ChannelFactory&lt;WcfWorker.IWorker&gt;(new NetTcpBinding(SecurityMode.None));
				var current = RoleEnvironment.CurrentRoleInstance;
				var channel = factory.CreateChannel(GetRandomEndpoint());
				Label1.Text = channel.Say(&quot;Hola&quot;);
				
			}
			catch (Exception ex)
			{

				Label1.Text = ex.Message;
			}

			
		}
		private EndpointAddress GetRandomEndpoint()
		{
			var endpoints = RoleEnvironment.Roles[&quot;WcfWorker&quot;].Instances.Select(i =&gt; i.InstanceEndpoints[&quot;InternalRest&quot;].IPEndpoint).ToArray();
			var r = new Random(DateTime.Now.Millisecond);
			return new EndpointAddress(string.Format(&quot;net.tcp://{0}/InternalRest&quot;, endpoints[r.Next(endpoints.Count() - 1)]));
		}

Para esta parte es importante saber que servicio es el que esta expuesto para uso interno. Revisen CreateServiceHost();

Ahora publicamos y probamos.

image

Bueno, espero que sea de utilidad este post.

Sl2

Romny

Comunicación Interna – WCF en Azure

Hola a todos.

Muchas veces necesitamos hacer aplicaciones orientadas a servicios y además que estas se integren con otros sistemas de servicios como soa.

Para estos casos un simple rest no es factible debido a que se montara en Azure. Básicamente lo que se quiere es exponer un servicio wcf que ira por http pero la comunicación interna deberá ser por tcp por aquello de que tcp nos evita como dos capas del modelo osi.

Requerimientos

    Microsoft Azure SDK for .NET – 2.8.2

    Cuenta de Azure

    Creamos un proyecto Azure WorkerRole

    image

    image

    Después de creado el proyecto, damos en propiedades del role WcfWorker, vamos a extremos y añadimos los siguientes puntos.

    image

    Agregamos las siguientes referencias.

    image

    Agregamos una interface IService

    image

Agregamos una interface IWorker

image

Agregamos una clase Service que implemente las interfaces creadas.

image

Abrimos la clase WorkerRole.cs, creamos variables ServiceHost y añadimos el método CreateServiceHost para alojar su servicio WCF REST.

//Static channel factory for inter-role communication.
		private static ChannelFactory&lt;IWorker&gt; factory;

		//Service host varible.
		private ServiceHost serviceHost;


		private void CreateServiceHost()
		{
			//Url of service.
			Uri httpUri = new Uri(String.Format(&quot;http://{0}/{1}&quot;, RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[&quot;Rest&quot;].IPEndpoint.ToString(), &quot;Rest&quot;));

			//Assign url to service host.
			serviceHost = new ServiceHost(typeof(Service), httpUri);

			//Adding endpoint for REST service.
			ServiceEndpoint ep = serviceHost.AddServiceEndpoint(typeof(IService), new WebHttpBinding(), &quot;&quot;);

			//Adding behavior for REST service.
			ep.Behaviors.Add(new WebHttpBehavior() { HelpEnabled = true });


			//NetTcpBinding with no security.
			NetTcpBinding binding = new NetTcpBinding(SecurityMode.None);

			//Define an internal endpoint for inter-role traffic.
			RoleInstanceEndpoint internalEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[&quot;InternalRest&quot;];

			//Add internal endpoint.
			this.serviceHost.AddServiceEndpoint(typeof(IWorker), binding, String.Format(&quot;net.tcp://{0}/InternalRest&quot;, internalEndPoint.IPEndpoint));

			//Create channel factory for inter-role communication.
			WorkerRole.factory = new ChannelFactory&lt;IWorker&gt;(binding);

			//Open the service host  to start listening for messages.
			serviceHost.Open();

		}

Creamos el método NotifiyAllNodes para notificar en las instancias.

internal static void NotifyAllNodes(string message)
        {
            //Get the role id.
            string roleId = RoleEnvironment.CurrentRoleInstance.Id;


                //Gets a RoleInstance object representing the role instance in which this code is currently executing.
                var current = RoleEnvironment.CurrentRoleInstance;

                //Get all instances except the current.
                var endPoints = current.Role.Instances
                                .Where(instance =&gt; instance != current)
                                .Select(instance =&gt; instance.InstanceEndpoints[&quot;InternalRest&quot;]);
                foreach (var ep in endPoints)
                {
                    //Internal endpoint address.
                    EndpointAddress address = new EndpointAddress(String.Format(&quot;net.tcp://{0}/InternalRest&quot;, ep.IPEndpoint));

                    //Channel for communication.
                    IWorker client = WorkerRole.factory.CreateChannel(address);

                    //Update all the instances.
                    client.UpdateMessage(message, ep.RoleInstance.Id);
                }
         }

Llamar método CreateServiceHost en método OnStart() .

Procedemos a publicar.

image

Cuando publicamos tenemos una exception.

HTTP could not register URL http://+:80/Rest/. Your process does not have access rights to this namespace (see http://go.microsoft.com/fwlink/?LinkId=70353 for details).

La solución a este problema es averiguar el puerto que necesita para abrir y dar permiso al rol de trabajo para abrir el puerto apropiado.

Para esto creamos un proyecto de consola.

image

Vinculamos el ejecutable al proyecto WorkerRole y seleccionamos que se copie siempre.

image

En el archivo de definición agregamos las siguientes líneas.

&lt;Startup&gt;
			&lt;Task commandLine=&quot;PortDetect.exe&quot; executionContext=&quot;elevated&quot; taskType=&quot;simple&quot;&gt;
			&lt;/Task&gt;
		&lt;/Startup

Volvemos a publicar, Ahora se puede acceder al servicio rest que se aloja (en el puerto 80) en el WorkerRole y internamente se comunica por tcp.

Realizamos una prueba para ver que todo este bien.

image

Bueno, espero que sea de utilidad este post.

Sl2

Romny

Team Fundation Services – Crear Build

Hola a todos, seguimos con pequeños tips o ayudas a la hora de usar TFS. hoy vamos a crear un Build para nuestro proyecto. Esta labor se puede hacer desde Visual Studio o desde el Portal. Esta vez lo haremos desde el Portal.

Vamos al protal a la seccion de Build y damos agregar

image

se desplegara un formulario para escoger que tipo de solucion queremos hacer el build

image

en la siguiente escogemos nuestro repositorio, podemos usar aparte del sistema de repositorio de visual studio, podemos usar github,subversion, o cualquier sistema externo que utilice gitbug como bitbucket y damos crear.

image

Para este caso escogemos que se desea compilar una solución de visual studio y que limpie la solución y restaure paquetes cuando se ejecute. Ademas podemos configurar mas opciones, pueden revisar.

image

Lo ultimo es guardar y asignarle un nombre.

image

algo importante que deben saber es que la build o compilación se ejcutara automaticamente cuando subimos un cambio al repositorio de codigo.

image

Con esto ya pueden probar en sus implementaciones, espero les agrade y les sirva.

Sl2

Romny

Team Fundation Services–Politicas de Check-in

Hola a todos.

Dentro de mis nuevas actividades de trabajo esta el de administrar el Team Fundation Services de ahora en adelante TFS. Algo importante cuando trabajamos con TFS es crear politicas para hacer el trabajo de desarrollo mas facil.

La politica que creo es basica dentro de un esquema colaborativo es el de siempre pedir una descripción y de un elemeto relacionado de los Work Items al momento de hacer commit.

Para lograr esto en TFS es desde nuestro Visual Studio, nos conectamos el Team Project y vamos a la opcion de configuración.

image

Luego vamos a Control de codigo fuente

image

Luego vamos a Directiva de Protección y damos click en Agregar

image

Agregamos la Directiva de comentarios del conjunto de cambios y Elementos de trabajo.

image

Quedara de la siguiente forma.

image

Con esto ya quedan la politicas activadas, apenas intente subir cambios, las politicas se veran reflejadas.

image

Espero que este post les sirva.

Sl2

Romny

Parse, Terminado el Servicio.

Articulo Restablecido.

Hola a todos. Prosiguiendo con el blog, hoy quiero comentarles de un anuncio sobre Parse.

Este blog realizo dos breves post sobre Parse, un BaaS enfocado para aplicaciones moviles.

BaaS: Parse

Consumiendo Parse desde .NET

A mi parecer, me parecia un servicio bueno, tenia varios modulos enfocado para aplicaciones moviles, lo use en mi trabajo, y le tuve cierto aprecio. Muchos puritanos diran que como no tenia una empresa grande que los respaldara como otros productos en el mercado, ese era su destino, puede que si, pero no por eso le quitaremos que era una buena herramienta.

A todas las personas que lo usaban les llego un correo con la noticia, tambien la pueden leer en el portal, basicamente lo que dicen es el servicio estaba habilitado hasta enero 28 del 2017. Considero que es un buen tiempo para hacer las migraciones requeridas en los productos ya echos.

Tambien ofrecen una herramienta de migración y su servidor lo liberan bajo open source.

Asi que ha trabajar en sus respetivas migraciones.

 

Link del post:

Moving On

Sl2

Romny

Parse, Terminado el Servicio.

Hola a todos. Prosiguiendo con el blog, hoy quiero comentarles de un anuncio sobre Parse.

Este blog realizo dos breves post sobre Parse, un BaaS enfocado para aplicaciones moviles.

A mi parecer, me parecia un servicio bueno, tenia varios modulos enfocado para aplicaciones moviles, lo use en mi trabajo, y le tuve cierto aprecio. Muchos puritanos diran que como no tenia una empresa grande que los respaldara como otros productos en el mercado, ese era su destino, puede que si, pero no por eso le quitaremos que era una buena herramienta.

A todas las personas que lo usaban les llego un correo con la noticia, tambien la pueden leer en el portal, basicamente lo que dicen es el servicio estaba habilitado hasta enero 28 del 2017. Considero que es un buen tiempo para hacer las migraciones requeridas en los productos ya echos.

Tambien ofrecen una herramienta de migración y su servidor lo liberan bajo open source.

Asi que ha trabajar en sus respetivas migraciones.

 

Link del post:

Moving On

Sl2

Romny