Desarrollo móvil multiplataforma – ¿Y lo nativo? – ¿Y el performance?



Desarrollo móvil multiplataforma – ¿Y lo nativo? – ¿Y el performance?

0 0


slides-ninja-code-party

Slides de la presentación de Ionic framework

On Github bul-ikana / slides-ninja-code-party

Desarrollo móvil multiplataforma

Hugo Aguirre Martínez / @bul_ikana

Historia triste...

¿Y lo nativo?

Problemas nativos

  • Dominio sobre varios lenguajes y tecnologías
  • Bases de código separadas
  • Desarrollo lento y caro

Más plataformas. Más problemas.

¿Es necesaria tanta complejidad?

Apps híbridas

  • HTML5 con comportamiento nativo
  • Web encapsulado en una capa nativa
  • Acceso directo a APIs nativas
  • Ambiente de desarrollo web familiar
  • Una sola base de código

¿Y el performance?

Los teléfonos ya no son lentos

Año Dispositivo Procesador RAM 2007 iPhone 620 MHz 128 MB 2010 iPhone 4 1 GHz 512 MB 2015 iPhone 6 1.4 GHz dual-core 1 GB

Los estándares web van mejorando!

  • caniuse.com se ve cada día mejor
  • El navegador de Android ahora se basa en Chromium
  • Los usuarios mantienen actualizados sus dispositivos

Nuevas y hermosas tecnologías

Ionic framework

Enfoque nativo

  • Basado en SDKs Nativos
  • Constriudo para trabajar con Cordova

Obsesionado con el rendimiento

  • Animaciones aceleradas por hardware
  • Manipulación mínima del DOM
  • Remueve el delay para tap de 300ms

CSS común y corriente

  • Sistema visual congruente
  • Limpio y simple
  • Fácil de personalizar
  • CSS independiente de JS
  • Sass

¿Y Cómo funciona?

Tu app Ionic AngularJS Webview (Cordova) SDK Nativo

UI

Listas

  • Directiva de Angular
  • Interacción nativa
  • Reagrupar
  • Borrar
<ion-list>

  <ion-item ng-repeat="item in items" item="item">
    List Item {{ item.id }}
  </ion-item>

</ion-list>

Collection Repeat

  • Similar a ng-repeat de Angular
  • Inspirado por UICollectionView de iOS
  • Scroll para miles de elementos
  • Solo renderea los elementos visibles
  • Scroll suave
<div class="list">
  <div collection-repeat="c in contacts">
    <h2>{{ c.name }}</h2>
    <p>{{ c.email }}</p>
  </div>
</div>

Navegación

  • Usa AngularUI Router
  • Muestra el botón Back siempre que sea posible
  • Transiciónes siguen la dirección de la navegación
  • Funciona con el boton Atrás de Android
<ion-nav-bar>
  <ion-nav-back-button>
    Back
  </ion-nav-back-button>
</ion-nav-bar>

<ion-nav-view></ion-nav-view>

Tabs

  • Vistas anidadas
  • Cada tab tiene su historial
  • Estados abstractos AngularUI Router
<ion-tabs>

  <ion-tab title="Home" icon="ion-home">
    <ion-nav-view name="home"></ion-nav-view>
  </ion-tab>

  <ion-tab title="About" icon="ion-information">
    <ion-nav-view name="about"></ion-nav-view>
  </ion-tab>

  <ion-tab title="Contact" icon="ion-ios7-world">
    <ion-nav-view name="contact"></ion-nav-view>
  </ion-tab>

</ion-tabs>

Menú Lateral

<ion-side-menus>

  <ion-side-menu-content>

    <ion-nav-view name="menuContent"></ion-nav-view>

  </ion-side-menu-content>

  <ion-side-menu side="left">

    <ion-header-bar class="bar-assertive">
      <h1 class="title">Left Menu</h1>
    </ion-header-bar>

    <ion-content>
      ...
    </ion-content>

  </ion-side-menu>

</ion-side-menus>

Slide Box

<ion-slide-box on-slide-changed="change(index)">
  <ion-slide>
    Slide 1
  </ion-slide>
  <ion-slide>
    Slide 2
  </ion-slide>
  <ion-slide>
    Slide 3
  </ion-slide>
</ion-slide-box>

Action Sheet

  • Servicio de Angular
  • Se injecta a los controladores
$ionicActionSheet.show({
  titleText: 'Action Sheet Example',
  buttons: [
    { text: 'Share' },
    { text: 'Move' },
  ],
  destructiveText: 'Delete',
  cancelText: 'Cancel',
  buttonClicked: function(index) {
    console.log('BUTTON CLICKED', index);
    return true;
  }
});

Popover

  • AngularJS Service
  • Template externa o inline
$ionicPopover.fromTemplateUrl('popover.html',
  function(popover) {
    $scope.popover = popover;
  }
);
<ion-popover-view>
  <ion-header-bar>
    <h1 class="title">My Popover Title</h1>
  </ion-header-bar>
  <ion-content class="padding">
    Hello!
  </ion-content>
</ion-popover-view>

Modal

  • Servicio de AngularJS
  • Template inline o externa
$ionicModal.fromTemplateUrl('modal.html', {
  scope: $scope
}).then(function(modal) {
  $scope.modal = modal;
});

Pull to Refresh

<ion-refresher on-refresh="doRefresh()" pulling-text="Pull to refresh..." refreshing-text="Refreshing!" refreshing-icon="ion-loading-c">
</ion-refresher>
                          $ npm install -g ionic

                           _             _
                          (_)           (_)
                           _  ___  _ __  _  ___
                          | |/ _ \| '_ \| |/ __|
                          | | (_) | | | | | (__
                          |_|\___/|_| |_|_|\___|  CLI
  • Comenzar proyecto sobre templates
  • Boilerplate listo
  • Herramientas listas: Gulp, Sass, Bower, etc.
  • Inicia server local
  • Actualiza ionic
  • Construye y corre apps nativas

Ionic CLI

$ npm install -g ionic cordova
$ ionic start myapp sidemenu
$ cd myapp
$ ionic serve

</html>

@bul_ikana

hugo.mecabotware.com/slides/ninja-code-party

Desarrollo móvil multiplataforma Hugo Aguirre Martínez / @bul_ikana