ctahosting

Backend mobile · BaaS

Backend per app mobile: pronto all’uso per partire subito

Non riscriva da zero il backend della Sua app. Account utente, database Postgres, API automatica, archiviazione file e dati in tempo reale sono già pronti in un unico progetto. Lei si concentra sulle schermate e sul prodotto.

  • Postgres con API REST automatica
  • Registrazione, login e sicurezza a livello di riga (RLS)
  • Prezzo mensile fisso, nessun costo a consumo
Vedi i pianiCosa è incluso?

Da 1,23 € al mese + IVA

Moduli inclusi

Tutto il backend che serve alla Sua app mobile, in un unico progetto

A ogni nuova app si riscrivono sempre le stesse cose: registrazione, login, database, API, caricamento file. Qui è già tutto pronto. La Sua app si collega con l’ID del progetto e la chiave, e funziona.

  • Autenticazione

    Registrazione e login con email e password, codice monouso via SMS, accesso con Google e Apple. Sessioni e refresh token già gestiti.

  • Database

    Un database Postgres dedicato per ogni progetto. Crei tabelle, relazioni, indici e viste dal pannello o in SQL.

  • API

    API REST automatica per il Suo database: appena aggiunge una tabella, sono pronti gli endpoint per leggere, scrivere, filtrare e paginare.

  • Storage

    Caricamento di foto, video e file. Regole di accesso per bucket e upload a blocchi per i file grandi.

  • Realtime

    Dati aggiornati in tempo reale: una modifica in tabella arriva subito nell’app. Ideale per chat, feed di attività e dashboard live.

  • Edge Functions

    Esegua il Suo codice backend: webhook, invio di email, chiamate ad API esterne e logiche di business personalizzate.

  • Sicurezza (RLS)

    Accesso ai dati per utente: con la sicurezza a livello di riga ogni utente vede solo le righe a cui ha diritto.

  • Backup e monitoraggio

    Backup settimanale del database, ripristino e log di richieste ed errori. Manutenzione e aggiornamenti dei server sono a carico nostro.

Piani

Piani backend per app mobile

Ogni piano include tutti i moduli: autenticazione, database, API, storage, realtime, Edge Functions e RLS. Cambiano solo le risorse.

  • Starter

    Per la prima app o un MVP

    Sconto del 33%2,65 €

    1,76 €/mese + IVA

    21,17 € anticipati per 12 mesi

    Rinnovo: 1,76 €/mese

    • 1 GB di spazio SQL (Postgres)
    • 1 database SQL (progetti)
    • 1 GB di archiviazione file
    • 5000 utenti attivi al mese
    • 100 connessioni realtime simultanee
    • 250.000 chiamate a edge functions al mese
    • Backup settimanale
    • Pubblicazione gratuita negli store
    • Tutti i moduli inclusi
  • Il più scelto

    Pro

    Per app in crescita

    Sconto del 29%6,20 €

    4,42 €/mese + IVA

    53,08 € anticipati per 12 mesi

    Rinnovo: 4,42 €/mese

    • 3 GB di spazio SQL (Postgres)
    • 3 database SQL (progetti)
    • 5 GB di archiviazione file
    • 25.000 utenti attivi al mese
    • 500 connessioni realtime simultanee
    • 1.000.000 chiamate a edge functions al mese
    • Backup settimanale
    • Dominio .app gratuito (1° anno)
    • Pubblicazione gratuita negli store
    • Tutti i moduli inclusi
  • Business

    Per traffico elevato e più app

    Sconto del 30%8,85 €

    6,20 €/mese + IVA

    74,35 € anticipati per 12 mesi

    Rinnovo: 6,20 €/mese

    • 5 GB di spazio SQL (Postgres)
    • 5 database SQL (progetti)
    • 10 GB di archiviazione file
    • 100.000 utenti attivi al mese
    • 2000 connessioni realtime simultanee
    • 5.000.000 chiamate a edge functions al mese
    • Backup settimanale
    • Dominio .app gratuito (1° anno)
    • Pubblicazione gratuita negli store
    • Tutti i moduli inclusi

Prezzi mensili IVA esclusa. Più lunga è la durata, maggiore è lo sconto. Può cambiare piano in qualsiasi momento.

Autenticazione

Sistema di login pronto: registrazione, accesso, account

La schermata di login è il primo contatto dell’utente con l’app. Un errore o una falla di sicurezza in quel punto colpisce tutto il prodotto. L’autenticazione arriva con endpoint pronti per la Sua app.

  • Registrazione con email e password, verifica dell’email e reimpostazione della password
  • Accesso senza password con codice monouso via SMS
  • Accedi con Google e Accedi con Apple
  • Token di accesso e di refresh (JWT), sessioni per dispositivo, logout da remoto
  • Profili utente, ruoli e campi personalizzati
  • Limite di tentativi contro gli attacchi brute force
  • Cancellazione dell’account ed esportazione dei dati personali dall’app (GDPR)

Database · API · RLS

Database Postgres con API automatica

I Suoi dati stanno in un vero database relazionale: Postgres. L’API è pronta appena crea la tabella, e con le regole RLS decide chi può leggere e scrivere quali righe.

  • Postgres dedicato: tabelle, relazioni, indici, viste e funzioni SQL
  • API REST automatica dalle Sue tabelle: filtri, ordinamento, paginazione e dati collegati
  • Sicurezza a livello di riga (RLS): regole come “ogni utente vede solo i propri dati”
  • Realtime: riceva nell’app le modifiche alle tabelle nel momento in cui avvengono
  • Endpoint personalizzati, webhook e job pianificati con le Edge Functions
  • Editor di tabelle ed editor SQL nel pannello
  • Backup settimanale e ripristino con un clic

Come funziona

Il backend della Sua app pronto in tre passi

  1. 1

    Crei il progetto

    Scelga un piano. Riceve un ID di progetto, un database e chiavi API tutti Suoi.

  2. 2

    Prepari le tabelle

    Crei le tabelle dal pannello o in SQL e scriva le regole RLS. Gli endpoint dell’API compaiono da soli.

  3. 3

    Colleghi l’app

    La Sua app Flutter, React Native, Swift o Kotlin si collega con l’ID del progetto e la chiave. Gli utenti si registrano, i dati arrivano.

Confronto

Sviluppare il backend da sé o usarne uno pronto?

I tipici lavori di backend di un’app mobile, nei due casi.

AttivitàSviluppare il proprio backendBackend mobile ctahosting
Registrazione, login, recupero passwordSettimane di sviluppo e test di sicurezza Incluso
Accesso con Google e AppleUn’integrazione a parte per ogni provider Incluso
API per il databaseScrivere endpoint tabella per tabella Automatica
Accesso ai dati per utenteControlli manuali in ogni endpoint Regola RLS
Caricamento fileStorage e permessi da configurare a parte Incluso
Dati in tempo realeGestire un proprio server WebSocket Realtime
Server, backup, aggiornamentiA Suo carico A carico nostro
Prezzo e fatturazioneCosti a consumo Prezzo mensile fisso

Per chi

Per qualsiasi app con utenti e dati

  • Contenuti e formazione

    App di corsi, video, podcast e articoli, con progressi e preferiti dell’utente.

  • Sport e salute

    App di allenamento, dieta e monitoraggio, con dati personali per ogni utente.

  • Prenotazioni e servizi

    App per saloni, studi medici e consulenti, con account cliente e calendario.

  • Chat e community

    App di messaggistica, commenti e feed, aggiornate all’istante con il realtime.

  • SaaS mobile

    App per team, aziende e produttività con accesso basato sui ruoli.

  • Agenzie

    Team che sviluppano app per i clienti, con un ambiente separato per ogni progetto.

Esempi di codice

Come si usa nel Suo editor

