Blog Boreal Business

Fonctionnement d’une application mobile : les différentes possibilités

avril 5th, 2011    Posted in Développement

Une petite longue note explicative sur les différents modes de fonctionnement des applications mobiles telles que nous les concevons.

Les applications connectées

Ce type d’appli se comporte globalement comme votre navigateur Internet. A chaque opération ou accès de données, les informations sont lues sur Internet

Nos apps repose en général sur ces éléments :

- L’application en elle même, codée en Objective C sur iPhone, JAVA pour Android et Blackberry
- Un Serveur Web type Apache/PHP
- Un serveur de base de données (pour nous MySQL)

La lecture des données se fait de manière suivante :

Une fois lancée, l’application se connecte au serveur web et vient télécharger un fichier, en général au format XML (RSS ou WebServices).
Ce flux est généré en temps réel par un script écrit en PHP, qui interprète la demande (et les paramètres GET et POST) et interroge la base de données en fonction.

Reste à l’appli à interpréter ces données (libxml2 fait le travail) et de le placer dans l’interface !

En utilisant cette technique, les différentes versions de vos applis (iPhone, Android, …)
viennent toutes se connecter à la même source de données, et simplifient la maintenance et les mises à jours.

Il est aussi possible de connecter la base de données existante de votre site web, les données sur votre iPhone ou sur un navigateur classique sont donc toujours identiques.

Avantages :

- Une synchronisation parfaite entre toutes vos supports pour votre service.
- Possibilité de donner des infos en temps réels
- Facilité de mise à jour du contenu (couplé avec un BackOffice par exemple)
- Application légère et rapide à télécharger sur le Store
- Le serveur peut effectuer certains traitements lourds un peu délicat à réaliser sur un téléphone qui tourne sur batterie et avec une puissance de calcul limitée (traitement d’image ou de vidéo par exemple)
- Toutes les possibilités du téléphone sont exploitables (GPS, Push …)

Inconvénients :

- La connexion Internet est indispensable
- Pour peu que l’on fasse transiter beaucoup de données (grande photos, vidéo) la couverture en 3G est obligatoire (15 Min de vidéo au fin fond du Berry, oubliez tout de suite)
- Plein de petits chargements qui peuvent être gênants à la longue.

Ce type d’application est parfait pour des services connectés à un site web, pour l’utilisation de réseau sociaux, ou généralement quand les informations doivent être obtenus rapidement.

Exemples : Dépanne Moi, Astuces FB, b2pweb …


Les applications embarquées

Pour ce type d’application, toutes les fonctions, données média sont embarquées dans le téléphone ou la tablette.
Un seul élément dans ce cas de figure : le téléphone avec son logiciel embarqué.

Le téléphone lit tous les fichiers qu’il lui faut directement dans la mémoire de stockage du téléphone, ou dans une base de données embarquées (SQLite3 est très efficace dans ce cas de figure)
sur le même modèle qu’un ordinateur qui ouvre un fichier.

Avantages :

- L’appli est toujours disponible, que l’on soit en plein Paris ou au beau milieu de la pampa.
- L’accès aux données est très rapide, d’autant plus que les téléphones disposent d’une mémoire de type SSD, avec des débit de lecture assez élevés.
- Les fonctions radio du téléphone ne sont pas sollicitées, la batterie perd donc la charge moins vite.
- Lors du téléchargement de l’appli, tout son contenu est immédiatement disponible.

Inconvénients :

- La moindre correction orthographique demande une mise à jour de l’appli. Quand on sait que cela peut prendre plusieurs jours avec Apple, mieux vaut bien tout valider à chaque étape
- L’application peut vite devenir extrêmement lourde. Au delà de 20 Mo (pour l’iPhone en tout cas), une connexion Wifi est exigée par Apple.
- Pas de réactivité du contenu
- L’utilisation de Google Maps, du GPS, des notifications devient plus problématique

En résumé ce type d’appli est adapté pour des utilitaires avec une fonction bien précise, pas vraiment voués à évoluer dans le temps par leur contenu.

Exemples : Tecknodent, Planet Solaire


Les applications synchronisables

Il s’agit d’une version hybride des deux autres modèles. Elles reposent à la fois :

- Sur un serveur web/php alimenté par une base SQL
- le système de stockage Interne du téléphone
- L’application en elle même

L’application en utilisation simple vient lire les données sur son disque de stockage, ou sa base de données interne, mais dispose d’une fonction qui permet de synchroniser son contenu.

En détail cela fonctionne de cette manière :

- L’appli vérifie sa connectivité
- Une requête avec la date de dernière mise à jour est envoyée vers le serveur
- Le serveur répond par une liste de données à récupérer (URL de fichiers média, requêtes SQL pour synchro avec la base SQLite, …). Toute cette liste est envoyée via un flux XML
- L’application va alors télécharger toutes les infos de manière séquentielles (via HTTP ou FTP), ou exécuter les requêtes SQL. Il est aussi possible, pour des petits fichiers, de les stocker en base de données sous forme de BLOB binaires.
- Une fois toute la séquence terminée, on recharge l’interface.

Avantages :

- Un bon compromis entre la disponibilité et la flexibilité du contenu
- La radio du téléphone n’est sollicité que lors des mises à jour
- Application légère à télécharger
- Seules les nouvelles informations sont téléchargées (ou celles mises à jours évidemment), les autres sont stockées dans le téléphone

Inconvénients :

- Les données peuvent ne plus être valables si l’on oublie de faire la mise à jour
- Lors du premier lancement, cela implique de télécharger tout le contenu. Même en Wifi, cela peut prendre du temps dans certain cas.

Exemple : CNRI, iAstreinte, Concorde Hotels & Resorts

Ce type d’appli se prêtent bien aux applications métier, ou à usage professionnel, quand la fiabilité est importante, tout en gardant la possibilité d’échanger des informations rapidement.

Il est évidemment possible d’utiliser un mélange de ces techniques en fonctions des services proposés par l’application, ou de passer en mode « dégradé » si la connexion Internet n’est pas disponible.

Des questions sur la faisabilité technique de votre projet d’appli ? Contactez nous au 01.75.43.03.82 pour en discuter

Bookmark and Share

Poster un commentaire


Les types de données en objective C sur le SDK iPhone

janvier 17th, 2011    Posted in Développement

Voila un petit topo sur les types de données les plus courants disponibles dans le SDK iPhone

bool : peut valoir TRUE ou FALSE (vrai ou faux)

int : entier signé (+ ou -) numérique (Ex : 5, -2, 0, …)
float
: nombre à virgule flottante (Ex : -42.3478)
double : nombre à virgule flottante (peut stocker de plus grands nombres) (Ex: 5000000006478975572.5465174674)
NSNumber
: stock un nombre de n’importe quelle taille, et peut le ressortir sous n’importe quelle forme vue ci-dessus (int, float, double …), pratique pour convertir

Les types suivants existent en version Mutable, c’est à dire que l’on peut en changer le contenu après l’initialisation.

NSString et NSMutableString : une chaine de caractère standard, vous pouvez les comparer via [machaine isEqualToString:autrechaine] == true, et surtout PAS machaine == autrechaine comme en PHP

NSArray et NSMutableArray : un tableau de données (Array), accèdez à chaque ligne grâce à [monarray objectAtIndex:x], et lire le nombre de ligne avec [monarray count];

NSDictionnary et NSMutableDictionnary : dictionnaire de données.

Cet objet ressemble aux Arrays, à ceci près que les colonnes sont nommées, et qu’il ne peut y avoir qu’une seule ligne. Ex:

dict = [[NSMutableDictionnary alloc] init];
[dict setObject:@"chaine" forKey:@"clef"];

Récuperez ensuite cette valeur en utilisant [dict objectForKey:@"clef"]
Rien ne vous empêche d’insérer des Arrays dans un Dictionnary, ou inversement d’insérer des Dictionnary dans un Array.

NSData et NSMutableData : stocke des données binaires (issues d’un téléchargement par exemple)

Autres types de données bien utiles :

NSDate : Objet permettant la manipulation d’une date
NSURL : Stock une adresse URL
CGRect : définit une zone de l’espace par une origine (x et y), une largeur et une hauteur (voir les frames)
CGPoint : défini un point de l’espace en 2D : x et y
CGSize : définit une taille (largeur et hauteur)
CGFloat : identique à float
UIColor : défini une couleur Ex : [UIColor redColor]
UIImage : représente un fichier image [UIImage imageNamed:@"monimage.png"];

