Liens utiles

  • Google Play Console : publier l'application sur le Play Store (Android)
  • Apple Developer : gérer l'application sur iOS
  • La publication de l'application nécessite un Mac et un iPhone, celle-ci se fait par l'intermédiaire de Xcode
  • Console Firebase : pour gérer Cloud Messaging, App Distribution et Dynamic Links

1. Configuration de l'application

Cloner le dépôt et se rendre à la racine du projet.

git clone git@forge.com:flutter-project.git

Créer le fichier d'environnement.

cp .env.example .env

Le remplir avec les données suivantes pour la pré-prod :

Note : en mode debug, l'application pré-remplira les champs de connexion à l'application, les champs APP_INVESTOR_EMAIL & APP_INVESTOR_PASSWORD ne sont donc utiles qu'en mode debug

API=https://domain.com
APP_INVESTOR_EMAIL=use@mail.com
APP_INVESTOR_PASSWORD=password
DEBUG_RELEASE=false

Télécharger les dépendances de pub.

flutter pub get

Lancer l'application sur un émulateur ou sur un appareil Android branché sur votre machine. Il est possible de lancer l'application depuis Visual Studio Code si vous le souhaitez.

flutter run

En cas de problème

Si vous rencontrez des problèmes, à n'importe quel moment, vous pouvez exécuter les commandes suivantes avant de relancer flutter run

flutter clean ; flutter pub get

2. Connexion à l'API

Utilisez de préférence une API déployée, que ce soit la pré-prod ou la prod.

TODO: ngrok, expose, method to get images

2. a. Communication entre Laravel & Flutter

TODO: Laravel transformers, flutter models


3. Firebase

Firebase est un service de Google proposant plusieurs offres pour divers supports mais surtout pour les applications Android & iOS, le support de Flutter est aussi assuré.

  • Console Firebase : gérer les notifications push avec Cloud Messaging
  • FlutterFire : documentation de FlutterFire qui permet de faire communiquer Flutter avec Firebase.

Firebase est utilisé sur l'application pour les *notifications push- avec Cloud Messaging, la distribution de versions de tests avec *App Distribution- et le deep linking avec Dynamic Links, tous ces services étant disponibles dans la console de Firebase du projet com-group-project.

# 3. a. Notifications push

Faites avec Firebase Cloud Messaging, vous pouvez trouver davantage d'informations sur Notifications push.


3. b. Deep linking

Le deep-linking est la solution à un problème simple : la redirection de l'utilisateur en fonctionne de la plateforme. Si l'utilisateur se trouver sur un navigateur de desktop, le lien vers l'application le redirigera vers le Store concerné, alors que si l'utilisateur se trouve sur un navigateur de mobile, le lien ouvrira l'application si elle est installée ou directement le Store pour la télécharger.

Le but est de garder l'utilisateur dans l'environnement de l'application et lui demander le moins d'efforts possibles. Il est donc possible d'envoyer des payloads par ces redirections pour ouvrir directement une page dans l'application.

Il peut être complexe de mettre en place le deep-linking, par conséquent Firebase offre un service : *Dynamic Links- pour permettre de le faire facilement.

TODO: plugins flutter, firebase dynamic links

4. Déploiement

Avant tout déploiement, il est fortement conseillé d'exécuter un clean du projet.

flutter clean
flutter pub get

Android & iOS

Déployer une application sur Android peut être assez long mais par rapport au déploiement iOS, il devient presque facile. Mais peu importe le support, c'est un processus qui est long et compliqué, il demande également de mettre des fichiers de certificats et des clés en place ce qui peut être délicat.

4. a. Versioning

Toute application est versionnée, tant que celle-ci n'est pas publiée, la version n'est utile que pour distinguer vos différentes releases de test mais lorsque vous rentrerez en phase de publication, il sera nécessaire de versionner systématiquement vos changements en suivant une forme de versioning comme le semantic versioning .

Vous trouverez la version de l'application dans le pubspec.yaml à la racine du projet Flutter. Celle-ci est divisée en deux parties, la version et le build number. Le plus important est la version, le build number pouvant être incrémenté à chaque nouvelle release.

version: 0.9.3+28

Extrait des informations disponibles dans le pubspec.yaml

The following defines the version and build number for your application. A version number is three numbers separated by dots, like 1.2.43 followed by an optional build number separated by a +. Both the version and the builder number may be overridden in flutter build by specifying --build-name and --build-number, respectively. In Android, build-name is used as versionName while build-number used as versionCode. Read more about Android versioning at https://developer.android.com/studio/publish/versioning . In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. Read more about iOS versioning at [https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html"(https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html)

4. b. Clés

Les clés doivent toujours être gardées en lieu sûr afin de publier l'application.

TODO

ios/Runner/Info.plist
<key>LSSupportsOpeningDocumentsInPlace</key>
<true />
<key>UIFileSharingEnabled</key>
<true />

In iOS 11 and later, if both this keys LSSupportsOpeningDocumentsInPlace and the UIFileSharingEnabled key are YES, the local file provider grants access to all the documents in the app’s Documents directory. These documents appear in the Files app, and in a document browser. Users can open and edit these document in place.

ios/Runner/GoogleService-Info.plist

Add Google-Info.plist

Width of screen

LINKS

cmds

  • adb shell setprop debug.firebase.analytics.app com.group.project.flutter
  • adb shell setprop debug.firebase.analytics.app .none.
  • adb shell setprop log.tag.FA VERBOSE
  • Connect to developer.apple.com with user@mail.com (you will need a code from phone number linked to account)

Connect to Xcode with user@mail.com (you will need another code from phone number)

  • Xcode -> Preferences -> Accounts -> Check if account exist in list -> If not click on + to create new account
  • It will create an Apple Developer certificate on developer.apple.com
  • Generate certificate with Keychain Access app
  • Keychain Access >> Certificate Assistant >> Request a Certificate From a Certificate Authority
  • Select save on disk option
  • Create a Apple distribution certificate on developer.apple.com, drag an drop certificate from Keychain and continue to create certificate

In Identifiers

  • Create App ID, select App, enter a small description and in Bundle ID enter package name: com.group.project.flutter
  • Select Accesss Wifi informations, Push Notifications

For Apple Push Notifs

  • Create a new Key with Apple Push Notifications service enabled with a name reference the app (not really important)
  • Continue, Register and Download it: you can't download it twice, keep it safe
  • Current key: 39674F8RAV, deploy/apple/AuthKey_39674F8RAV.p8