Objectius
- Analitzar la situació actual dels sistemes operatius mòbils per tal de crear
una aplicació multiplataforma.
- Escollir les millors eines de codi obert per crear l'aplicació de forma gratuïta.
- Desenvolupar l'aplicació de forma que sigui disponible tant per als mòbils com per
als equips mitjançant un navegador web.
- Publicar l'aplicació per tal de que sigui accessible per tots els dispositius.
Requeriments
- S'ha de realitzar una aplicació que estableixi connexions a qualsevol de les
bases de dades utilitzades a classe.
- La connexió es podrà fer utilitzant dues tecnologies: JDBC (utilitzant el driver) o
per
ORM (Hibernate).
- S'ha d'utilitzar la programació orientada a objectes i presentar el diagrama de
classes, etc…, en format UML.
- L’aplicació s’ha de desenvolupar implementant el paradigma MVC.
- L'aplicació ha d'estar adaptada al tipus de públic al qual va dirigit,
disseny centrat en l'usuari.
- Un manual tècnic, ha d’estar realitzat amb el Javadoc, Docbook o eines similars.
- S'ha de realitzar una guia de referència i guia ràpida de l’aplicació.
- La documentació s'ha d'entregar en format Wiki
Requeriments
- Qualsevol implementació web de l’aplicació ha d’estar adaptada a mòbils
(responsive) utilitzant llibreries, com per exemple Bootstrap o Jquery Mobile, per
tal de facilitar la implementació.
- Si l’aplicació té una part mòbil o es completament mòbil cal utilitzar les
plataformes explicades durant el curs, no es poden utilitzar d’altres per tal de
facilitar el suport del professor i la correcció.
- En cas d'aplicació mòbil Android sempre haureu d'utilitzar una arquitectura
clientservidor on el les dades estiguin al servidor i l'aplicació Android accedeixi
a les dades mitjançant un API tipus REST.
- S’ha de seguir una política acurada de seguretat (paraules de pas robustes i
xifrades, configuració de permisos de fitxers). No es donarà per vàlid cap projecte amb una
implementació de seguretat clarament deficient o on es mostri deixadesa per la qüestió de seguretat.
Què és aplicació Nativa?
- Són aplicacions que s'executen només en una plataforma específica.
- Requereixen de llenguatges i eines de desenvolupament respectives.
- Disposen del millor rendiment.
- Requereixen d'un nivell de programació avançat.
"More Platforms, More Problems."
Què és una aplicació Web Mòbil?
- Són pàgines web que són optimitzades per a ser visualitzades en les pantalles de
dispositius mòbils i per ser utilitzades en pantalles tàctils.
- L'usuari accedeix a l'aplicacions mitjançant el navegador web del seu
dispositiu, encara que en funció del dispositiu pot crear un enllaç directe en el seu escriptori
i accedir-hi com si es tractés de qualsevol altra applicació.
- L'aplicació es visualitzarà de forma gairebé idèntica en tots els dispositius,
depenent de la resolució de la pantalla.
- Les tecnologies utilitzades són les mateixes que per a un lloc web. És a dir,
HTML, CSS i JavaScript.
- No es distribueixen mitjançant llocs oficials d'Apple Store o Google Play
el que permet desfer-se de les taxes i limitacions imposades per aquestes.
- Funcionen princpalmente online però poden comptar amb memòria cau local i
emmagatzematge de dades local per al funcionament offline.
Característiques Bàsiques
Què és una aplicació híbrida?
- Són les aplicacions que s'executen en dispositius i sistemes
operatius mòbils (Android, iOS, Windows Phone etc.).
- Són creades amb tecnologies Web: HTML5, JavaScript i CSS
- S'executen sobre un contenidor natiu utilitzant el motor d'un
navegador mòbil per processar el HTML, JS i CSS de manera local (WebView)
- Tenen una capa intermèdia que habilita l'accés a capacitats
natives del sistema operatiu en el
que s'executen, com ara l'emmagatzematge, acceleròmetre, càmera, etc.
=
Comparació d'aplicacions Natives, Web i Híbrides
Quin tipus d'aplicació ens interessa més, Nativa o Híbrida?
Vistes totes les característiques anteriors, s'ha decidit programar una aplicació híbrida
ja que
és un tipus de programació complet i senzill d'utilitzar. A més el fet de programar un codi i
que ens funcioni per a totes les plataformes ens ha seduït molt.
Quines eines son necessàries per al desenvolupament híbrid?
AngularJS
- És un framework JavaScript de desenvolupament d'aplicacions web.
- Va ser creat al 2009 per Miško Hevery i Adam Abrons, treballadors de Google.
- Es podria dir que utilitza el patró MVC (Model-View-Controller), encara que
ells
mateixos creadors el defineixen com un MVW (Model-View-Whatever (whatever works for you)).
- Actualment és el segon projecte Open Source més popular.
Cordova
- És un altre framework creat al 2009 per Nitobi que actualment pertany a
Apache.
- Està format per un conjunt d'APIs que et donen accés a funcions del
dispositiu
als quals en teoria no tens accés nativament, coses com la càmera, l'acceleròmetre, etc.
- Ens permet crear aplicacions per a un munt de plataformes utilitzant un
mateix
llenguatge, fins i tot el mateix codi.
- Actualment, combinat amb AngularJS, disposa de més de 63 extensions.
Ionic
- També és un framework.
- És Open Source i s'utilitza per al desenvolupament de aplicacions mòbils.
- Utilitza tecnologies web i s'integra completament amb AngularJS.
- Va ser desenvolupat per l'empresa Driftyco al 2013 i actualment està en la
versió 1.5.0.
- Al 2014 se van crear més de 320 mil aplicacions amb Ionic (Més de 50 mil
aplicacions per mes).
Problemes
- Com construim una aplicació Adroid/iOS amb dades propies?
- És possible accedir a aquestes dades d'alguna forma des de la nostra aplicació
android?
- I si volem reconstruir el fron-end en uns quants anys?
- Com deixem treballar a altres empreses treballar amb les nostres dades?
Solució
Molt simple, hem de fer una API!
(Application Programming Interface)
Què és una API?
- Bàsicament és l'interfície que fa possible la cominicació entre la base de dades i
les aplicacions.
- Maneja els registres per tal de poder-los crear, editar o esborrar.
- Només se preocupa per les dades - no per la forma en la que es poden veure.
- Data in, data out:
- Json és el format de sortida de dades més utilitzada.
- Manté intactes els tipus de dades dels camps.
- També pots utilitzar el format XML si t'agrada escriure molt.
- Torna totes les dades com a strings.
Arquitectura d'una API
L'API s'implementa mitjançant l'arquitectura REST (Representational State Transfer) que és molt útil
per a construir una aplicació client/servidor.
Implementar una API és molt més senzill comparat amb altres alternatives com ara SOAP, CORBA, WSDL, ...
aprofitant totes les avantatges del protócolo HTTP.
Quines eines utilitzar per a fer una API?
Laravel
És un nou i poderós Framework PHP desenvolupat per Taylor Otwell, que promet portar al
llenguatge
PHP a un nou nivell.
En actualitat, Laravel és el framework php amb major acceptació per construir tant
aplicacions web com APIs de forma expressiva i elegant per la seva simplicitat en la sintaxi,
la seva elegància en l'escriptura, el seu motor de plantilles incorporat, la potència de composer
i de artisan pel seu maneig i els complements amb què compta.
Filosofia de Laravel
- La programació no ha de ser avorrida i repetitiva.
- Busca reduir sintaxi de codi.
- Es pot gaudir el que es fa sense eliminar funcionalitats en les nostres aplicacions
o sacrificar altres coses.
- Enfocat enormement a reutilitzar coneixement.
- Pren el millor d'altres Frameworks com Ruby on Rails, Sinatra, ASP .NET MVC i en una
gran part de Symfony.
- Adequat per a aplicacions de qualsevol mida.
- Enfocat en patrons de desenvolupament per a influenciar bones pràctiques (SOLID).
Per què Laravel?
- Disposa d'una comunitat activa que va creixent.
- El seu desenvolupament està actiu i garanteix correcció de
problemes de seguretat, millores, etc.
- Disposa d'una bona documentació i ben explicada.
Artisan
És un Client de consola que ens permet executar comandes propis del framework.
Composer
Composer és un nou gestor de paquets i de dependències de PHP. Això vol dir
que amb Composer podem descarregar del seus repositoris qualsevol de les llibreries o dependències amb
les versions que volguéssim en el nostre projecte i manejar-les en un sol lloc de manera ordenada.
Eloquent ORM (Object-Relational Mapping)
Laravel posseeix un sistema de mapeig de dades relacional anomenat Eloquent ORM,
que ens permet interactuar amb la nostra base de dades com si cada taula fos un Model,
respectant més fidelment la divisió MVC.
Base de dades
- Disposem d'una sola taula a on l'ID de cada formació té un doble proposit
ja que a més de servir com a identificador únic també ens serveix per a identificar el fills
que té gràcies al camp parentResourceId.
- Com ja ens podem imaginar, la taula disposa d'una relació Self-Referencing
One-to-Many a on el fill
pot tindre només un sol pare però el pare pot tindre més d'un fill.
Passos per a crear l'API amb Laravel
Passos per a crear l'API amb Laravel
- Quart pas, definim la ruta:
Route::resource('api/training_resource',Training_Resource_Controller');
- Cinquè pas, creem el controlador:
$ php artisan make:controller Training_Resource_Controller
- Per a estar segur de que tot està implementat de la forma correcta,
podem llistar totes les rutes habilitades per a la nostra aplicació.
$ php artisan route:list
Rutes de l'API
Connexió a l'API des de l'aplicació Ionic
-
Amb el següent codi realitzem una peticions GET d'HTTP a la nostra API creada anteriorment.
-
En aquest cas estem consultem tots els registres que tinguin com a pare (parentResourceId) l'identificador que ens interessa.
var Base_URL = 'http://178.62.75.243/api/training_resource/?training_resource_parentResourceId=';
$http.get(Base_URL + id).success(function (data, status, headers, config) {
$scope.loading = false;
if (data.length == 0) {
return;
} else {
$scope.last_item = last_item;
$scope.actual_item = id;
$scope.items = data;
}
})
Esquema General de la connexió a l'API
Desenvolupament
Totes les proves de desenvolupament s'han realitzat en local, cosa que ens ho ha fàcilitat l'Homestead.
Homestead
- És una forma de desenvolupar els sites laravel en local que en forma de màquina virtual Vagrant i
ens proporciona un entorn coherent i una sèrie d'eines de desenvolupament aprovades pel mateix Taylor Otwell, creador del laravel.
-
Actualment, les eines que utilitza el homestead son:
-
Nginx
-
MySQL/PostgreSQL
-
Beanstalk
-
Redis
-
Memcached
- i PHP 5.5.
-
Per a tindre una idea més general, podríem resumir Homestead com un Vagrant
preconfigurat que coincideix amb les eines i requeriments proporcionats per Forge.
Implementació
Després d'acabar la fase de desenvolupament, l'aplicació s'ha implementat/publicat a les següents plataformes.
Forge
És una forma d'allotjar els sites laravel en un entorn consistent, predictible i
flexible.
És un PAAS que gestiona i simplifica el desplegament del seu codi en fase d'implementació a
DigitalOcean, Linode, Amazon EC2 o Rackspace.
DigitalOcean
És un servei senzill i ràpid de cloud hosting, construït per a desenvolupadors.
Els clients poden crear un servidor del núvol en 55 segons i començar a fer plans a partir dels
5$ al mes disposant d'un sistema operatiu amb 512 MB de RAM, 20GB SSD, 1 CPU, i la transferència
d'1 TB. Amb un SLA (Service-level agreement) del 99,99%.
La interfície del tauler de control del DigitalOcean és senzill i intuïtiu, que
disposa d'una API per als usuaris més avançats. DigitalOcean utilitza la virtualització KVM i, a
més, allotja una biblioteca de tutorials molt útils que cobreixen la configuració del servidor i
la seua optimització.
Google Play Store
És una plataforma de distribució digital d'aplicacions mòbils per als
dispositius amb sistema operatiu Android, així com una botiga en línia desenvolupada i operada per Google.
Aquesta plataforma permet als usuaris navegar i descarregar aplicacions (desenvolupades
mitjançant Android SDK), jocs, música, llibres, revistes i pel·lícules.
També es poden adquirir dispositius mòbils com ordinadors Chromebook, telèfons intel·ligents Nexus, Google Chromecast, entre d'altres.
Com podem accedir a l'Aplicació?
- Part web de l'aplicació: De moment no disposem d'un domini, per tant per a accedir-hi ens cal una configuració mínima del fitxer /etc/hosts (LINUX).
178.62.75.243 api.ebre-format.com
178.62.75.243 ebre-format.com
Com podem accedir a l'Aplicació?
Requeriments Complerts
- S'ha de realitzar una aplicació que estableixi connexions a qualsevol de les
bases de dades utilitzades a classe.
- Fet. La nostra API amb Laravel estableix connexions amb el Mysql.
- La connexió es podrà fer utilitzant dues tecnologies: JDBC (utilitzant el driver) o
per ORM (Hibernate).
- Fet. Laravel implementa l'Eloquent ORM.
- S'ha d'utilitzar la programació orientada a objectes i presentar el diagrama de
classes, etc…, en format UML.
- Fet. Laravel és un framework que treballa amb php que esta orientat a objectes.
- L'aplicació s'ha de desenvolupar implementant el paradigma MVC.
- Fet. El paradigma MVC és una de les característiques més importants de Laravel.
Requeriments Complerts
- L'aplicació ha d'estar adaptada al tipus de públic al qual va dirigit,
disseny centrat en l'usuari.
- Fet. L'aplicació està adaptada per a tot public que l'interesi fer una formació professional.
- Un manual tècnic, ha d’estar realitzat amb el Javadoc, Docbook o eines similars.
- No. Dona error al generar la documentació.
- S'ha de realitzar una guia de referència i guia ràpida de l’aplicació.
- Fet. La guia ràpida i de refèrencia estàn realitzades a la wiki.
- La documentació s'ha d'entregar en format Wiki
- Qualsevol implementació web de l’aplicació ha d’estar adaptada a mòbils
(responsive) utilitzant llibreries, com per exemple Bootstrap o Jquery Mobile, per
tal de facilitar la implementació.
- Fet. S'ha implementat una plantilla Bootstrap i s'ha treballat amb Apache Cordova.
Requeriments
- Si l’aplicació té una part mòbil o es completament mòbil cal utilitzar les
plataformes explicades durant el curs, no es poden utilitzar d’altres per tal de
facilitar el suport del professor i la correcció.
- Fet. S'ha treballat amb eines com Laravel, Ionic, Apache Cordova, etc. explicades durant el curs.
- En cas d'aplicació mòbil Android sempre haureu d'utilitzar una arquitectura
clientservidor on el les dades estiguin al servidor i l'aplicació Android accedeixi
a les dades mitjançant un API tipus REST.
- Fet. S'ha implementat una API REST mitjançant Laravel.
- S’ha de seguir una política acurada de seguretat. No es donarà per vàlid cap projecte amb una
implementació de seguretat clarament deficient o on es mostri deixadesa per la qüestió de seguretat.
- Fet. Tots els accessos configurats amb contrasenyes segures, i APK generada amb certificats encriptats.
Conclusió
La conclusió final és que les aplicacións híbrides son una alternativa molt bona a les natives
ja que poden combinar la tecnologia web que es més fàcil d'implementar per a totes les plataformes i també poden utilitzar
la tecnologia nativa mitjançant Apache Cordova per a accedir a càmera, contactes, acceleròmetre, etc. Per tant, encara que no tinguin
el rendiment d'una aplicació nativa, no deixen de ser menys competents.
També hem pogut veure que fer una API amb Laravel pot arribar a ser una mica difícil al principi per falta d'experiència,
però una vegada acostumbrat, resulta molt ràpida i efectiva.
Per tant, a expectatives generals el projecte ha resultat ser positiu, ja que s'han adquirit coneixements
d'un munt de frameworks i s'ha pogut completar la majoria d'objectius i requeriments inicials. Obtenint com a resultat final una
aplicació híbrida fàcil de mantenir gràcies a les peticions a l'API REST implementada amb Laravel 5 ja que una vegada acabada,
només s'ha de gestionar des de la base de dades afegint o esborrant registres.
Enllaços d'interès.
- Documentació:
- API:
- Administrador:
- Pàgina web
- Google Play: