Going NATIVE
A fast growing community
A global phenomenon
Historique	
  Mobile
Première	
  version	
  en	
  2009	
  en	
  webview	
  
First apps
Natif
Webview
Natif
Avantages
Une	
  seule	
  base	
  de	
  code	
  
!
!
Mise	
  à	
  jour	
  sans	
  nouvelles	
  soumissions	
  
!
!
Le	
  w...
Quelques	
  screenshots
Tout	
  le	
  monde	
  adore	
  !
…	
  en	
  2010	
  !
Mais maintenant …
…
État des apps en 2013 …
It does the job…
but it can be better !
//Flat Design & iOS 7
Technologies dépassée
Refonte totale du site principal !
…
sur lequel se basent les apps mobiles
V3 : Symfony + ElasticSearch
Conclusion
- we need a FULL redesign -
Why Native ?
Why Native ?
- UI plus adaptée
- Meilleures performances
- API demandée par les partenaires
- Accès aux fonctions avancées...
Archi
!
Full-native OAuth2 + REST
Quelques	
  screenshots
Problématique
On souhaite garder la flexibilité d’un site web
(traductions)
!
L’app existante dispose de beaucoup de
fonct...
BBLocalization !
- Fichiers JSON 

- Clés "significatives" : écran.vue.element.trad
- Traductions chargées au démarrage ->...
Gestion des traductions
Mise à jour des trads sans re-soumission !
Dev + Prod
S3
BBLocalization : avantages
- Possibilité de dissocier la langue de l’app et du
device
- Correction des lacunes de NSLocali...
Soft Launch
Spécificités @BlaBlaCar :
Feature spread between countries : 

- Booking

- Non-Booking