Il en existe bien sûr d’autres, je complèterai au fur et à mesure.

Bookmark and Share

Poster un commentaire


Télécharger un fichier texte sur un iPhone : Mode d’emploi en objective C

janvier 17th, 2011    Posted in Développement

Voici la marche à suivre pour télécharger un fichier en mémoire d’un terminal sous iOS (v >= 3.1.3) en mode asynchrone.
L’avantage de ce mode est que l’exécution de votre application se poursuit, le téléchargement se fait en tache de fond!

Voici le vif du sujet :

Dans l’entête de votre controller de vue (le fichier .h), ajoutez un NSMutableData, qui va stocker les données en cours de téléchargement.
Mutable signifie qu’il sera éditable après avoir été initialisé (comme pour NSMutableString, NSMutableArray, NSMutableDictionnary, etc)

le fichier ressemblera en gros à ça

#import <Foundation/Foundation.h>

@interface monController : UIViewController {
     NSMutableData *dta;
}
@property (nonatomic,retain) NSMutableData *dta;
-(void)startdownload;

L’objet data est donc déclaré, reste à le remplir !
Dans votre controller de vue (fichier .m), juste après @implementation monController

@synthesize dta;

puis ajoutez les fonctions suivante :

-(void)start_download { // appelez cette méthode pour lancer le téléchargement

	if(dta == nil){ // on initialise ici notre variable enregistrée dans le fichier H
		//(on exécute cette instruction uniquement une seule fois !)
		dta = [[NSMutableData alloc] init];
	}
        else{
             // dans le cas contraire, on supprime les eventuelles données restantes
             [dta setLength:0];
       }

	NSString *real_url = @"http://www.monadresse.fr/monfichier.jpg";
	// on construit ici l'url à appeler.
	// Vous pouvez la rendre dynamique avec des fonctions telles que initWithFormat
	NSURL *url = [NSURL URLWithString:real_url];
	NSURLRequest *req = [NSURLRequest requestWithURL:url];
	NSURLConnection *connect = [NSURLConnection connectionWithRequest:req delegate:self];

	// à cette étape, le point important est le delegate:self qui
	// indique que les signaux de retour seront adressés au controller de vue actuel (monController)
	// nous allons maintenant récuperer ces signaux pour déterminer où en est notre téléchargement

}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
	// cette fonction est appelée dès que la connection reçoit des données.
	// Le nom de cette fonction doit exactement être identique (protocole imposé par le delegate)
	[dta appendData:data]; // on ajoute le bloc de données téléchargées à notre objet dta
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
	// cette fonction est appelée dès que le téléchargement est terminé,
	// tout notre fichier se trouve donc dans notre objet dta;

	// pour le convertir en chaine de charactère (cas d'un fichier texte)
	NSMutableString *result = [[NSMutableString alloc] initWithData:dta encoding:NSUTF8StringEncoding];

	// traiter cette variable : votre fichier texte est dedans
	// on vide notre objet de son contenu (copié dans result, inutile de le garder deux fois en mémoire)

	[dta setLength:0];
}

-(void)connection:(NSURLconnection *)connection didFailWithError:(NSError *)error {

	// cette méthode est appelée lorqu'une erreur se produit pendant le téléchargement
	NSLog(@"Erreur !");
        [dta setLength:0]; // le telechargement a echoué, intile de garder les données recuperées (probablement incomplètes)

}

Il existe d’autres méthodes appelése automatiquement par NSURLConnection sur son delegate : vous pouvez les retrouver sur le site référence d’Apple :

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html

A retenir :

- Pour déclarer un objet accessible dans toutes les fonctions/méthodes, ajoutez le au bloc @interface, ajoutez sa ligne @property
puis dans le fichier .m la ligne @synthesize

Attention : il faut quand même faire une initialisation de l’objet en utilisant alloc (ou copy) ex : dta = [[NSMutableData alloc] init];,
l’objet sera dans le cas contraire toujours égal à nil (on oublie facilement cette étape)
il faudra aussi effacer la référence à cet objet dans la méthode dealloc de votre controller:

[dta setLength:0];
[dta release];