Scelga il linguaggio e scorra gli esempi. Ogni modulo funziona con normali endpoint HTTP, senza SDK obbligatori. L’indirizzo dell’API è lo stesso per tutti i progetti (https://alex.ctahosting.com); PROJECT_ID e ANON_KEY sono i valori del Suo progetto indicati nel pannello. I commenti nel codice sono in inglese.

auth.phpPHP
<?php// Project ID and key: in the dashboard under "Overview"$apiUrl    = 'https://alex.ctahosting.com'; // the same address for every project$projectId = getenv('PROJECT_ID');    // e.g. prj_8fK2mQ… (sent as the x-project header)$anonKey   = getenv('ANON_KEY');    // public key (not a secret) // Shared request helper: sends JSON, returns JSONfunction request(string $method, string $url, array $body = [], ?string $token = null): array{    global $anonKey, $projectId;    $ch = curl_init($url);    curl_setopt_array($ch, [        CURLOPT_CUSTOMREQUEST  => $method,        CURLOPT_RETURNTRANSFER => true,        CURLOPT_HTTPHEADER     => array_filter([            'apikey: ' . $anonKey,            'x-project: ' . $projectId,            'Content-Type: application/json',            $token ? 'Authorization: Bearer ' . $token : null,        ]),        CURLOPT_POSTFIELDS     => $body ? json_encode($body) : null,    ]);    $response = json_decode(curl_exec($ch), true);    curl_close($ch);    return $response ?? [];} // 1) Sign up: the verification email is sent automaticallyrequest('POST', "$apiUrl/auth/v1/signup", [    'email'    => 'jane@example.com',    'password' => 'Strong-Pass-123',]); // 2) Log in: returns an access token (access_token)$session = request('POST', "$apiUrl/auth/v1/token?grant_type=password", [    'email'    => 'jane@example.com',    'password' => 'Strong-Pass-123',]);$token = $session['access_token']; // send as Bearer on later requests

01 Registrazione e login (autenticazione)

Registrazione e accesso con email e password. Il token di accesso restituito si usa in tutte le richieste successive. L’accesso con Google e Apple passa dallo stesso endpoint.

products.phpPHP
<?php// Uses request() and $token from auth.phprequire __DIR__ . '/auth.php'; // 1) Read: the latest 20 products in Istanbul, newest first//    select   → columns to return//    city=eq. → equals filter (gt, lt, like, in … also work)//    order    → sorting, limit → page size$products = request('GET', "$apiUrl/rest/v1/products"    . '?select=id,name,price,city'    . '&city=eq.Istanbul'    . '&order=created_at.desc&limit=20', [], $token); foreach ($products as $u) {    echo $u['name'] . ' — ' . $u['price'] . " USD\n";} // 2) Write: POST to the same endpoint; inserted if RLS allows itrequest('POST', "$apiUrl/rest/v1/products", [    'name'  => 'Coffee mug',    'price' => 12,    'city'  => 'Istanbul',], $token);

02 Leggere e scrivere dati (API REST automatica)

L’endpoint esiste appena crea la tabella: filtri, ordinamento e paginazione tramite parametri nell’URL. Le regole RLS decidono quali righe vengono restituite.

orders_policy.sqlSQL · uguale in ogni linguaggio
-- -------------------------------------------------------------- Row-level security (RLS): the policy is written once, in the database.-- Every API request is filtered by it, whatever language it comes from.-- ------------------------------------------------------------ -- 1) Enable RLS on the orders table (once enabled, nobody sees anything by default)alter table orders enable row level security; -- 2) Read: users only see their own orders--    auth.uid() = the ID of the user making the request (from the token)create policy "own orders" on orders  for select using (user_id = auth.uid()); -- 3) Insert: users can only add orders for themselvescreate policy "insert own" on orders  for insert with check (user_id = auth.uid()); -- 4) Update: only their own order, and only while it's 'pending'create policy "update while pending" on orders  for update using (user_id = auth.uid() and status = 'pending');

