Pregunta Xamarin: aplicación de alarma simple plataforma cruzada


Objetivo: Desarrollar una aplicación móvil multiplataforma usando el estudio Xamarin que muestra un mensaje en cierta fecha y hora.

Preguntas:

a) Qué cosas compartiré / podré compartir entre las plataformas si deseo desarrollar tal aplicación. (Se apreciará un diseño estructural con posibles clases)

b) ¿Es mejor usar un temporizador o un AlarmManager?

c) ¿Qué tipo de proyecto se debe crear para el Proyecto central compartido (Biblioteca de clases portátil / Biblioteca específica de plataforma / Proyecto de C # simple)?

Gracias por adelantado.


11
2018-03-25 15:13


origen


Respuestas:


Me he centrado en cómo compartir mejor el código entre Android e iOS en las últimas semanas y aquí están mis sugerencias basadas en mis experiencias:

a) En general, puede compartir cualquier cosa entre plataformas que no sea específica de la plataforma.

Tiendo a usar presentadores o mediadores que tienen una referencia a una vista definida por una interfaz. Por ejemplo, si tuviera una vista de inicio de sesión, haría que mi iOS UIViewController y mi actividad de Android implementaran una interfaz ILoginView. Esta interfaz tendría lo siguiente definido:

  • Getters para nombre de usuario y contraseña
  • Un evento llamado LoginSubmitted
  • Dos métodos ShowLoginFailed y GoNextScreen

El presentador / mediador será responsable de escuchar el inicio de sesión que se envía, obtener el nombre de usuario / contraseña y pasar esas cosas a una llamada o comando de servicio. Siempre que el mediador recibiera los resultados del comando / servicio, sería responsable de invocar ShowLoginFailed o GoNextScreen.

También utilicé interfaces para definir mi Administrador de SQLite (https://github.com/praeclarum/sqlite-net/tree/master/src), o un delegado que es responsable de realizar la llamada de servicio API web real. Descubrí que tenía que hacer esto porque hay una compilación específica de la plataforma que debe suceder para el administrador de SQLite y RestSharp.

Para resumir, las interfaces son su amiga, especialmente cuando las combina con algún tipo de sistema de Inyección de Dependencia.

b) Si desea que su usuario reciba una alarma cuando su dispositivo esté en modo de suspensión o cuando esté en otra aplicación, usaría AlarmManager para Android y LocalNotification para iOS.

c) Se puede tipo de uso de PCLs con Xamarin.Android y Xamarin.iOS. El problema es que las PCL aún no son 100% compatibles. Sin embargo, hay algunos ajustes que puede realizar en su entorno de desarrollo que, con suerte, lo llevarán a donde quiere:

  • Cambie al canal Beta o Alpha en Xamarin Studio: "Xamarin Studio" -> "Buscar actualizaciones" -> Cambie el canal en el cuadro combinado en la esquina superior izquierda del cuadro de diálogo que aparece -> Seleccione "Reiniciar e instalar actualizaciones" " Esto le permitirá a los proyectos Android e iOS poder vincularse a la misma PCL en la misma solución.

  • Después de actualizar XS, cierre XS y siga las instrucciones en esta publicación para modificar su instalación Mono para que las PCL compilen correctamente: MonoDevelop: ¿es posible cambiar el compilador de PCL?

  • Para que la sugerencia del código sea más agradable dentro de su proyecto PCL, necesitará tomar el archivo mscorlib.dll de su instalación Mono y colocarlo en una carpeta DLL en su directorio de proyecto y agregarle una referencia en su proyecto PCL. Puede encontrar el dll aquí: /Library/Frameworks/Mono.framework/Versions/3.0.10/lib/mono/4.0

Una vez que hayas hecho todo eso, deberías estar en buena forma para que tu PCL funcione. Descubrí que valió la pena el trabajo adicional porque ahora puedo crear un proyecto de prueba de unidad en XS, vincularlo a la PCL y ejecutar pruebas desde el IDE. Además, puedo usar libs como Moq para burlar mis vistas y hacer pruebas de integración.

Xamarin está prometiendo que el soporte completo de PCL llegará "pronto" y no tendremos que molestarnos con estos hacks.


17
2018-05-11 12:51



Xamarin, a partir de ahora, puede ayudarte a compartir la lógica de negocios. es decir, una base de datos, un servicio web o cualquier código que no dependa de la plataforma en la que esté trabajando. Usted codifica en c #. De modo que tiene acceso a las funciones básicas de c #, o para ser verbalmente correctas, las características monoespecíficas que puede utilizar.

Como conclusión, lo que puedo resumir es: puede crear un proyecto separado para la parte final de su trabajo, y un proyecto separado para la interfaz de usuario y su código. (ambos, obviamente, están en el mismo espacio de trabajo). Luego puede usar este tipo de proyecto central de back-end en una aplicación IOS, una aplicación de Android y de manera predeterminada en una aplicación WP8 (incluso una aplicación Mac y Windows). De modo que, salvo el Core, debe esforzarse un poco más en la codificación por separado para todas las plataformas con respecto a la IU, sus manejadores y los códigos detrás.


2
2018-05-06 10:49



Sé que esta es una publicación antigua, pero cualquiera que quiera hacer esto hoy en día definitivamente debería mirar a Xamarin. Los formularios que salieron a principios de este año son un conjunto de controles realmente cruzados para que solo cree una UI


2
2017-11-14 16:47



Vea esta guía del equipo de Xamarin para comenzar: http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications

Esta es la cuarta parte que aborda su pregunta en la parte C. http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/part_4_-_platform_divergence_abstraction_divergent_implementation

Además, el panel de instrumentos / pantalla principal de Xamarin Studio (?) En el lado derecho tiene 2 aplicaciones que puede descargar que funcionan por completo y se dirigen a 2-3 plataformas para que pueda ver cómo estructuran la aplicación al compartir el código entre proyectos.

Hay muchas más guías y tutoriales en su sitio que no toman mucho tiempo para leer y practicar.


1
2018-03-25 17:20