Nouveaux pays réguliè...
Soft Launch
-(void) loadAppWithOptions:(NSDictionary *)launchOptions
{
[self loadVersionOnce];
BOOL isV3 = [[BBDATA config...
Roadmap
21/03 09/04 16/04 21/04
Easter
Prod
Non booking
April
23/04 30/04
March May June
16/06 30/06 07/07
Continue develo...
Et	
  pour	
  la	
  France	
  ?	
  
Le	
  plus	
  gros	
  pays
=	
  Utilisateurs	
  les	
  plus	
  exigeants
+	
  Système	...
BBRolloutManager
-(BOOL) canOpenV3
{
if (BBDATA.configuration.isV3) {
// Bypass :
[self recordV3Rollout];
return YES;
}	

...
BBRolloutManager
-(void) rollOutTreatment
{
NSNumber *rollOutValue = [[NSUserDefaults standardUserDefaults]
objectForKey:R...
BBRolloutManager
-(void) recordV3Rollout
{
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:ROLLOUT_VERIFIED
];
[...
Rollout
Résultats
Résultats
FeedBacks
Système	
  de	
  tirage	
  au	
  sort	
  pour	
  les	
  «	
  anciens	
  »	
  
Nouvelle	
  version	
  automatique...
We’re hiring!
-­‐>	
  Android	
  Developer	
  ;-­‐)	
  
-­‐>	
  Product	
  Manager
Erwann ROBIN
iOS Developer
@Diwann
Thanks!
Prochain SlideShare
Chargement dans…5
×

BlaBlaCar - Going Native !

1 053 vues

Publié le

Comment migrer d'une web-app vers une app native ?

Publié dans : Mobile
0 commentaire
2 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 053
Sur SlideShare
0
Issues des intégrations
0
Intégrations
20
Actions
Partages
0
Téléchargements
16
Commentaires
0
J’aime
2
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

BlaBlaCar - Going Native !

  1. 1. Going NATIVE
  2. 2. A fast growing community
  3. 3. A global phenomenon
  4. 4. Historique  Mobile Première  version  en  2009  en  webview  
  5. 5. First apps Natif Webview Natif
  6. 6. Avantages Une  seule  base  de  code   ! ! Mise  à  jour  sans  nouvelles  soumissions   ! ! Le  web  est  le  coeur  de  métier  de  BlaBlaCar    
  7. 7. Quelques  screenshots
  8. 8. Tout  le  monde  adore  !
  9. 9. …  en  2010  !
  10. 10. Mais maintenant …
  11. 11.
  12. 12. État des apps en 2013 … It does the job… but it can be better ! //Flat Design & iOS 7
  13. 13. Technologies dépassée Refonte totale du site principal ! … sur lequel se basent les apps mobiles
  14. 14. V3 : Symfony + ElasticSearch
  15. 15. Conclusion - we need a FULL redesign -
  16. 16. Why Native ?
  17. 17. Why Native ? - UI plus adaptée - Meilleures performances - API demandée par les partenaires - Accès aux fonctions avancées du device - Gestion d’un mode offline
  18. 18. Archi ! Full-native OAuth2 + REST
  19. 19. Quelques  screenshots
  20. 20. Problématique On souhaite garder la flexibilité d’un site web (traductions) ! L’app existante dispose de beaucoup de fonctionnalités
 On veut déployer le plus vite possible
  21. 21. BBLocalization ! - Fichiers JSON 
 - Clés "significatives" : écran.vue.element.trad - Traductions chargées au démarrage -> dict - Récupération des nouvelles trads à chaque lancement - Interface web simplifiée : http://openl10n.io #define  BBLocalizedString(key,  comment)     [BBLocalization  localizedStringForKey:key  comment:comment]
  22. 22. Gestion des traductions Mise à jour des trads sans re-soumission ! Dev + Prod S3
  23. 23. BBLocalization : avantages - Possibilité de dissocier la langue de l’app et du device - Correction des lacunes de NSLocalizable : - Gestion des pluriels - Ordre des paramètres - Gestion de configs dev / prod - Même format Android / iOS
  24. 24. Soft Launch Spécificités @BlaBlaCar : Feature spread between countries : 
 - Booking
 - Non-Booking
 Nouveaux pays régulièrement => Rollout Progressif par config
  25. 25. Soft Launch -(void) loadAppWithOptions:(NSDictionary *)launchOptions { [self loadVersionOnce]; BOOL isV3 = [[BBDATA configuration] isV3]; UIViewController *rootVC = nil; if (isV3) { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil]; rootVC = [storyboard instantiateInitialViewController]; UINavigationController *nvc = (UINavigationController *)rootVC; } else { rootVC = [[BlaBlaCarViewController alloc] initWithNibName:@"BlaBlaCarViewController" bundle:nil]; if([self needsCleaning]){ [self cleanEverything:rootVC]; } [self managePush:(BlaBlaCarViewController*)rootVC withOptions: launchOptions]; } [self.window setRootViewController:rootVC]; }
  26. 26. Roadmap 21/03 09/04 16/04 21/04 Easter Prod Non booking April 23/04 30/04 March May June 16/06 30/06 07/07 Continue developing booking & improve non-booking Internal release Beta Non booking Beta Booking Prod Booking Internal release July
  27. 27. Et  pour  la  France  ?   Le  plus  gros  pays =  Utilisateurs  les  plus  exigeants +  Système  de  réservation   +  Paiement  en  ligne =>  Rollout  progressif  par  tirage  au  sort +  maitrise  de  la  charge  serveur
  28. 28. BBRolloutManager -(BOOL) canOpenV3 { if (BBDATA.configuration.isV3) { // Bypass : [self recordV3Rollout]; return YES; } return [self checkRollOut]; } ! ! -(BOOL) checkRollOut { if ([[NSUserDefaults standardUserDefaults] boolForKey:ROLLOUT_VERIFIED] ) { return YES; } [self rollOutTreatment]; return NO; }
  29. 29. BBRolloutManager -(void) rollOutTreatment { NSNumber *rollOutValue = [[NSUserDefaults standardUserDefaults] objectForKey:ROLLOUT_VALUE]; if (!rollOutValue) { int random = 1 + arc4random()%100; //1+random(0..99) rollOutValue = [NSNumber numberWithInt:random]; [[NSUserDefaults standardUserDefaults] setValue:rollOutValue forKey: ROLLOUT_VALUE]; } // […] DownLoadFile if (!error) { [self completeRolloutForRandomValue:rollOutValue]; } } ! ! ! !
  30. 30. BBRolloutManager -(void) recordV3Rollout { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:ROLLOUT_VERIFIED ]; [[NSUserDefaults standardUserDefaults] synchronize]; } ! ! - (void) completeRolloutForRandomValue:(NSNumber *)value { NSDictionary *dict = [self getDictionaryFrom:[self getRollOutFilePath]]; if (value and dict) { NSNumber *number = [dict objectForKey:ROLLOUT_VALUE]; if ([value intValue]<=[number intValue]) { [self recordV3Rollout]; } } }
  31. 31. Rollout
  32. 32. Résultats
  33. 33. Résultats
  34. 34. FeedBacks Système  de  tirage  au  sort  pour  les  «  anciens  »   Nouvelle  version  automatique  pour  les  nouveaux Beaucoup  de  maj  sans  nouveautés  pour  les  non-­‐élus Ne  pas  annoncer  le  switch  trop  tôt  :  crée  de  l’attente
  35. 35. We’re hiring! -­‐>  Android  Developer  ;-­‐)   -­‐>  Product  Manager
  36. 36. Erwann ROBIN iOS Developer @Diwann Thanks!

×