Les applications mobiles s'infiltrent partout, à commencer par les smartphones et les tablettes, jusqu'aux montres intelligentes, et bientôt également dans d'autres appareils portables. Cependant, développer pour chaque plate-forme mobile distincte peut être une tâche exhaustive, en particulier si vos ressources sont limitées, ou si vous êtes un seul développeur plutôt qu'un société de développement d'applications mobiles .
C'est là que devenir un développeur Apache Cordova expérimenté peut s'avérer utile en fournissant un moyen de développer des applications mobiles à l'aide des technologies Web standard — HTML5, CSS3 et JavaScript.
En 2009, une startup appelée Nitobi a créé PhoneGap, une API open source permettant d'accéder aux ressources mobiles natives, dans le but de permettre aux développeurs de créer des applications mobiles à l'aide des technologies Web standard. Dans la vision de Nitobi, la plupart des applications mobiles seraient bientôt développées à l'aide de PhoneGap, mais les développeurs auraient toujours la possibilité d'écrire du code natif si nécessaire, que ce soit en raison de problèmes de performances ou de l'absence de méthode d'accès à un matériel spécifique.
Il n’y a rien de tel, vraiment. Ce qui s'est passé, c'est qu'Adobe a acquis Nitobi en 2011 et a fait don du noyau open source à Apache Software Foundation, qui l'a rebaptisé Apache Cordova. Une analogie courante que vous rencontrerez souvent est que Cordova est à PhoneGap ce que WebKit est à Chrome ou Safari.
De toute évidence, les différences entre Cordova et PhoneGap étaient minimes au début. Avec le temps, Adobe PhoneGap a développé son propre ensemble de fonctionnalités propriétaires, tandis que Cordova était - et est toujours - pris en charge par la communauté open source. Cet examen et ce didacticiel Apache Cordova examineront plus en détail le développement de l'application Cordova, et bien que certains d'entre eux puissent s'appliquer à PhoneGap, cela ne doit pas être considéré comme un didacticiel PhoneGap, en soi .
En substance, Cordova n'a aucune limitation par rapport aux applications développées en natif. Ce que vous obtenez avec Cordova est simplement une API JavaScript, qui sert de wrapper pour le code natif et est cohérente sur tous les appareils. Vous pouvez considérer Cordova comme un conteneur d'applications avec une vue Web, qui couvre tout l'écran de l'appareil. La vue Web utilisée par Cordova est la même vue Web que celle utilisée par le système d'exploitation natif. Sur iOS, il s'agit de l'Objective-C par défaut UIWebView
ou un personnalisé WKWebView
classe; sur Android, c'est android.webkit.WebView
.
Apache Cordova est livré avec un ensemble de plugins pré-développés qui permettent d’accéder à la caméra, au GPS, au système de fichiers de l’appareil, etc. Au fur et à mesure que les appareils mobiles évoluent, ajouter la prise en charge de matériel supplémentaire est simplement une question de développement de nouveaux plugins.
Enfin, les applications Cordova installent tout comme les applications natives . Cela signifie que la construction de votre code pour iOS produira un fichier IPA, pour Android un fichier APK, et la construction pour Windows Phone produira un fichier XAP. Si vous consacrez suffisamment d'efforts au processus de développement, vos utilisateurs pourraient même ne pas se rendre compte qu'ils n'utilisent pas d'application native.
Il existe deux chemins de base que vous pouvez suivre lors du développement avec Cordova:
Il est généralement recommandé de commencer par le flux de travail de développement multiplateforme, car le passage au développement centré sur la plateforme est assez simple. Toutefois, si vous démarrez initialement avec le flux de travail centré sur la plate-forme, vous ne pourrez pas passer au développement multiplateforme car la CLI écrasera vos personnalisations une fois que vous aurez exécuté le processus de génération.
Avant d'installer et d'exécuter quoi que ce soit lié à Cordova, vous devrez installer le SDK pour chaque plate-forme pour laquelle vous avez l'intention de créer votre application. Nous nous concentrerons sur la plate-forme Android dans cet article; cependant, le processus impliquant d'autres plates-formes est similaire.
Vous devez télécharger le SDK Android trouvé Ici . Pour Windows, le SDK se présente sous la forme d'un programme d'installation, tandis que pour Linux et OSX, il se présente sous la forme d'une archive qui peut être simplement extraite. Après avoir extrait / installé le package, vous devrez ajouter le sdk/tools
et sdk/platform-tools
répertoires dans vos PATH
variable. Le PATH
variable est utilisée par Cordova pour rechercher les binaires dont il a besoin pour le processus de construction. Si Java n’est pas installé, vous devez continuer et installer le JDK avec Ant. ANT_HOME
et JAVA_HOME
doit être défini sur les dossiers bin de JDK et Ant, et après avoir installé le SDK Android, définissez le ANDROID_HOME
variable à Android/Sdk
. Tous les emplacements dans les trois *_HOME
les variables doivent également être dans votre PATH
variable.
Après avoir installé le SDK android
La commande deviendra disponible dans votre ligne de commande. Exécutez-le pour ouvrir le gestionnaire de SDK et installer les derniers outils et l'API Android. Vous auriez probablement besoin Outils du SDK Android, outils de la plate-forme Android SDK, outils de construction du SDK Android, plate-forme SDK, API Google Image système Intel x86 Atom, sources du SDK Android et Accélérateur d'émulateur Intel x86 (programme d'installation HAXM) . Après cela, vous pourrez créer un émulateur avec android avd
.
La CLI Cordova dépend de Node.js et du client Git, alors téléchargez et installez Node à partir de nodejs.org , et Git de git-scm.com . Vous utiliserez npm pour installer Cordova CLI lui-même ainsi que pour installer des plugins supplémentaires, et Cordova utilisera git dans les coulisses afin de télécharger les dépendances requises. Enfin, exécutez
npm install -g cordova
… Pour installer la CLI Cordova globalement (npm install cordova
ne suffit pas à lui seul.)
Pour résumer, voici les packages dont vous aurez besoin:
Et ces variables d'environnement devront être mises à jour:
PATH
JAVA_HOME
ANT_HOME
ANDROID_HOME
Si vous avez correctement installé Cordova, vous devriez maintenant avoir accès à l'utilitaire de ligne de commande Cordova. Ouvrez votre terminal ou votre ligne de commande et accédez à un répertoire dans lequel vous souhaitez créer votre premier projet Cordova. Pour démarrer une application, tapez la commande suivante:
cordova create toptal toptal.hello HelloApeeScape
La ligne de commande se compose du nom de la commande cordova
, suivi de la sous-commande create
. La sous-commande est appelée avec trois paramètres supplémentaires: le dossier dans lequel l'application sera placée, l'espace de nom de l'application et son nom d'affichage. Cela amorce l'application dans un dossier avec la structure suivante:
toptal/ |-- hooks/ |-- platforms/ |-- plugins/ |-- www/ `-- config.xml
Le www
Le dossier contient le cœur de votre application. C'est ici que vous placerez votre code d'application qui est commun à toutes les plateformes.
Bien que Cordova vous permette de développer facilement une application pour différentes plates-formes, vous devez parfois ajouter des personnalisations. Lorsque vous développez pour plusieurs plates-formes, vous ne souhaitez pas modifier les fichiers sources dans les différents platforms/[platform-name][assets]/www
répertoires, car ils sont régulièrement remplacés par le niveau supérieur www
des dossiers.
À ce stade, vous pouvez également ouvrir le config.xml
et modifiez les métadonnées de votre application, telles que l'auteur et la description.
Ajoutez votre première plateforme en utilisant:
cordova platform add android
Si vous changez d'avis plus tard, vous pouvez facilement supprimer une plate-forme du processus de construction:
cordova platform rm android
En inspectant le répertoire des plates-formes, vous remarquerez le android
dossier en son sein. Pour chaque plateforme que vous ajoutez, Cordova créera un nouveau répertoire dans les plateformes et dupliquera le www
dossier en son sein. Si, par exemple, vous souhaitez personnaliser votre application pour Android, vous pouvez modifier les fichiers dans platforms/android/assets/www
et passez aux outils shell spécifiques à la plate-forme.
Cependant, rappelez-vous que si vous reconstruisez votre application avec l'interface de ligne de commande (utilisée pour le développement multiplateforme), Cordova écrasera les modifications que vous avez apportées pour chaque plate-forme, alors assurez-vous de les avoir sous contrôle de version, ou vous effectuez des modifications spécifiques à la plate-forme. change une fois que vous avez terminé le développement multiplateforme. Comme nous l'avons mentionné précédemment, passer d'un développement multiplateforme à un développement spécifique à une plateforme est facile. Aller dans l'autre sens ne l'est pas.
Si vous souhaitez continuer à utiliser le flux de travail multiplateforme tout en effectuant des personnalisations spécifiques à la plateforme, vous devez utiliser le dossier de fusion de niveau supérieur. À partir de la version 3.5 de Cordova, ce dossier a été supprimé du modèle d'application par défaut, mais si vous en avez besoin, vous pouvez simplement le créer avec les autres répertoires de niveau supérieur (hooks
, platforms
, plugins
et www
).
Les personnalisations spécifiques à la plate-forme sont placées dans merges/[platform-name]
et sont appliquées après les fichiers source du niveau supérieur www
dossier. De cette façon, vous pouvez soit ajouter de nouveaux fichiers sources pour certaines plates-formes, soit remplacer des fichiers sources entiers de niveau supérieur par des fichiers spécifiques à la plate-forme. Prenons par exemple la structure suivante:
merges/ |-- wp8/ | `-- app.js |-- android/ | `-- android.js |-- www/ `-- app.js
Dans ce cas, le fichier de sortie pour Android contiendra à la fois app.js
et android.js
fichiers, mais le fichier de sortie pour Windows Phone 8 ne contiendra que le app.js
fichier qui se trouve dans le merges/wp8
dossier, puisque les fichiers dans merges/[platform]
remplacer les fichiers dans www
.
Le répertoire des plugins contient des informations sur les plugins de chaque plate-forme. À ce stade, vous ne devriez avoir que le android.json
fichier qui doit avoir la structure suivante:
{ 'prepare_queue': { 'installed': [], 'uninstalled': [] }, 'config_munge': { 'files': {} }, 'installed_plugins': {}, 'dependent_plugins': {} }
Laissez-nous créer l'application et la déployer sur un appareil Android. Vous pouvez également utiliser l'émulateur si vous le souhaitez.
Cordova fournit plusieurs étapes CLI pour créer et exécuter vos applications: cordova prepare
, cordova compile
, cordova build
(qui est un raccourci pour les deux précédents), cordova emulate
et cordova run
(qui intègre build
et peut également exécuter l'émulateur). Cela ne devrait pas vous dérouter, car dans la plupart des cas, vous souhaitez créer et exécuter votre application dans l'émulateur:
cordova run --emulator
Si vous le souhaitez, vous pouvez brancher votre appareil via le port USB, activer le mode de débogage USB et déployer votre première application Apache Cordova directement sur votre appareil en exécutant simplement:
cordova run
Cela copiera tous vos fichiers dans platforms/*
et exécutez toutes les tâches requises.
Vous pouvez limiter la portée du processus de construction en spécifiant le nom de la plate-forme pour laquelle vous souhaitez créer l'application et / ou même l'émulateur spécifique, par exemple:
cordova run android --emulator
ou
cordova run ios --emulator --target='iPhone-8-Plus'
Créons une application didactique simple pour démontrer l’utilisation de Cordova et de ses plugins. La démo entière peut être trouvée dans ce référentiel GitHub afin que vous puissiez le télécharger et en parcourir certaines parties avec ce court didacticiel Cordova.
Nous utiliserons la configuration initiale que vous avez créée et ajouterons du code supplémentaire. Supposons que nous souhaitons ajouter de nouveaux projets à une base de données ApeeScape imaginaire, ainsi que visualiser les projets existants. Ouvrez index.html et configurez deux onglets de la manière suivante:
Hello ApeeScape
Notez que j'ai ajouté Bootstrap et jQuery Mobile comme dépendances. Sachez que des solutions et des frameworks bien meilleurs ont été développés pour créer des applications hybrides modernes, mais comme la plupart (sinon tous) les développeurs Web connaissent ces deux bibliothèques, il est logique de les utiliser pour un didacticiel pour débutants. Vous pouvez télécharger les feuilles de style depuis GitHub ou utiliser les vôtres, si vous préférez.
Passons au index.js
fichier et décomposez-le comme suit:
var app = { // Application Constructor initialize: function() { if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/)) { document.addEventListener('deviceready', this.onDeviceReady, false); } else { this.onDeviceReady(); } }, onDeviceReady: function() { // We will init / bootstrap our application here }, }; app.initialize();
N'oubliez pas que l'architecture préconisée pour les applications Cordova met en place une application à page unique (SPA). De cette façon, toutes les ressources ne sont chargées qu'une seule fois au démarrage de l'application et peuvent rester dans la vue Web aussi longtemps que l'application est en cours d'exécution. De plus, avec les SPA, l'utilisateur n'aura pas de recharges de page qui ne sont pas simplement typiques des applications natives. En gardant cela à l'esprit, configurons un contrôleur simple pour basculer entre les deux onglets:
var Controller = function() { var controller = { self: null, initialize: function() { self = this; this.bindEvents(); self.renderSearchView(); }, bindEvents: function() { $('.tab-button').on('click', this.onTabClick); }, onTabClick: function(e) { e.preventDefault(); if ($(this).hasClass('active')) { return; } var tab = $(this).data('tab'); if (tab === '#add-tab') { self.renderPostView(); } else { self.renderSearchView(); } }, renderPostView: function() { $('.tab-button').removeClass('active'); $('#post-tab-button').addClass('active'); var $tab = $('#tab-content'); $tab.empty(); $('#tab-content').load('./views/post-project-view.html', function(data) { $('#tab-content').find('#post-project-form').on('submit', self.postProject); }); }, renderSearchView: function() { $('.tab-button').removeClass('active'); $('#search-tab-button').addClass('active'); var $tab = $('#tab-content'); $tab.empty(); var $projectTemplate = null; $('#tab-content').load('./views/search-project-view.html', function(data) { $projectTemplate = $('.project').remove(); // Load projects here }); } } controller.initialize(); return controller; }
Le contrôleur a jusqu'à présent deux méthodes, une pour rendre la vue de recherche et une pour rendre la vue de post-projet. Initialisons-le dans notre index.js
fichier en le déclarant d'abord en haut et en le construisant dans la méthode onDeviceReady:
// top of index.js var controller = null
// inside onDeviceReady method controller = new Controller();
Enfin, ajoutez une référence de script dans index.html
au-dessus de la référence à index.js
. Vous pouvez télécharger les vues de recherche et de publication directement à partir de GitHub. Étant donné que les vues partielles sont lues à partir d'un fichier, certains navigateurs comme Chrome, tout en essayant de rendre votre page, se plaindront des demandes inter-domaines.
La solution possible ici serait d'exécuter un serveur statique local, par exemple en utilisant node-static
module npm. Ici aussi, vous pouvez commencer à penser à utiliser un cadre tel que PhoneGap et / ou Ionic. Tous fournissent une gamme d'outils de développement, y compris l'émulation dans le navigateur, le rechargement à chaud et la génération de code (échafaudage).
Pour l'instant, déployons simplement sur un appareil Android en exécutant ce qui suit:
cordova run android
À ce stade, votre application doit avoir deux onglets. Le premier onglet permet de rechercher des projets:
Le deuxième onglet permet de publier de nouveaux projets:
Tout ce que nous avons maintenant est une application Web classique exécutée dans une vue Web. Nous n'avons vraiment utilisé aucune des fonctionnalités natives, alors essayons de le faire maintenant. Une question courante est de savoir comment stocker les données localement sur l'appareil ou, plus précisément, quel type de stockage utiliser. Il y a plusieurs façons de procéder:
LocalStorage convient au stockage de petites quantités de données, mais cela ne suffit pas si vous créez une application gourmande en données, car l'espace disponible varie de 3 à 10 Mo. IndexedDB peut être une meilleure solution dans ce cas. WebSQL est obsolète et n'est pas pris en charge sur certaines plates-formes. Enfin, l'utilisation de services Web pour récupérer et modifier des données s'inscrit bien dans le paradigme SPA, mais elle tombe en panne lorsque votre application est hors ligne. Les techniques PWA ainsi que les techniciens de service sont récemment venus dans le monde de Cordova pour y contribuer.
De plus, de nombreux plugins tiers supplémentaires viennent combler les lacunes du cœur de Cordova. Le plug-in File peut être très utile car il vous donne accès au système de fichiers de l’appareil, vous permettant de créer et de stocker des fichiers. Pour l'instant, essayons SQLitePlugin qui vous fournit une base de données SQLite locale. Vous pouvez l'ajouter à votre projet en exécutant:
cordova plugin add https://github.com/brodysoft/Cordova-SQLitePlugin
SQLitePlugin fournit une API à la base de données SQLite de l’appareil et sert de véritable mécanisme de persistance. Nous pouvons créer un service de stockage simple de la manière suivante:
SQLiteStorageService = function () { var service = {}; var db = window.sqlitePlugin ? window.sqlitePlugin.openDatabase({name: 'demo.toptal', location: 'default'}) : window.openDatabase('demo.toptal', '1.0', 'DB para FactAV', 5000000); service.initialize = function() { // Initialize the database var deferred = $.Deferred(); db.transaction(function(tx) { tx.executeSql( 'CREATE TABLE IF NOT EXISTS projects ' + '(id integer primary key, name text, company text, description text, latitude real, longitude real)' ,[], function(tx, res) { tx.executeSql('DELETE FROM projects', [], function(tx, res) { deferred.resolve(service); }, function(tx, res) { deferred.reject('Error initializing database'); }); }, function(tx, res) { deferred.reject('Error initializing database'); }); }); return deferred.promise(); } service.getProjects = function() { // fetch projects } service.addProject = function(name, company, description, addLocation) { // add a new project } return service.initialize(); }
Vous pouvez télécharger le code pour récupérer et ajouter des projets à partir de GitHub et le coller dans les espaces réservés respectifs. N'oubliez pas d'ajouter SQLiteStorageService.js à votre fichier index.html au-dessus de Controller.js, et de l'initialiser dans votre contrôleur en modifiant la fonction init du contrôleur:
initialize: function() { self = this; new SQLiteStorageService().done(function(service) { self.storageService = service; self.bindEvents(); self.renderSearchView(); }).fail(function(error) { alert(error); }); }
Si vous jetez un coup d'œil à la fonction service.addProject (), vous remarquerez qu'elle fait un appel à la méthode navigator.geolocation.getCurrentPosition (). Cordova dispose d'un plugin de géolocalisation que vous pouvez utiliser pour obtenir la position actuelle du téléphone, et vous pouvez même utiliser la méthode navigator.geolocation.watchPosition () pour recevoir des mises à jour lorsque la position de l'utilisateur change.
Enfin, ajoutons les descripteurs d'événements du contrôleur pour ajouter et récupérer des projets à partir de la base de données:
renderPostView: function() { $('.tab-button').removeClass('active'); $('#post-tab-button').addClass('active'); var $tab = $('#tab-content'); $tab.empty(); $('#tab-content').load('./views/post-project-view.html', function(data) { $('#tab-content').find('#post-project-form').on('submit', self.postProject); }); }, postProject: function(e) { e.preventDefault(); var name = $('#project-name').val(); var description = $('#project-description').val(); var company = $('#company').val(); var addLocation = $('#include-location').is(':checked'); if (!name || !description || !company) { alert('Please fill in all fields'); return; } else { var result = self.storageService.addProject( name, company, description, addLocation); result.done(function() { alert('Project successfully added'); self.renderSearchView(); }).fail(function(error) { alert(error); }); } }, renderSearchView: function() { $('.tab-button').removeClass('active'); $('#search-tab-button').addClass('active'); var $tab = $('#tab-content'); $tab.empty(); var $projectTemplate = null; $('#tab-content').load('./views/search-project-view.html', function(data) { $('#addressSearch').on('click', function() { alert('Not implemented'); }); $projectTemplate = $('.project').remove(); var projects = self.storageService.getProjects().done(function(projects) { for(var idx in projects) { var $div = $projectTemplate.clone(); var project = projects[idx]; $div.find('.project-name').text(project.name); $div.find('.project-company').text(project.company); $div.find('.project-description').text(project.description); if (project.location) { var url = ' Click to open map '; $div.find('.project-location').html(url); } else { $div.find('.project-location').text('Not specified'); } $tab.append($div); } }).fail(function(error) { alert(error); }); }); }
Pour ajouter la console et les plugins de dialogue, exécutez ce qui suit:
cordova plugin add org.apache.cordova.dialogs cordova plugin add org.apache.cordova.console
Le plugin cordova.console vous aidera dans le débogage en activant le console.log()
fonction dans les émulateurs.
Vous pouvez facilement déboguer les applications Android via le débogueur à distance Chrome. Une fois que vous avez connecté votre appareil, cliquez sur le menu déroulant dans le coin supérieur droit (sous le bouton X), développez Plus d'outils et cliquez sur Inspecter les appareils. Vous devriez voir votre appareil dans la liste et pouvoir ouvrir sa console de débogage.
Safari fournit la même fonctionnalité pour le débogage des applications iOS qui s'exécutent sur un appareil ou un émulateur connecté via USB. Activez simplement les outils de développement sous l'onglet Paramètres Safari> Avancé.
Le plugin cordova.dialogs active les notifications natives. Une pratique courante consiste à redéfinir le windows.alert
méthode en utilisant l'API cordova.dialogs de la manière suivante:
overrideBrowserAlert: function() { if (navigator.notification) { // Override default HTML alert with native dialog window.alert = function (message) { navigator.notification.alert( message, // message null, // callback 'ApeeScape', // title 'OK' // buttonName ); }; } }
Le overrideBrowserAlert
La fonction doit être appelée dans le deviceready
gestionnaire d'événements.
Vous devriez maintenant pouvoir ajouter de nouveaux projets et afficher les projets existants à partir de la base de données. Si vous cochez la case «Inclure l'emplacement», l'appareil appellera l'API de géolocalisation et ajoutera votre emplacement actuel au projet.
Ajoutons une touche finale à l'application en définissant une icône et un écran de démarrage. Ajoutez ce qui suit à votre config.xml
fichier:
www/img
Enfin, placez une image de logo dans le
|_+_|dossier.
Nous avons suivi les étapes de base du développement de l'application Apache Cordova et utilisé notre propre architecture JavaScript et Feuille de style CSS . Ce didacticiel Cordova était une tentative de montrer le potentiel d'Apache Cordova comme moyen de développer des applications mobiles en utilisant des technologies familières, réduisant à la fois le temps de développement et l'effort requis pour créer plusieurs applications pour différentes plates-formes.
Cependant, lors de la création d'applications qui entreront en production, il est recommandé d'utiliser une infrastructure existante. En plus de structurer votre application dans une architecture prédéfinie, cela peut également vous fournir un ensemble de composants qui aideront votre application à se rapprocher de l'apparence native. Certains cadres à noter sont Ionique , Cadre7 , Weex , Rochet , Interface utilisateur Kendo , et Interface utilisateur Onsen . Bonne chance!
En relation: Cadres Cordova: Ionic vs Framework7Apache Cordova est un framework permettant de créer des applications mobiles multiplateformes à l'aide de technologies Web standard. Il s'agit essentiellement d'un conteneur d'applications avec une vue Web qui couvre tout l'écran de l'appareil.
De nos jours, PhoneGap fait référence à un produit construit par Adobe sur Apache Cordova. À l'origine, il s'agissait du cadre créé par Nitobi avant qu'Adobe ne les acquière et ne l'utilise en open source sous le nom d'Apache Cordova.
WebView d'Android et UIWebView d'iOS sont les classes utilisées par les systèmes d'exploitation respectifs pour afficher les pages Web en plein écran. Les développeurs peuvent créer des navigateurs Web avec eux ou, dans le cas d'Apache Cordova, les utiliser pour afficher une application Web comme s'il s'agissait d'une application native.
Les plugins Apache Cordova permettent un accès supplémentaire aux fonctionnalités multiplateformes. Il peut s'agir de services matériels tels que la géolocalisation ou de fonctionnalités purement logicielles telles que l'accès à la base de données SQLite fourni par le système d'exploitation.