ctahosting

Backend móvil · BaaS

Backend para apps móviles: listo para usar desde el primer día

Deja de programar el backend de tu app desde cero. Cuentas de usuario, base de datos Postgres, API automática, almacenamiento de archivos y datos en tiempo real vienen listos en un solo proyecto. Tú te centras en las pantallas y en tu producto.

  • Postgres con API REST automática
  • Registro, login y seguridad a nivel de fila (RLS)
  • Precio mensual fijo, sin pago por uso
Ver planes¿Qué incluye?

Desde 1,23 € al mes + IVA

Módulos incluidos

Todo el backend que necesita tu app móvil, en un solo proyecto

Con cada app nueva se vuelve a programar lo mismo: registro, login, base de datos, API, subida de archivos. Aquí ya viene todo listo. Tu app se conecta con el ID del proyecto y su clave, y funciona.

  • Autenticación

    Registro e inicio de sesión con email y contraseña, código de un solo uso por SMS, login con Google y Apple. Sesiones y tokens de refresco incluidos.

  • Base de datos

    Una base de datos Postgres propia para cada proyecto. Crea tablas, relaciones, índices y vistas desde el panel o con SQL.

  • API

    API REST automática para tu base de datos: en cuanto añades una tabla, tienes los endpoints para leer, escribir, filtrar y paginar.

  • Almacenamiento

    Sube fotos, vídeos y archivos. Reglas de acceso por bucket y subida por partes para archivos grandes.

  • Tiempo real

    Datos en directo: un cambio en una tabla llega a la app al instante. Pensado para chats, feeds de actividad y paneles en vivo.

  • Edge Functions

    Ejecuta tu propio código de backend: webhooks, envío de emails, llamadas a APIs de terceros y lógica de negocio.

  • Seguridad (RLS)

    Acceso a los datos por usuario: con las reglas de seguridad a nivel de fila, cada usuario solo ve las filas que le corresponden.

  • Copias de seguridad y monitorización

    Copia semanal de la base de datos, restauración y registros de peticiones y errores. El mantenimiento y las actualizaciones del servidor corren de nuestra cuenta.

Planes

Planes de backend para apps móviles

Todos los planes incluyen todos los módulos: autenticación, base de datos, API, almacenamiento, tiempo real, Edge Functions y RLS. Solo cambian los recursos.

  • Starter

    Para tu primera app o un MVP

    33 % de descuento2,65 €

    1,76 €/mes + IVA

    21,17 € por adelantado por 12 meses

    Renovación: 1,76 €/mes

    • 1 GB de espacio SQL (Postgres)
    • 1 base(s) de datos SQL (proyectos)
    • 1 GB de almacenamiento de archivos
    • 5000 usuarios activos al mes
    • 100 conexiones en tiempo real simultáneas
    • 250.000 llamadas a edge functions al mes
    • Copia de seguridad semanal
    • Publicación gratis en las tiendas
    • Todos los módulos incluidos
  • El más elegido

    Pro

    Para apps en crecimiento

    29 % de descuento6,20 €

    4,42 €/mes + IVA

    53,08 € por adelantado por 12 meses

    Renovación: 4,42 €/mes

    • 3 GB de espacio SQL (Postgres)
    • 3 base(s) de datos SQL (proyectos)
    • 5 GB de almacenamiento de archivos
    • 25.000 usuarios activos al mes
    • 500 conexiones en tiempo real simultáneas
    • 1.000.000 llamadas a edge functions al mes
    • Copia de seguridad semanal
    • Dominio .app gratis (1.er año)
    • Publicación gratis en las tiendas
    • Todos los módulos incluidos
  • Business

    Para mucho tráfico y varias apps

    30 % de descuento8,85 €

    6,20 €/mes + IVA

    74,35 € por adelantado por 12 meses

    Renovación: 6,20 €/mes

    • 5 GB de espacio SQL (Postgres)
    • 5 base(s) de datos SQL (proyectos)
    • 10 GB de almacenamiento de archivos
    • 100.000 usuarios activos al mes
    • 2000 conexiones en tiempo real simultáneas
    • 5.000.000 llamadas a edge functions al mes
    • Copia de seguridad semanal
    • Dominio .app gratis (1.er año)
    • Publicación gratis en las tiendas
    • Todos los módulos incluidos

Precios mensuales sin IVA. Cuanto más largo el periodo, mayor el descuento. Puedes cambiar de plan cuando quieras.

Autenticación

Sistema de usuarios listo: registro, login y cuentas

La pantalla de login es lo primero que ve el usuario. Un fallo o un agujero de seguridad ahí afecta a todo el producto. La autenticación de usuarios llega con endpoints listos para tu app.

  • Registro con email y contraseña, verificación del email y recuperación de contraseña
  • Login sin contraseña con un código de un solo uso por SMS
  • Iniciar sesión con Google e Iniciar sesión con Apple
  • Tokens de acceso y de refresco (JWT), sesiones por dispositivo, cierre de sesión remoto
  • Perfiles de usuario, roles y campos personalizados
  • Límite de intentos contra ataques de fuerza bruta
  • Borrado de cuenta y exportación de datos personales desde la app (RGPD)

Base de datos · API · RLS

Base de datos Postgres con API automática