03 Accesso per utente (RLS)

La regola si scrive una volta nel database e vale per ogni richiesta, da qualunque linguaggio arrivi. Per questo l’esempio è lo stesso SQL ovunque.

broadcast.phpPHP
<?php// PHP usually doesn't listen, it BROADCASTS: when an order status changes,// every app listening on that channel gets a message instantly.require __DIR__ . '/auth.php'; // Broadcasts use the service_role key: SECRET, keep it on the server only (never in the app)$serviceKey = getenv('SERVICE_ROLE_KEY');$orderId = 1042; // Channel: "order-1042" → everyone who has this order's screen openrequest('POST', "$apiUrl/realtime/v1/api/broadcast", [    'messages' => [[        'topic'   => "order-$orderId",        'event'   => 'status',        'payload' => ['status' => 'shipped', 'carrier' => 'DHL'],    ]],], $serviceKey); // Note: writing to the table works too. Every INSERT reaches apps// listening on the messages table on its own (see the other languages).

04 Aggiornamenti in tempo reale (Realtime)

L’app ascolta una tabella e una nuova riga compare sullo schermo appena viene inserita. Anche dal server (PHP) si può inviare un messaggio a tutti gli ascoltatori.

upload.phpPHP
<?phprequire __DIR__ . '/auth.php'; // File from the form (input name="avatar")$file = $_FILES['avatar']['tmp_name'];$userId = 'u_8f2c'; // Path: <bucket>/<file name>  → avatars/u_8f2c.jpg$ch = curl_init("$apiUrl/storage/v1/object/avatars/$userId.jpg");curl_setopt_array($ch, [    CURLOPT_POST           => true,    CURLOPT_RETURNTRANSFER => true,    CURLOPT_HTTPHEADER     => [        'apikey: ' . $anonKey,        'x-project: ' . $projectId,        'Authorization: Bearer ' . $token,        'Content-Type: image/jpeg',        'x-upsert: true',            // overwrite if it exists    ],    CURLOPT_POSTFIELDS     => file_get_contents($file),]);curl_exec($ch);curl_close($ch); // Direct link in a public bucket:echo "$apiUrl/storage/v1/object/public/$projectId/avatars/$userId.jpg";

05 Caricamento di foto e file (Storage)

Foto profilo, documenti e video. Le regole del bucket stabiliscono chi può caricare e vedere cosa. I file nei bucket pubblici hanno un link diretto.

welcome.phpPHP
<?php// The function runs in your project; PHP only calls it.// (You write the function itself in the dashboard under "Edge Functions".)require __DIR__ . '/auth.php'; // POST /functions/v1/<function name>$result = request('POST', "$apiUrl/functions/v1/welcome", [    'email' => 'jane@example.com',    'name'  => 'Jane',], $token); // JSON returned by the functionif (!empty($result['ok'])) {    echo 'Welcome email sent';}

06 Il Suo codice backend (Edge Functions)

Funzioni per tutto ciò che l’API non copre. Qui si chiama una funzione che invia un’email di benvenuto al nuovo utente. Webhook, API esterne e job pianificati funzionano allo stesso modo.

FAQ

Domande frequenti sul backend per app mobile

Se non trova ciò che cerca, ci scriva; rispondiamo in giornata.

Quale fa per Lei?

Il nostro team commerciale Le consiglia il piano adatto.

  • È la parte server che lavora dietro le schermate dell’app: conserva gli account utente, verifica il login, salva i dati e li fornisce all’app tramite API. L’app gira sul telefono; questo lavoro avviene sul server. Si parla anche di servizio backend, server per app o MBaaS (Mobile Backend as a Service).

Si concentri sulla Sua app, al backend pensiamo noi

Autenticazione, database, API, storage e realtime sono pronti. Scelga il piano; il nostro team commerciale è a disposizione per ogni domanda.

Nessun costo di attivazione · Nessun vincolo · Rimborso entro 14 giorni