fix: phần code build android
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# To AI Agent: Implement Smart Runtime Environment Detection for Backend URL (Eliminate Dynamic .env Conflicts)
|
||||
|
||||
## 1. Context & Objective
|
||||
We want to modify the frontend backend-URL resolution engine **exactly once** so that pulling code to the Linux Debian Server (Docker build) or a Windows PC (Android build) requires zero manual `.env` updates.
|
||||
|
||||
- **The Strategy:** Instead of hardcoding `VITE_BACKEND_URL` in a static `.env` file, we will write a smart runtime detector inside the code.
|
||||
- **The Logic:**
|
||||
- If the app runs on a standard web browser (Docker Server), `window.location.origin` automatically resolves to `https://yotrip.labz.io.vn`.
|
||||
- If the app runs inside an Android APK wrapper, the origin defaults to `http://localhost`, `capacitor://`, or `file://`. The code will detect this and automatically inject the absolute server production URL.
|
||||
|
||||
---
|
||||
|
||||
## 2. Refactoring Blueprint
|
||||
|
||||
### Step 1: Overhaul `socketService.ts` (or your central API configuration file)
|
||||
Replace the current environment variable lookup with this smart dynamic runtime resolver:
|
||||
|
||||
```typescript
|
||||
import { io, Socket } from 'socket.io-client';
|
||||
|
||||
const resolveBackendEndpoint = (): string => {
|
||||
// 1. Keep a fallback for explicit env overrides if deliberately set
|
||||
if (import.meta.env.VITE_BACKEND_URL) {
|
||||
return import.meta.env.VITE_BACKEND_URL;
|
||||
}
|
||||
|
||||
const origin = window.location.origin;
|
||||
const userAgent = navigator.userAgent.toLowerCase();
|
||||
|
||||
/* 2. DETECT ANDROID APK WRAPPER ENVIRONMENT
|
||||
Android webviews/hybrid shells run on custom local hosts or file protocols
|
||||
*/
|
||||
const isAndroidApp =
|
||||
origin.includes('localhost') ||
|
||||
origin.includes('capacitor://') ||
|
||||
origin.startsWith('file://') ||
|
||||
(userAgent.includes('android') && !origin.includes('yotrip.labz.io.vn'));
|
||||
|
||||
if (isAndroidApp) {
|
||||
console.log("📱 Android App environment detected. Forcing absolute production domain mapping.");
|
||||
return '[https://yotrip.labz.io.vn](https://yotrip.labz.io.vn)';
|
||||
}
|
||||
|
||||
// 3. Default fallback for Production Web (Docker server automatically yields its own domain)
|
||||
return origin;
|
||||
};
|
||||
|
||||
export const SOCKET_URL = resolveBackendEndpoint();
|
||||
console.log(`🌐 Active Network Base Endpoint: ${SOCKET_URL}`);
|
||||
|
||||
### Step 2: Sync API Axios Client Configuration (api.ts / axiosClient.ts)
|
||||
Ensure your API client hooks directly into the newly created SOCKET_URL variable to keep them unified:
|
||||
|
||||
import axios from 'axios';
|
||||
import { SOCKET_URL } from './socketService';
|
||||
|
||||
export const api = axios.create({
|
||||
baseURL: SOCKET_URL, // Dynamically synchronizes across both Docker and Android build pipelines
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
|
||||
## 3. Verification Checklist for AI Agent
|
||||
[ ] Eradicate .env Dependency: Ensure that clearing out VITE_BACKEND_URL from local .env files does not cause code compilation failures.
|
||||
|
||||
[ ] Web Browser Verification: When deployed via Docker on the server, verify the network tab calls requests relatively to the running host origin.
|
||||
|
||||
[ ] Android Simulation Success: When compiled into an APK on Windows, confirm all API/Socket requests direct straight to https://yotrip.labz.io.vn, avoiding any localhost 404 blockages.
|
||||
Reference in New Issue
Block a user