Files
psp_panel/WEBVIEW_BRIDGE.md
T
ahasani 822bf96966 feat: add new form field components for company details and consumer management
- Implemented CompanyNameComponent, DescriptionComponent, DeviceIdComponent, EconomicCodeComponent, EmailComponent, FirstNameComponent, FiscalCodeComponent, GuildIdComponent, LastNameComponent, LegalNameComponent, LicenseStartsAtComponent, MobileComponent, MobileNumberComponent, ModelComponent, NameComponent, NationalCodeComponent, NationalIdComponent, PartnerTokenComponent, PosTypeComponent, PostalCodeComponent, ProviderIdComponent, QuantityComponent, RegistrationCodeComponent, RegistrationNumberComponent, SerialNumberComponent, SetOffComponent, SkuComponent, TerminalComponent, UnitPriceComponent, UsernameComponent.
- Added field control configurations for new fields in the form.
- Updated routing and branding configurations for TIS tenant.
- Created consumer type models for handling individual and legal consumer data.
2026-04-27 21:53:11 +03:30

133 lines
2.8 KiB
Markdown

# WebView Bridge Contract
This document defines the Android WebView bridge contract used by tenant builds like `tis`.
## Scope
- The bridge is enabled per tenant via `environment.enableNativeBridge`.
- Current tenant config:
- `src/environments/environment.tis.ts` -> `enableNativeBridge: true`
- other environments -> `false`
## JavaScript host objects
The web app checks bridge methods on:
1. `window.AndroidBridge`
2. `window.Android` (fallback)
Your Android app can expose either one.
## Required native methods
Expose these synchronous methods through `@JavascriptInterface`:
- `pay(payloadJson: String): String`
- `print(payloadJson: String): String`
Both methods must return a JSON string.
## Return JSON format
Success:
```json
{
"success": true,
"data": {}
}
```
Failure:
```json
{
"success": false,
"error": "Reason message"
}
```
If a non-JSON string is returned, the app treats it as success with raw data.
## Payload schemas
### pay(payload)
Called before invoice submit when terminal amount is greater than zero.
```json
{
"amount": 1200000,
"totalAmount": 3500000,
"invoiceDate": "2026-04-27T10:30:00.000Z"
}
```
Fields:
- `amount` number: terminal payment amount.
- `totalAmount` number: full invoice total.
- `invoiceDate` string: ISO date-time.
### print(payload)
Called after successful invoice creation (and from invoice view print action).
```json
{
"invoiceId": "a7e1f2...",
"code": "INV-1745730090000"
}
```
Fields are optional, but should be used when available.
## Web behavior summary
- On native pay failure:
- Invoice submit is stopped.
- User sees warning toast.
- On native print failure or missing bridge:
- In invoice page, app falls back to `window.print()`.
- In POS checkout flow, print failure does not block successful submit.
## Android integration example (Kotlin)
```kotlin
class AndroidBridge(
private val context: Context
) {
@JavascriptInterface
fun pay(payloadJson: String): String {
return try {
// TODO: parse payloadJson and run POS payment SDK synchronously
"""{"success":true,"data":{"txId":"12345"}}"""
} catch (e: Exception) {
"""{"success":false,"error":"${e.message ?: "Payment failed"}"}"""
}
}
@JavascriptInterface
fun print(payloadJson: String): String {
return try {
// TODO: parse payloadJson and print with printer SDK
"""{"success":true}"""
} catch (e: Exception) {
"""{"success":false,"error":"${e.message ?: "Print failed"}"}"""
}
}
}
```
Attach to WebView:
```kotlin
webView.settings.javaScriptEnabled = true
webView.addJavascriptInterface(AndroidBridge(this), "AndroidBridge")
```
## Notes
- For production, use HTTPS for web app + API to avoid mixed-content issues.
- Keep method names and payload keys exactly as specified.