Tus datos viven en una base de datos relacional de verdad: Postgres. La API está lista en cuanto creas la tabla, y con reglas RLS decides quién puede leer y escribir cada fila.

  • Postgres propio: tablas, relaciones, índices, vistas y funciones SQL
  • API REST automática a partir de tus tablas: filtros, orden, paginación y datos relacionados
  • Seguridad a nivel de fila (RLS): reglas como “cada usuario solo ve sus propios registros”
  • Tiempo real: recibe en la app los cambios de las tablas al momento
  • Endpoints propios, webhooks y tareas programadas con Edge Functions
  • Editor de tablas y editor SQL en el panel
  • Copia semanal y restauración con un clic

Cómo funciona

El backend de tu app listo en tres pasos

  1. 1

    Crea tu proyecto

    Elige un plan. Recibes tu propio ID de proyecto, base de datos y claves de API.

  2. 2

    Crea tus tablas

    Crea las tablas desde el panel o con SQL y escribe tus reglas RLS. Los endpoints de la API aparecen solos.

  3. 3

    Conecta tu app

    Tu app en Flutter, React Native, Swift o Kotlin se conecta con el ID del proyecto y su clave. Los usuarios se registran y los datos fluyen.

Comparativa

¿Programar tu propio backend o usar uno ya hecho?

Las tareas de backend típicas de una app móvil, por los dos caminos.

TareaProgramar tu propio backendBackend móvil de ctahosting
Registro, login, recuperar contraseñaSemanas de desarrollo y pruebas de seguridad Incluido
Login con Google y AppleUna integración distinta para cada proveedor Incluido
API para la base de datosEscribir endpoints tabla por tabla Automática
Acceso a datos por usuarioComprobaciones a mano en cada endpoint Regla RLS
Subida de archivosMontar almacenamiento y permisos aparte Incluido
Datos en directoMontar tu propio servidor WebSocket Tiempo real
Servidores, copias, actualizacionesCosa tuya Cosa nuestra
Precio y facturaciónPago por uso Precio mensual fijo

Para quién

Para cualquier app con usuarios y datos

  • Contenido y formación

    Apps de cursos, vídeo, podcasts y artículos, con progreso y favoritos de cada usuario.

  • Deporte y salud

    Apps de entrenamiento, dieta y seguimiento, con datos privados de cada usuario.

  • Citas y reservas

    Apps para peluquerías, clínicas y consultorías, con cuenta de cliente y calendario.

  • Chat y comunidad

    Apps de mensajería, comentarios y feeds, actualizadas al instante con tiempo real.

  • SaaS móvil

    Apps de equipos, negocio y productividad con acceso por roles.

  • Agencias

    Equipos que desarrollan apps para clientes, con un entorno separado por proyecto.

Ejemplos de código

Así se ve en tu editor

Elige tu lenguaje y desliza los ejemplos. Cada módulo funciona con endpoints HTTP estándar, sin SDK obligatorio. La dirección de la API es la misma para todos los proyectos (https://alex.ctahosting.com); PROJECT_ID y ANON_KEY son los valores de tu proyecto que ves en el panel. Los comentarios del código están en inglés.

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 Registro e inicio de sesión (autenticación)

Registro y login con email y contraseña. El token de acceso que recibes se usa en todas las peticiones siguientes. El login con Google y Apple va por el mismo 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 Leer y escribir datos (API REST automática)

El endpoint existe en cuanto creas la tabla: filtros, orden y paginación con parámetros en la URL. Las reglas RLS deciden qué filas se devuelven.

orders_policy.sqlSQL · igual en todos los lenguajes
-- -------------------------------------------------------------- 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 Acceso por usuario (RLS)

La regla se escribe una vez en la base de datos y se aplica a cada petición, venga del lenguaje que venga. Por eso este ejemplo es el mismo SQL en todos.

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 Actualizaciones en directo (tiempo real)

La app escucha una tabla y una fila nueva aparece en pantalla en cuanto se inserta. Desde el servidor (PHP) también puedes enviar un mensaje a todos los que escuchan.

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 Subida de fotos y archivos (almacenamiento)

Fotos de perfil, documentos y vídeos. Las reglas del bucket deciden quién puede subir y ver qué. Los archivos de buckets públicos tienen enlace directo.

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 Tu propio código de backend (Edge Functions)

Funciones para todo lo que la API no cubre. Aquí se llama a una función que envía un email de bienvenida al nuevo usuario. Webhooks, APIs de terceros y tareas programadas funcionan igual.

FAQ

Preguntas frecuentes sobre el backend para apps móviles

Si no encuentras lo que buscas, escríbenos; respondemos el mismo día.

¿Cuál te conviene?

Nuestro equipo de ventas te recomienda un plan según lo que necesites.

  • Es la parte de servidor que funciona detrás de las pantallas de tu app: guarda las cuentas de usuario, comprueba el login, almacena los datos y los sirve a la app mediante una API. La app corre en el móvil; este trabajo se hace en el servidor. También se le llama servicio de backend, servidor para apps móviles o MBaaS (Mobile Backend as a Service).

Céntrate en tu app, del backend nos encargamos nosotros

Autenticación, base de datos, API, almacenamiento y tiempo real, listos. Elige tu plan; nuestro equipo comercial te ayuda con cualquier duda.

Sin coste de alta · Sin permanencia · Reembolso en 14 días