[Mobile] Ne pas afficher « Ouvrir dans l'application » dans l'app native #103

Closed
opened 2026-09-08 00:46:58 +02:00 by kyuno · 0 comments
Owner

Résumé

Dans l'app Android packagée, la landing page (/, vue par un visiteur non connecté) affiche le bouton « Ouvrir dans l'application » — qui n'a aucun sens une fois qu'on est déjà dans l'application : le taper tente de relancer l'app via le scheme batchcooking://open, échoue, et retombe sur /telecharger.

Contexte (trouvé en auditant le code, pas supposé)

  • apps/web/src/pages/landing/LandingPage.tsx : le bouton est rendu sous
    {isMobile && ( <button className="landing__cta landing__cta--primary" onClick={handleOpenApp}> … )}.
  • const isMobile = isAndroidPhoneBrowser(); — apps/web/src/lib/mobile-app-redirect.ts :
    return /Android/.test(navigator.userAgent) && /Mobile/.test(navigator.userAgent);.
    C'est une pure détection d'user-agent : la WebView Capacitor contient Android et Mobile, donc isAndroidPhoneBrowser() renvoie true dans l'app native et le bouton s'affiche. Aucun Capacitor.isNativePlatform() dans ce fichier ni dans LandingPage.tsx.
  • Un utilisateur non connecté qui ouvre l'app native atterrit sur LandingPage (apps/web/src/features/auth/RequireAuth.tsx rend <LandingPage /> à /).
  • Le commentaire déjà présent (issue #85) raisonne pourtant en « question de plateforme » — il manque juste l'exclusion du natif.

Contenu attendu

Le bouton « Ouvrir dans l'application » (et le lien /telecharger en variante desktop) ne doivent pas être rendus quand Capacitor.isNativePlatform() est vrai. Réutiliser Capacitor.isNativePlatform() de @capacitor/core — motif déjà utilisé dans main.tsx, pages/settings/AppSettingsPage.tsx, features/app-update/useAppUpdateCheck.ts. Vu que c'est le ~6ᵉ site d'appel, envisager un petit helper isNativeApp() / hook useIsNative dans apps/web/src/lib/.

Couverture : ajouter au spec Cypress de la landing un cas avec Capacitor.isNativePlatform stubbé à true (bouton absent).

Dépendances

Aucune.

## Résumé Dans l'app Android packagée, la landing page (`/`, vue par un visiteur non connecté) affiche le bouton « Ouvrir dans l'application » — qui n'a aucun sens une fois qu'on est déjà *dans* l'application : le taper tente de relancer l'app via le scheme `batchcooking://open`, échoue, et retombe sur `/telecharger`. ## Contexte (trouvé en auditant le code, pas supposé) - `apps/web/src/pages/landing/LandingPage.tsx` : le bouton est rendu sous `{isMobile && ( <button className="landing__cta landing__cta--primary" onClick={handleOpenApp}> … )}`. - `const isMobile = isAndroidPhoneBrowser();` — `apps/web/src/lib/mobile-app-redirect.ts` : `return /Android/.test(navigator.userAgent) && /Mobile/.test(navigator.userAgent);`. C'est une **pure détection d'user-agent** : la WebView Capacitor contient `Android` *et* `Mobile`, donc `isAndroidPhoneBrowser()` renvoie `true` **dans l'app native** et le bouton s'affiche. Aucun `Capacitor.isNativePlatform()` dans ce fichier ni dans `LandingPage.tsx`. - Un utilisateur **non connecté** qui ouvre l'app native atterrit sur `LandingPage` (`apps/web/src/features/auth/RequireAuth.tsx` rend `<LandingPage />` à `/`). - Le commentaire déjà présent (issue #85) raisonne pourtant en « question de plateforme » — il manque juste l'exclusion du natif. ## Contenu attendu Le bouton « Ouvrir dans l'application » (et le lien `/telecharger` en variante desktop) ne doivent **pas** être rendus quand `Capacitor.isNativePlatform()` est vrai. Réutiliser `Capacitor.isNativePlatform()` de `@capacitor/core` — motif déjà utilisé dans `main.tsx`, `pages/settings/AppSettingsPage.tsx`, `features/app-update/useAppUpdateCheck.ts`. Vu que c'est le ~6ᵉ site d'appel, envisager un petit helper `isNativeApp()` / hook `useIsNative` dans `apps/web/src/lib/`. Couverture : ajouter au spec Cypress de la landing un cas avec `Capacitor.isNativePlatform` stubbé à `true` (bouton absent). ## Dépendances Aucune.
kyuno added the
bug
Low
planned
labels 2026-09-08 00:46:58 +02:00
kyuno closed this issue 2026-09-08 04:48:47 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: kyuno/batchCooking#103
No description provided.