Appo

Architettura

Protocollo bridge, correlazione dei messaggi e canali degli eventi.

Comunicazione Bridge

L'SDK comunica con il layer nativo React Native tramite window.ReactNativeWebView.postMessage().

Flusso Richiesta/Risposta

Web App (SDK)                          React Native App
─────────────────                      ─────────────────
sendMessage(type, payload)

  ├─ Genera ID univoco
  ├─ Registra callback in sospeso
  ├─ postMessage({ id, type, payload })
  │                                    onMessage(event)
  │                                      ├─ Analizza messaggio
  │                                      ├─ Inoltra all'handler
  │                                      └─ Invia risposta ────────┐
  │                                                                 │
  ◄──────────────────── { id, success, data } ─────────────────────┘

  ├─ Associa risposta alla richiesta in sospeso tramite ID
  ├─ Risolvi/rifiuta promise
  └─ Restituisci dati al chiamante

Flusso Broadcast degli Eventi

React Native App                       Web App (SDK)
─────────────────                      ─────────────────
Evento nativo scatenato

  ├─ broadcastEvent({ event, data })
  │                                    handleNativeMessage()
  │                                      ├─ Rileva evento (nessun campo id)
  │                                      └─ Notifica listener registrati

  └─ Esempi di eventi:
     'push.message'    → callback push.onMessage()
     'push.response'   → callback push.onResponse()
     'network.change'  → callback network.onChange()

Protocollo dei Messaggi

Richiesta (Web verso Nativo)

{
  "id": "msg_1234567890_1",
  "type": "push.requestPermission",
  "payload": {}
}

Risposta (Nativo verso Web)

{
  "id": "msg_1234567890_1",
  "success": true,
  "data": "granted"
}

Risposta di Errore

{
  "id": "msg_1234567890_1",
  "success": false,
  "error": "Permission denied by user"
}

Broadcast di Evento (Nativo verso Web)

{
  "event": "push.message",
  "data": { "title": "Hello", "body": "World" }
}

Canali degli Eventi

CanaleTriggerStruttura Dati
push.messageNotifica push ricevuta con l'app in primo pianoPushMessage
push.responseL'utente tocca una notifica (avvio caldo o freddo)PushResponse
network.changeLo stato della connettivita di rete cambiaNetworkStatus

Correlazione dei Messaggi

Gli ID dei messaggi usano il formato msg_{timestamp}_{counter} per la correlazione richiesta/risposta. Tutte le chiamate sendMessage hanno un timeout predefinito di 30 secondi.

Type Guard

L'SDK esporta type guard per la validazione dei messaggi in arrivo:

import { isBridgeResponse, isBridgeEvent } from '@appolabs/appo';

isBridgeResponse(data); // Valida { id: string, success: boolean }
isBridgeEvent(data);    // Valida { event: string }

In questa pagina