- Installations et mises à jour seulement sur action de l’utilisateur - Store privé - Gestion de droits d’accès pour certaines app - Idem MAM - Possible de forcer l’installation et les MaJ des applications - Contrôle complet de l’appareil Store public Mobile Application Manager Mobile Device Manager 10
d’une icone dans le launcher Android Pas d’icone dans le launcher Pas d’icone dans le launcher Peut être lancée via une uri scheme cosmo://regul Peut être lancée via une uri scheme cosmo://control 13
responsables de leur redirection interne Activity landpage Activity choix du train Activity contrôle de billet app-main app-control cosmo:// control Redirection transparente en fonction du contexte 15
réseau • Exemple de la réception de notification FCM app-main Push notification FCM app-regul app-control ... Contenu notif broadcasté à toutes les apps 25
RemoteMessage) { val messsageData = remoteMessage.data val type = messsageData[NOTIFICATION_TYPE] val body = messsageData[NOTIFICATION_BODY] val intent = buildBroadcastIntent(type, body) val permission = getString(R.string.notification_permission) sendBroadcast(intent, permission) } } 26
• Message broadcast Attention à la priority dans la cas où de nombreux messages sont envoyés • Versionning des interactions entre les apps Dans le cas où des vieilles applications peuvent cohabiter : mettre en place un versionning sur les uri des ContentProvider, les Uri Scheme etc... 30
découpage de l’application : déplacer une feature d’un apk à un autre est très compliqué, minimiser les interactions entre chaque application • Sensibiliser l’ensemble de l’équipe (pas seulement les devs) au découpage choisi pour éviter les incompréhensions 31
de faire des tests de compatibilité entre les différentes versions. Certains scopes fonctionnels sont bel et bien isolés et n’ont pas besoin d’être testés à chaque livraison 32
finishedConsumerSet.containsAll(consumerSet) -> { onTaskFinished() } // at least one consumer has failed !Collections.disjoint(consumerSet, failedConsumerSet) -> { onTaskFailed() } 46