Ce guide explique comment faire de l'application mobile LaraClassifier ou de l'application mobile JobClass votre propre application, connectée à votre site LaraClassifier ou JobClass, puis comment la publier sur Google Play et l'App Store. Les deux applications suivent exactement les mêmes étapes ; les quelques différences sont signalées au fil du texte.
Inutile de connaître React Native : vous modifiez deux fichiers de réglages, remplacez l'icône et lancez quelques commandes. Les applications sont compilées dans le cloud par Expo (EAS Build) : vous n'avez besoin ni d'un Mac pour l'application iOS, ni d'Android Studio.
brand.json), sauf mention contraire. Sous Windows, utilisez PowerShell ou le Terminal Windows.
Liste de contrôle
| Il vous faut | Où l'obtenir |
|---|---|
| LaraClassifier ou JobClass 19.1.13 ou plus récent, en HTTPS | Votre site. |
Le jeton d'API de votre site (APP_API_TOKEN) | Le fichier /.env de votre site. |
| Node.js 22.13 ou plus récent | nodejs.org |
| Un compte Expo (gratuit) | expo.dev/signup |
| Un compte Google Play Console | play.google.com/console |
| Une adhésion à l'Apple Developer Program | developer.apple.com/programs |
| L'icône de votre application (PNG 1024 × 1024), des captures d'écran, l'URL de votre politique de confidentialité | Vous. |
| Des comptes de test sur votre site, pour vos propres essais et pour les équipes de validation des stores | Votre site. JobClass : un candidat (avec un CV) et un employeur (avec une entreprise et une offre). |
1. Préparer votre site
- Mettez votre site à jour vers LaraClassifier ou JobClass 19.1.13 ou plus récent.
- Vérifiez le HTTPS : votre site doit s'ouvrir en
https://avec un certificat valide (non auto-signé). Les applications publiées refusent le HTTP simple. - Récupérez le jeton d'API : ouvrez le fichier
/.envà la racine de votre site et copiez la valeur deAPP_API_TOKEN. Si la ligne est absente ou vide, ajoutez une longue valeur aléatoire, par exemple :
puis videz le cache de configuration depuis Panneau d'administration → Clear cache (ou lancezAPP_API_TOKEN=replace-with-a-long-random-valuephp artisan config:clear). - Testez l'API depuis votre ordinateur, avec votre propre adresse et votre jeton :
Vous devez obtenir une réponse JSON qui commence parcurl -H "X-AppApiToken: YOUR_TOKEN" -H "Accept: application/json" https://www.your-website.com/api/categories{"success":true. - Vérifiez
FALLBACK_LOCALE_FOR_DBdans/.env: ce doit être la langue de vos données de catégories et de villes (en généralen), sinon les utilisateurs des autres langues voient des listes vides. - JobClass uniquement : vérifiez les types de contrat (job types) et les types de salaire (salary types) de votre panneau d'administration. Le formulaire de publication exige un type de contrat et une période de paie : il faut donc au moins une entrée active de chaque.
2. Installer le projet
- Décompressez le package téléchargé et ouvrez un terminal dans le dossier de l'application.
- Installez les dépendances :
npm install
3. Connecter l'application à votre site
Copiez .env.example vers un nouveau fichier nommé .env.local (dans le même dossier) et complétez-le :
EXPO_PUBLIC_API_URL=https://www.your-website.com/api
EXPO_PUBLIC_API_TOKEN=your-app-api-token
EXPO_PUBLIC_DEFAULT_COUNTRY=US
EXPO_PUBLIC_LOCALE=en
| Réglage | Valeur |
|---|---|
EXPO_PUBLIC_API_URL | L'adresse de votre site suivie de /api, sans barre oblique finale. Utilisez l'adresse exacte de votre site, avec ou sans www, telle qu'elle s'ouvre dans un navigateur. |
EXPO_PUBLIC_API_TOKEN | Le APP_API_TOKEN de votre site. |
EXPO_PUBLIC_DEFAULT_COUNTRY | Pays affiché au premier lancement (code à 2 lettres). Les utilisateurs peuvent le changer. |
EXPO_PUBLIC_LOCALE | Langue utilisée quand la langue du téléphone n'est pas disponible dans l'application. |
npx expo start --clear, et recompilez l'application pour les stores.
4. Mettre l'application à vos couleurs
brand.json
Ouvrez brand.json et remplacez les valeurs d'exemple. Voici la version LaraClassifier :
{
"name": "My Classifieds",
"slug": "my-classifieds",
"scheme": "myclassifieds",
"version": "1.0.0",
"ios": { "bundleIdentifier": "com.mycompany.classifieds", "buildNumber": "1" },
"android": { "package": "com.mycompany.classifieds", "versionCode": 1 },
"colors": {
"primary": "#141B3D",
"accent": "#2F54EB",
"priceTag": "#FFD23F",
"splashBackground": "#141B3D",
"dark": { "primary": "#F1F3FB", "accent": "#8099FF" }
},
"assets": { ... },
"social": { ... },
"eas": { "projectId": "", "owner": "" }
}
Le fichier de JobClass est identique, avec des exemples orientés emploi ("My Jobs", com.mycompany.jobs) et salaryTag à la place de priceTag.
| Champ | Description |
|---|---|
name | Le nom affiché sous l'icône. Restez court : environ 12 caractères sont visibles sur la plupart des téléphones. |
slug | Nom technique du projet chez Expo. Lettres minuscules, chiffres et tirets. |
scheme | Schéma de lien de l'application (par exemple myclassifieds:// ou myjobs://). Lettres minuscules uniquement, propre à votre application. |
version | Version affichée dans les stores, par exemple 1.0.0. |
ios.bundleIdentifierandroid.package | L'identifiant unique de votre application dans les stores, au format de domaine inversé : com.votresociete.votreapp. Il ne pourra plus jamais être changé après la première publication. Ne gardez pas la valeur d'exemple (com.example.classifieds ou com.example.jobs). |
ios.buildNumberandroid.versionCode | Numéro de build, augmenté à chaque envoi aux stores (voir « Publier des mises à jour » plus bas). |
colors.primary | Boutons, filtres sélectionnés et bouton central des onglets (Vendre sur LaraClassifier, Publier sur JobClass). |
colors.accent | Liens, états actifs et compteurs. |
colors.priceTag (LaraClassifier)colors.salaryTag (JobClass) | L'étiquette de prix des annonces, ou l'étiquette de salaire des offres. La couleur du texte posé sur vos couleurs est choisie automatiquement pour rester lisible. |
colors.splashBackground | Fond de l'écran de lancement. |
colors.dark | Couleurs principale et d'accent en mode sombre. Choisissez des tons clairs, qui restent lisibles sur le fond sombre. |
assets | Chemins de l'icône, de l'icône adaptative, de l'image de lancement et du favicon (voir ci-dessous), et couleur de fond de l'icône adaptative Android. |
social | Identifiants de connexion Google et Facebook. Laissez-les vides pour masquer ces boutons (voir l'article sur les notifications push, la connexion sociale et les liens). |
eas.projectId, eas.owner | Renseignés à l'étape 6. |
Icône et écran de lancement
Remplacez les images d'exemple de assets/brand/ en gardant les mêmes noms de fichiers (ou modifiez les chemins dans brand.json) :
| Fichier | Taille | Contenu |
|---|---|---|
icon.png | 1024 × 1024 | L'icône de l'application (iOS et par défaut). Carrée, sans transparence, sans coins arrondis : le téléphone les arrondit lui-même. |
adaptive-icon.png | 1024 × 1024 | Premier plan de l'icône Android, sur fond transparent. Gardez le logo dans le cercle central de 66 % : Android rogne les bords. |
splash.png | 512 × 512 ou plus | Logo affiché sur l'écran de lancement, sur fond transparent, par-dessus colors.splashBackground. |
favicon.png | 64 × 64 | Icône de la version web (facultative). |
5. Tester sur votre téléphone
- Installez Expo Go depuis l'App Store ou Google Play et connectez-vous avec votre compte Expo.
- Sur votre ordinateur, connectez-vous au même compte et démarrez l'application :
npx expo login npx expo start - Scannez le QR code affiché dans le terminal (avec l'appareil photo sur iPhone, ou depuis Expo Go sur Android). Le téléphone et l'ordinateur doivent être sur le même réseau.
- Vérifiez les écrans principaux :
- LaraClassifier : l'accueil, une recherche et une annonce ; connectez-vous avec un compte de test et publiez une annonce de test avec une photo.
- JobClass : l'accueil, une recherche et une offre ; connectez-vous avec votre compte candidat de test et postulez avec un CV ; puis connectez-vous avec votre compte employeur de test, publiez une offre de test avec un logo d'entreprise, ouvrez la candidature dans Messages et changez son statut.
Si votre site tourne sur votre ordinateur et n'est pas encore en ligne, suivez d'abord les étapes ci-dessous.
Tester avec un site installé sur votre ordinateur
Votre téléphone ne peut pas ouvrir localhost ni les domaines locaux comme my-site.test ou my-site.local (les hôtes virtuels de MAMP, Laragon, Valet, etc.) : ils n'existent que sur votre ordinateur. Le téléphone joint votre ordinateur par son adresse IP sur votre réseau Wi-Fi, le site doit donc répondre sur cette adresse.
- Connectez le téléphone et l'ordinateur au même réseau Wi-Fi. Évitez les réseaux invités : ils empêchent généralement les appareils de communiquer entre eux.
- Trouvez l'adresse IP de votre ordinateur sur le réseau :
Les exemples ci-dessous utilisentSystème Commande macOS ipconfig getifaddr en0(ou Réglages Système → Wi-Fi → Détails)Windows ipconfig, puis relevez l'Adresse IPv4 de votre carte Wi-FiLinux hostname -I(la première adresse)192.168.1.20et le port8000: remplacez-les par les vôtres. - Dans un terminal ouvert dans le dossier du site, videz la configuration en cache :
php artisan config:clear - Démarrez le site de façon à ce que le réseau puisse le joindre, avec
APP_URLréglé sur l'adresse qu'utilisera le téléphone (le site construit à partir d'elle les adresses des photos, des logos, des pages et des liens vers les CV). Choisissez l'une de ces deux méthodes :- Avec
php artisan serve: dans le fichier/.envdu site, réglezAPP_URL=http://192.168.1.20:8000(notez l'ancienne valeur pour la remettre après les tests), relancezphp artisan config:clear, puis démarrez le serveur :php artisan serve --host=0.0.0.0 --port=8000 - Avec le serveur intégré de PHP, sans modifier
/.env: placez-vous dans le dossierpublicdu site et transmettezAPP_URLau seul serveur :
Sous Windows (PowerShell), définissez d'abord la variable :cd public APP_URL=http://192.168.1.20:8000 php -S 0.0.0.0:8000 ../vendor/laravel/framework/src/Illuminate/Foundation/resources/server.phpcd public $env:APP_URL="http://192.168.1.20:8000" php -S 0.0.0.0:8000 ../vendor/laravel/framework/src/Illuminate/Foundation/resources/server.php
- Avec
- Vérifiez la connexion : ouvrez
http://192.168.1.20:8000/api/categoriesdans le navigateur du téléphone. Un court message JSON (même « You don't have access to this API ») signifie que le téléphone atteint votre site. Si la page ne se charge pas, consultez l'article de dépannage. - Dans le fichier
.env.localde l'application, indiquez la même adresse suivie de/api:EXPO_PUBLIC_API_URL=http://192.168.1.20:8000/api - Dans un second terminal, ouvert dans le dossier de l'application, démarrez l'application sur votre réseau et scannez le QR code pour l'ouvrir dans Expo Go :
Sur iPhone, acceptez quand Expo Go demande à rechercher des appareils sur votre réseau local.npx expo start --lan --clear
/.env du site contient IMAGE_DRIVER=imagick et que le PHP en ligne de commande n'a pas l'extension Imagick, le site n'accepte plus aucun format d'image. Pendant les tests, réglez IMAGE_DRIVER=gd dans le /.env du site (ou installez Imagick pour le PHP en ligne de commande), lancez php artisan config:clear, puis redémarrez le serveur.
APP_URL et EXPO_PUBLIC_API_URL. Les serveurs qui choisissent le site d'après son nom de domaine (hôtes virtuels) ne répondent souvent pas sur l'adresse IP, ce que les deux méthodes ci-dessus évitent.
http. Une fois les tests terminés, arrêtez le serveur (Ctrl+C), remettez l'APP_URL d'origine du site si vous l'aviez changé, et réglez EXPO_PUBLIC_API_URL sur votre site en ligne en HTTPS avant de compiler l'application pour les stores.
6. Configurer les builds Expo
- Installez l'outil en ligne de commande EAS et connectez-vous :
npm install --global eas-cli eas login - Créez le projet chez Expo :
eas initeas initaffiche un identifiant de projet. Copiez-le dansbrand.json, avec le nom de votre compte Expo (ou de votre organisation) comme propriétaire :
Si"eas": { "projectId": "1a2b3c4d-...", "owner": "your-expo-account" }eas initpropose de modifier automatiquement la configuration de l'application, répondez non : la configuration est générée à partir debrand.json.
Les profils de build sont déjà définis dans eas.json : preview produit un APK Android à installer directement sur les téléphones, production produit les fichiers destinés aux stores.
7. Compiler une version de test
Compilez un APK Android que vous et vos testeurs installez directement, sans passer par les stores :
eas build --platform android --profile preview
À la fin du build (10 à 20 minutes), EAS affiche un lien et un QR code pour télécharger l'APK. Pour tester sur iOS, utilisez TestFlight (voir l'étape 9). Les versions de test reçoivent aussi les notifications push et gèrent la connexion sociale, ce que ne fait pas Expo Go sur Android.
8. Publier sur Google Play
- Compilez l'Android App Bundle :
Au premier build, EAS crée et conserve la clé de signature de votre application : répondez oui quand il propose de générer un keystore.eas build --platform android --profile production - Dans la Google Play Console, créez l'application (nom, langue par défaut, application, gratuite).
- Complétez la section Contenu de l'application : URL de la politique de confidentialité (la page de confidentialité de votre site), publicités, accès à l'application (fournissez vos comptes de test : les équipes de validation doivent pouvoir se connecter), questionnaire de classification du contenu, public cible et sécurité des données (voir les conseils ci-dessous). Pour JobClass, choisissez la catégorie Business (Entreprise).
- Complétez la fiche Play Store : description courte et complète, icône (512 × 512), image de présentation (1024 × 500) et captures d'écran sur téléphone.
- Envoyez le build : téléchargez le fichier
.aabdepuis la page du build EAS et envoyez-le dans Tests → Tests internes (conseillé pour commencer), puis faites-le passer en Production. Une fois la première version envoyée à la main et une clé de compte de service Google configurée, vous pouvez aussi envoyer les builds aveceas submit --platform android(guide Expo).
9. Publier sur l'App Store
- Dans App Store Connect, créez l'application avec le même identifiant de bundle que
ios.bundleIdentifierdansbrand.json. - Compilez l'application iOS :
EAS demande votre compte Apple et crée pour vous les certificats et le profil de provisionnement.eas build --platform ios --profile production - Envoyez le build à App Store Connect :
eas submit --platform ios - Une fois traité par Apple, le build apparaît dans TestFlight. Installez-le sur votre iPhone avec l'application TestFlight et testez-le.
- Complétez la page de l'application : description, mots-clés, catégorie principale (Business pour JobClass), URL d'assistance, URL de la politique de confidentialité, captures d'écran (iPhone 6,9" et 6,5", iPad 13"), réponses App Privacy (confidentialité), classification par âge, et dans App Review Information vos comptes de test (e-mail et mot de passe) avec une note expliquant que l'application est le compagnon de votre site.
- Sélectionnez le build et soumettez-le à la validation.
Conseils pour la validation dans les stores
- Comptes de test : fournissez un compte qui fonctionne, avec quelques annonces et messages (LaraClassifier), ou deux comptes pour montrer les deux côtés de l'application (JobClass) : un candidat avec un CV, et un employeur avec une entreprise, des offres et des candidatures. Une soumission sans connexion fonctionnelle est refusée.
- Contenu de votre site : les équipes de validation regardent vos annonces ou vos offres. Retirez le contenu de test ou de remplissage (lorem ipsum, faux prix, fausses entreprises, faux salaires) avant de soumettre.
- Contenu créé par les utilisateurs : Apple et Google exigent des conditions d'utilisation acceptées par les utilisateurs, un moyen de signaler un contenu choquant, un moyen de bloquer les utilisateurs abusifs, et un moyen pour vous de traiter les signalements. L'application a tout cela : acceptation des conditions à l'inscription, Signaler sur chaque annonce ou offre, Bloquer sur les annonces ou offres et dans les conversations, et votre panneau d'administration pour retirer du contenu et bannir des utilisateurs. Vérifiez que votre site a une page de type Terms et une de type Privacy (Panneau d'administration → Pages), et mentionnez ces fonctions dans les notes de validation.
- Suppression du compte : exigée par les deux stores, disponible dans Compte → Supprimer mon compte.
- Réponses sur la confidentialité (App Privacy / Sécurité des données) : l'application envoie à votre site les données saisies par l'utilisateur pour fournir le service (nom, e-mail, téléphone, photos, annonces et messages ; sur JobClass, également les informations et logos d'entreprise, les CV et les lettres de motivation). Elle ne contient aucun SDK tiers d'analyse ou de publicité. En tant qu'exploitant du site, vous êtes responsable de ces réponses.
- Promotion payante sur iOS : Promouvoir n'apparaît que sur Android. Apple impose son propre système d'achat intégré pour les services numériques vendus dans les applications iOS : l'application iOS n'a donc ni paiement ni lien vers un paiement. Ne mentionnez pas les offres premium ni les annonces ou offres d'emploi payantes dans votre description App Store, vos captures d'écran ou vos notes de validation : les utilisateurs iOS les achètent sur le site.
- Nom et icône : ils doivent vous appartenir. N'utilisez pas le nom ni le logo d'autres marques.
Fiche dans les stores
- Dites dès les premières lignes ce que l'utilisateur y gagne : acheter et vendre près de chez lui (LaraClassifier), ou trouver un emploi près de chez lui, postuler avec son CV en quelques gestes et suivre ses candidatures, et pour les employeurs, publier des offres et répondre aux candidats où qu'ils soient (JobClass).
- Montrez les écrans qui donnent envie : l'accueil avec le contenu à la une, une recherche avec filtres, la page d'une annonce ou d'une offre et, pour JobClass, le formulaire de candidature avec un CV et le statut de la candidature dans Messages.
- Employez les mots-clés que les gens recherchent (petites annonces ou emploi, votre ville ou votre pays, votre niche ou votre secteur) et le nom de votre site.
- Montrez votre propre marque et du vrai contenu de votre site sur les captures d'écran, pas le nom d'exemple de l'application.
Publier des mises à jour
Pour publier une nouvelle version de votre application (nouvelle version du produit, nouvelle icône, nouvelles couleurs) :
- Augmentez les numéros dans
brand.json:version(par exemple1.0.1),ios.buildNumber(par exemple"2") etandroid.versionCode(par exemple2). Les stores refusent un numéro de build déjà reçu. - Compilez et soumettez à nouveau (étapes 8 et 9).
Les modifications faites sur votre site (catégories, types de contrat, réglages, langues, contenus) ne demandent pas de mise à jour de l'application.
Passer à une nouvelle version du produit
- Gardez une copie de votre
brand.json, de.env.localet deassets/brand/, ainsi que de tout fichier que vous avez modifié. - Remplacez les autres fichiers par ceux de la nouvelle version, puis remettez vos fichiers en place.
- Lancez
npm install, lisez le ChangeLog fourni dans le dossierdocs/du téléchargement (certaines versions exigent un LaraClassifier ou un JobClass plus récent), testez, puis publiez.
Pour aller plus loin
- Application mobile : notifications push, connexion sociale et liens vers l'application : les réglages supplémentaires pour les notifications push, la connexion Google et Facebook, et les liens qui s'ouvrent dans l'application.
- Dépannage de l'application mobile : que vérifier quand l'application ne se connecte pas, qu'un envoi échoue ou qu'un build ne fonctionne pas.
- Les fonctionnalités de chaque application : Application mobile LaraClassifier : guide d'utilisation et Application mobile JobClass : guide d'utilisation.