1 of 61

L’avenir du mobile sera hybride !

@loicknuchel

2 of 61

Loïc Knuchel

Développeur web freelance

Fondateur de

Fan de depuis l’alpha ;)

3 of 61

L’histoire du mobile...

4 of 61

Juin 2007

Sortie de l’iPhone

5 of 61

Septembre 2008

Sortie d’Android

6 of 61

Fonctionnalité commune

Le navigateur

La webview

7 of 61

Idée

Coder des applications mobiles entièrement dans la webview.

Avantages :

  • Technologies et environnement connus
  • Cross-platform

8 of 61

Mars 2009

Lancement PhoneGap par Nitobi

“PhoneGap is a development framework that lets HTML and JavaScript developers build native mobile phone apps that take advantage of native capabilities of the phone. And it will run on iPhone, Android and BlackBerry, and eventually it will run on other platforms.”

- Andre Charland, CEO of Nitobi

9 of 61

Oups...

10 of 61

Oups...

Applications moches et lentes :(

  • Pas de look natif (ou simplement correct)
  • Mauvais support des standards web par les webview
  • Téléphones peu puissants

11 of 61

Octobre 2011

Rachat de Nitobi par Adobe.

Don de PhoneGap à la fondation Apache sous le nom de Cordova.

12 of 61

Aujourd’hui ?

13 of 61

Téléphone puissants

Année

Téléphone

Processeur

RAM

2007

iPhone

620 MHz

128 MB

2010

iPhone 4

1 GHz

512 MB

2015

iPhone 6

1.4 GHz dual-core

1 GB

14 of 61

Amélioration des Webview

  • Implémentation des standards

  • Mises à jour automatiques des webview

15 of 61

Parc de téléphones récent

16 of 61

Parc de téléphones récent

17 of 61

18 of 61

Novembre 2013

19 of 61

20 of 61

21 of 61

22 of 61

Ionic framework

  • Novembre 2013 : Version Alpha
  • Mars 2014 : Version Beta
  • Mai 2015 : Version 1.0
  • Aujourd’hui : Version 1.1.0

23 of 61

Framework UI spécialisé mobile et basé sur Angular

  • Styles
  • Directives
  • Outils

24 of 61

Stack technologique

Natif

Web

Téléphone & APIs natives

Cordova : webview +

JavaScript bridges

AngularJS

Ionic

Votre application

25 of 61

Hybride vs Natif

26 of 61

Les promesses du natif

Une expérience utilisateur au top !

Des millions d’utilisateurs (et de $$$)

27 of 61

Réalité :

Le natif coûte cher

$$$

28 of 61

Réalité :

Le natif coûte cher

$$$

Une bonne UX/UI coûte très cher

$$$$$$$$$$$$$$$

29 of 61

Réalité :

Le natif coûte cher

$$$

Une bonne UX/UI coûte très cher

$$$$$$$$$$$$$$$

Le multi-platforme coûte très très cher

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

30 of 61

Réalité :

Le natif coûte cher

$$$

Une bonne UX/UI coûte très cher

$$$$$$$$$$$$$$$

Le multi-platforme coûte très très cher

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

31 of 61

Les promesses de l’hybride

Du cross-platform easyyyyyy

(iOS, Android, WindowsPhone, Blackberry, Symbian, Bada, WebOS, FirefoxOS…)

Les mêmes possibilités que le natif !

Vous connaissez et utilisez déjà les technos web (HTML, CSS, JavaScript)

Pas cher :)

32 of 61

Réalité :

33 of 61

Réalité :

34 of 61

Osef en fait !

Ce sont les développeurs qui font une bonne application ! Pas une techno !

Quel objectif ? Avec quels moyens ?

STOP au nombrilisme technique !

Une application est bien plus que du code !

Service / UX / Valeur perçue / Design ...

35 of 61

Natif : meilleure qualité

Hybride : meilleur qualité/prix

36 of 61

Ionic toolset

37 of 61

Ionic CLI

Cordova CLI wrapper

+

A lot of nice features !

38 of 61

Workflow

$ ionic start myApp blank --sass

$ cd myApp

$ ionic serve --lab

$ ionic platform add android

$ ionic resources

$ ionic run -l

39 of 61

Livereload

  • Navigateur

$ ionic serve [--lab]

  • Téléphone

$ ionic run -l [-c -s]

40 of 61

$ ionic serve --lab

41 of 61

Icon & Splashscreen

$ ionic resources

42 of 61

ngCordova

43 of 61

44 of 61

45 of 61

46 of 61

Ionic View

ionicview

47 of 61

Ionic Market

48 of 61

Ionic Playground

49 of 61

Et bien d’autres...

  • Ionic Creator
  • Ionic Lab GUI
  • ???

  • Crosswalk

50 of 61

Ce que j’attends...

Mock des plugins dans le navigateur

