feat(clients): scaffold mobile (Capacitor) + desktop (Electron) shells
Plan + decisions in CLIENTS.md (parallel mobile+desktop; desktop = technician client + existing remote-control agent host; mobile = Capacitor wrap). - desktop/: Electron technician client — loads the live Connect UI, native screen capture via setDisplayMediaRequestHandler, persisted session, external links to browser; electron-builder config for Win/Mac/Linux installers. - mobile/: Capacitor project — server.url loads Connect UI, push/camera/status-bar plugins declared, www splash fallback; iOS/Android added via `cap add`. - Reuses the existing /api/v1 + Bearer auth backend; no web-code changes. - .gitignore: ignore generated mobile/android, mobile/ios platform dirs. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Cette révision appartient à :
@@ -0,0 +1,39 @@
|
||||
# Biz Connect — Mobile app (Capacitor)
|
||||
|
||||
A Capacitor shell that loads the live Connect web UI (`server.url` in
|
||||
`capacitor.config.json`) and adds native push, camera/mic, and store distribution. See the
|
||||
overall plan in [../CLIENTS.md](../CLIENTS.md).
|
||||
|
||||
## Prerequisites
|
||||
- Node + `npm install` here.
|
||||
- **Android:** Android Studio + SDK.
|
||||
- **iOS:** macOS + Xcode (+ an Apple Developer account to run on device / ship).
|
||||
|
||||
## Setup
|
||||
```bash
|
||||
npm install
|
||||
npx cap add android
|
||||
npx cap add ios # macOS only
|
||||
npx cap sync
|
||||
```
|
||||
|
||||
## Run / build
|
||||
```bash
|
||||
npx cap open android # build & run from Android Studio
|
||||
npx cap open ios # build & run from Xcode
|
||||
```
|
||||
|
||||
## Server origin
|
||||
The app loads `server.url` from `capacitor.config.json` (default
|
||||
`https://remote.bizgaze.com`). For a local device test against a dev server, set it to your
|
||||
machine's LAN URL (and allow cleartext for plain http).
|
||||
|
||||
## Native push (next step)
|
||||
Native push uses the Capacitor Push Notifications plugin (FCM on Android, APNs on iOS) and a
|
||||
server endpoint to register device tokens — tracked in [../CLIENTS.md](../CLIENTS.md) Phase B.
|
||||
This is separate from the existing Web Push (VAPID) the PWA already uses. Needs Google/Apple
|
||||
credentials to test end-to-end.
|
||||
|
||||
## Shipping (gated on accounts)
|
||||
- **Google Play:** one-time $25; upload an AAB; signing key.
|
||||
- **App Store:** Apple Developer $99/yr; archive via Xcode; App Store Connect listing.
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"appId": "com.bizgaze.connect",
|
||||
"appName": "Biz Connect",
|
||||
"webDir": "www",
|
||||
"server": {
|
||||
"url": "https://remote.bizgaze.com",
|
||||
"cleartext": false,
|
||||
"androidScheme": "https"
|
||||
},
|
||||
"plugins": {
|
||||
"PushNotifications": {
|
||||
"presentationOptions": ["badge", "sound", "alert"]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "biz-connect-mobile",
|
||||
"version": "0.1.0",
|
||||
"description": "Biz Connect mobile app — Capacitor shell loading the Connect web UI",
|
||||
"scripts": {
|
||||
"sync": "cap sync",
|
||||
"android": "cap open android",
|
||||
"ios": "cap open ios"
|
||||
},
|
||||
"dependencies": {
|
||||
"@capacitor/android": "^6.1.0",
|
||||
"@capacitor/app": "^6.0.0",
|
||||
"@capacitor/camera": "^6.0.0",
|
||||
"@capacitor/core": "^6.1.0",
|
||||
"@capacitor/ios": "^6.1.0",
|
||||
"@capacitor/push-notifications": "^6.0.0",
|
||||
"@capacitor/status-bar": "^6.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@capacitor/cli": "^6.1.0"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<!doctype html>
|
||||
<!-- Capacitor requires a webDir with an index. At runtime the app loads the live Connect UI
|
||||
via server.url in capacitor.config.json, so this is only a launch splash / offline
|
||||
fallback. To ship fully-bundled (offline-launch) later, copy ../server/public here and
|
||||
drop server.url. -->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||||
<title>Biz Connect</title>
|
||||
<style>
|
||||
html,body{height:100%;margin:0;background:#0f1830;color:#fff;font-family:system-ui,Segoe UI,Roboto,sans-serif;}
|
||||
.wrap{height:100%;display:grid;place-items:center;text-align:center;padding:2rem;}
|
||||
h1{font-size:1.4rem;margin:.4rem 0;} p{opacity:.7;font-size:.9rem;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<div>
|
||||
<h1>Biz <span style="color:#f5b301">Connect</span></h1>
|
||||
<p>Connecting…</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Référencer dans un nouveau ticket
Bloquer un utilisateur