A noter que dans mon exemple il s’agit d’un des deux seuls objets à release avec l’objet result, l’instruction alloc n’étant pas utilisée pour les autres (NSURLConnection, NSURL, NSString).

- Le protocole delegate d’un objet est un ensemble de méthodes qui seront appelées automatiquement (certaines facultatives, d’autres obligatoires) sur l’objet fourni (self = controller de vue courant, rien ne vous empêche de donner un autre controller de vue, ou même un autre objet NSObject)

- Je vous conseille de faire quelques contrôles supplémentaires sur les erreurs, une déconnexion est vite arrivée sur mobile !

Bookmark and Share

Poster un commentaire


On parle de iAstreinte dans le Berry Républicain

janvier 6th, 2011    Posted in Presse

L’article ci-dessous :

http://www.leberry.fr/editions_locales/bourges/bourges_du_wifi_gratuit_partout_en_ville_avant_l_ete

,paru dans le Berry Républicain du 05/02/2011, traite des dernières installations wifi mises en place par la Ville de Bourges. Il évoque également les bonnes statistiques de téléchargement et d’utilisation des applications iPhone et Android que nous avons développé pour Bourges. Nous reviendrons vers vous dans les prochains mois pour parler de la V2 de ces applications mobiles.

Mais surtout, ce papier évoque pour la première fois notre dernière application iPad : iAstreinte. Déployée auprès des élus d’astreinte de la Ville de Bourges.

A suivre …

Bookmark and Share

Poster un commentaire


Lundi 18 Octobre 2010 : 1ère journée de l’économie numérique

septembre 15th, 2010    Posted in Evénements

1ère journée de l’économie numérique, organisée par la CCI du Cher dans ses locaux le Lundi 18 Octobre 2010.

Une journée entière dédiée au numérique, l’occasion pour tous les acteurs économiques de Bourges et du département du Cher de se sensibiliser aux enjeux et opportunités de la nouvelle économie.

Une journée pendant laquelle nous aurons le plaisir de participer à 2 ateliers (consultez le planning complet des ateliers ici).

1er Atelier de 13h00 à 14h30 : présentation des applications mobiles créées pour la Ville de Bourges.

2ème Atelier de 14h30 à 16h00 : témoignage sur notre activité de e-commerce.

Venez nombreux pour échanger avec nous sur ces 2 sujets.

Bookmark and Share

Poster un commentaire


Nouveau projet web et mobile réalisé par Boréal : homeswaphome.fr – ou l’échange d’appartement en île de France

août 31st, 2010    Posted in Sortie d'application


La solution logement en île de France

Créée en 2010, la société HomeSwapHome propose aux habitants de Paris / Région parisienne un nouveau concept afin de les aider dans leur recherche de logement.

Explications :

–> Vous publiez une annonce indiquant les caractéristiques de votre logement actuel, notamment la commune et la station de transport en commun la plus proche.

–> Vous indiquez de quelle commune / quartier / station vous souhaitez vous rapprocher.

–>Le moteur de recherche de HomeSwapHome effectue une sélection parmi les annonces et vous propose celles qui vous feront gagner le plus de temps sur vos trajets.

–> Vous pouvez ensuite proposer un échange aux locataires actuels des appartements sélectionnés.

Le travail réalisé par Boréal Business

Nous signons ici l’intégralité du design et de la réalisation technique du projet :
–> Charte graphique et site web dans un premier temps. Un algorithme spécifique a été développé pour l’occasion afin de calculer les gains temps que permet chaque échange de logement.
–> Développement de l’application iPhone dans un second temps, disponible sur l’AppStore sous le nom HomeSwap depuis début Août 2010.
Cette application mobile permet de se connecter à son compte Home Swap Home et de consulter les annonces disponibles en fonction du lieu dont on souhaite se rapprocher. L’application intègre une géolocalisation des biens disponibles à l’échange, une messagerie ainsi qu’une sauvegarde des échanges favoris.
La navigation repose sur un menu très original développé spécifiquement pour ce projet, vous pouvez voir ce que ça donne en regardant la vidéo sur Youtube.

Nous souhaitons un bon départ à Home Swap Home avec son concept novateur.
Si vous aimez le travail de développement que nous avons réalisé, n’hésitez pas à nous contacter pour vos projets, c’est par ici.

Bookmark and Share

Poster un commentaire