Industrialisation (cf http://tarifa.tools/)

  • environnements de build : app package, icon & variables

Material design (cf http://ionicmaterial.com/, ionic v2 ?)

51 of 61

Code ?

52 of 61

Composant: Lists

<ion-header-bar class="bar-positive"><h1 class="title">Home</h1></ion-header-bar><ion-content><div class="list"><div class="item item-divider">List Icons</div><a class="item item-icon-left item-icon-right" href="#"><i class="icon ion-chatbubble"></i> Call Ma� <i class="icon ion-ios-telephone-outline"></i></a><a class="item item-icon-left" href="#"><i class="icon ion-email"></i> Emails� <span class="badge badge-assertive">0</span></a><a class="item item-icon-left" href="#"><i class="icon ion-mic-a"></i> Record album� <span class="item-note">Grammy</span></a><div class="item item-divider">List Avatar</div><a class="item item-avatar" href="#"><img src="http://ionicframework.com/img/docs/spengler.jpg"><h2>Egon</h2><p>We're gonna go full stream.</p></a></div></ion-content>

53 of 61

Composant: Pull To Refresh

<ion-header-bar class="bar-positive"><h1 class="title">Pull To Refresh ...</h1></ion-header-bar><ion-content><ion-refresher pulling-text="Pull to refresh..." on-refresh="doRefresh()"></ion-refresher><div class="list"><div class="item" ng-repeat="item in items">� Item {{item}}� </div></div></ion-content>

.controller('MainCtrl', function($scope) {� $scope.items = [1, 2, 3];

$scope.doRefresh = function() {� setTimeout(function(){� $scope.items.push($scope.items.length + 1);� $scope.$broadcast('scroll.refreshComplete');� }, 1000);� };�});

54 of 61

Composant: Sidemenu

<ion-side-menus>

<ion-side-menu-content><ion-header-bar class="bar-positive"><button class="button button-icon ion-navicon"� menu-toggle="left" ng-hide="$exposeAside.active"></button><h1 class="title">Home</h1></ion-header-bar><ion-content class="padding"><p>Hi !</p></ion-content></ion-side-menu-content>

<ion-side-menu expose-aside-when="large"><ion-header-bar class="bar-royal"><h1 class="title">Left Menu</h1></ion-header-bar><ion-content><div class="list"><a class="item" ui-sref="app.page1" nav-clear menu-close>Page 1</a><a class="item" ui-sref="app.page2" nav-clear menu-close>Page 2</a></div></ion-content></ion-side-menu>

</ion-side-menus>

55 of 61

Composant: Tabs

<ion-tabs class="tabs-striped tabs-top tabs-color-calm">

<ion-tab title="Timeline" icon-on="ion-social-twitter" icon-off="ion-social-twitter-outline"><!-- Tab 1 content --></ion-tab>�� <ion-tab title="Messages" icon-on="ion-ios-chatboxes" icon-off="ion-ios-chatboxes-outline"><!-- Tab 2 content --></ion-tab>�� <ion-tab title="Profil" icon-on="ion-ios-person" icon-off="ion-ios-person-outline"><!-- Tab 3 content --></ion-tab>

</ion-tabs>

56 of 61

Composant: Popover

.controller('MainCtrl', function($scope, $ionicPopover) {� $scope.user = {avatar: 'venkman.jpg', name: 'Venkman', account: '@venkman'};� � $ionicPopover.fromTemplateUrl('menu-popover.html', {� scope: $scope,� }).then(function(popover) {� $scope.popover = popover;� });�});

57 of 61

Menu: markup

<ion-header-bar class="bar-calm"><h1 class="title">Timeline</h1><button class="button button-icon ion-more" ng-click="popover.show($event)"></button></ion-header-bar>

<script id="menu-popover.html" type="text/ng-template"><ion-popover-view><ion-content><div class="list"><a class="item item-avatar" href="#"><img ng-src="http://ionicframework.com/img/docs/{{user.avatar}}"><h2>{{user.name}}</h2><p>{{user.account}}</p></a><a class="item" href="#">Listes</a><a class="item" href="#">Brouillons</a><a class="item" href="#">Comptes</a><a class="item" href="#">Paramètres</a></div></ion-content></ion-popover-view></script>

58 of 61

Et beaucoup d’autres

  • Modal
  • Popup
  • Action Sheet
  • Form (Toggle, Range, Select, Checkbox, Radio...)
  • Loading
  • Slide Box
  • Backdrop

59 of 61

Liens, docs

60 of 61

Liens, services Ionic

http://ionicframework.com/ : Ionic Framework

http://docs.ionic.io/ : Ionic plateforme

http://market.ionic.io/ : Ionic market (themeforest like)

http://play.ionic.io/ : Ionic playground (codepen like)

http://view.ionic.io/ : Ionic view

http://lab.ionic.io/ : Ionic Lab GUI

http://jobs.ionic.io/ : Ionic job board

http://shop.ionic.io/ : Goodies Ionic ;)

https://github.com/driftyco/ionic2-starter : Ionic 2 preview

61 of 61

Questions ?

@loicknuchel - http://loic.knuchel.org/