963d02a265
Iran-safe push for the Koja Android app (Cafe Bazaar / Myket / direct APK):
Backend
- PushDevice entity + EF migration; idempotent device register/unregister.
- IPushSender / PusheNotificationSender (Pushe REST) — SendToTopic for
marketing (city-{slug}) and saved-café (cafe-{slug}) pushes, SendToTokens
for targeted order/reservation updates.
- Public register/unregister endpoints + authorized topic broadcast.
App
- capacitor.config.ts (native WebView loads the live PWA via server.url).
- push.ts Pushe glue: topic helpers + backend device registration.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import type { CapacitorConfig } from "@capacitor/cli";
|
|
|
|
/**
|
|
* Capacitor native-shell config for Koja (کجا).
|
|
*
|
|
* Strategy: the app is an SSR/ISR Next.js site, so we do NOT bundle a static
|
|
* export. Instead the native WebView loads the live hosted PWA via `server.url`.
|
|
* Content updates ship instantly (no store re-publish); only native changes
|
|
* (push SDK, splash, permissions) require a new APK/AAB.
|
|
*
|
|
* Stores: Cafe Bazaar + Myket + direct APK. (No Google Play / FCM — Iran.)
|
|
* Push: Pushe (cordova-plugin-pushe), consumed through Capacitor.
|
|
*/
|
|
const config: CapacitorConfig = {
|
|
appId: "ir.meezi.koja",
|
|
appName: "کجا",
|
|
// `webDir` is required by the CLI but unused when `server.url` is set.
|
|
webDir: "public",
|
|
server: {
|
|
// Production PWA the WebView loads. Override per-build with CAP_SERVER_URL.
|
|
url: process.env.CAP_SERVER_URL ?? "https://koja.meezi.ir",
|
|
cleartext: false,
|
|
androidScheme: "https",
|
|
},
|
|
android: {
|
|
allowMixedContent: false,
|
|
backgroundColor: "#f9fafb",
|
|
},
|
|
plugins: {
|
|
SplashScreen: {
|
|
launchShowDuration: 1200,
|
|
backgroundColor: "#0F6E56",
|
|
androidScaleType: "CENTER_CROP",
|
|
showSpinner: false,
|
|
},
|
|
},
|
|
};
|
|
|
|
export default config;
|