Crea una mini app de DeHub — SDK y manifiesto
Una mini app es una web normal que funciona dentro de DeHub. DeHub dibuja la cabecera con el nombre y el dominio real de tu app, y tu app habla con DeHub mediante un pequeño SDK. La misma app funciona en dehub.io y en la app móvil de DeHub sin cambios.
Añade el SDK
<script src="https://riftn.com/sdk/miniapp.js"></script>
<script>
// Hide the splash screen once your first screen is on.
dehub.ready();
const { user, client } = await dehub.context;
if (user) console.log('Hi', user.handle);
</script>
El SDK añade una variable global, dehub. Cada llamada devuelve una promesa. Fuera de DeHub, dehub.isInDehub() es false y las llamadas fallan, así que puedes usar la misma página por separado.
Métodos del SDK
| Método | Qué hace |
|---|---|
dehub.ready() | Oculta la pantalla de bienvenida. |
dehub.close() | Cierra tu app. |
dehub.context | Se resuelve en { user, location, client }. user es { wallet, handle, displayName, avatarUrl } o null si no hay sesión. client tiene platform (web o mobile), added, locale, theme y el safeAreaInsets. |
dehub.getCapabilities() | Los métodos que admite este anfitrión. |
dehub.auth.getToken() | Un token firmado que demuestra quién es el usuario, para tu servidor. La primera llamada pide al usuario que comparta su identidad. Consulta Iniciar sesión con DeHub. |
dehub.actions.composePost({ text, embedUrl }) | Abre el editor de DeHub con tu texto y un enlace opcional de vuelta a tu app (hasta 500 caracteres). |
dehub.actions.viewProfile({ handle }) | Abre un perfil de DeHub. |
dehub.actions.viewPost({ id }) | Abre una publicación de DeHub por su id numérico. |
dehub.actions.openUrl(url) | Abre un enlace https fuera de tu app. |
dehub.actions.addApp() | Pide al usuario que añada tu app, lo que también permite notificaciones. |
dehub.actions.pay({ amount, memo }) | Pide al usuario que te pague en DHB. Consulta Pagos. |
dehub.haptics.impact(style) | Una vibración corta en móviles: light, medium o heavy. |
dehub.on(event, fn) | Escucha eventos del anfitrión. Devuelve una función que deja de escuchar. |
Cuando DeHub rechaza una petición, la promesa falla con un error que tiene un code: signin (el usuario no ha iniciado sesión), rejected (el usuario dijo que no), invalid (parámetros incorrectos), rate_limited, busy (ya hay otra petición abierta), unsupported o failed.
El manifiesto: dehub.json
Publica este archivo en https://your-domain/.well-known/dehub.json. Le dice a la tienda cómo se llama tu app, qué icono mostrar y quién es su dueño.
{
"app": {
"name": "Tip Jar",
"homeUrl": "https://tipjar.example.com/",
"iconUrl": "https://tipjar.example.com/icon-1024.png",
"subtitle": "Say thanks in DHB",
"description": "A tip jar for creators. One tap, paid straight to the creator's wallet.",
"category": "finance",
"tags": ["tips", "creators"],
"splashBackgroundColor": "#0B0B0B",
"screenshotUrls": ["https://tipjar.example.com/shot-1.png"],
"webhookUrl": "https://tipjar.example.com/api/dehub-webhook",
"permissions": ["wallet", "notifications"]
},
"ownership": {
"address": "0xYourDehubWallet",
"domain": "tipjar.example.com",
"signature": "0x…"
}
}
| Campo | Reglas |
|---|---|
name | Obligatorio. 32 caracteres como máximo. |
homeUrl | Obligatorio. https, en el mismo dominio que el manifiesto. |
iconUrl | Obligatorio. https. Un PNG de 1024×1024 sin transparencia. |
subtitle | 30 caracteres como máximo. |
description | Recomendado. 170 caracteres como máximo. |
category | Recomendado. Uno de: games, social, finance, utility, productivity, health-fitness, news-media, music, shopping, education, developer-tools, entertainment, art-creativity. |
tags | Hasta 5. Minúsculas, números o guiones, 20 caracteres cada una. |
screenshotUrls | Hasta 3 imágenes https. |
splashBackgroundColor | Un color hexadecimal como #0B0B0B. |
webhookUrl | https. Recibe eventos de webhook. |
webhookEvents | Opcional. Cualquiera de: tip, follow, mention. Eventos de cuenta de la cartera propietaria, enviados a webhookUrl. |
permissions | Cualquiera de: wallet, compose, notifications, camera. |
Demuestra que el dominio es tuyo
El bloque ownership es la firma de tu billetera de DeHub de este mensaje exacto, donde la segunda línea es tu dominio:
dehub mini app ownership
tipjar.example.com
No tienes que firmarlo a mano. En dehub.io/apps/dev, revisa tu enlace y pulsa Firmar para obtener un bloque listo para pegar. Los pagos van a la billetera que firmó, y solo esa billetera puede actualizar la ficha o crear una clave de notificaciones.
Tarjetas enriquecidas en el feed
Cuando alguien publica tu enlace, DeHub muestra una tarjeta con un botón que abre tu app. Añade esta etiqueta al <head> de la página (también se lee la etiqueta fc:miniapp ):
<meta name="dehub:miniapp" content='{"version":"1","imageUrl":"https://tipjar.example.com/card-3x2.png","button":{"title":"Open Tip Jar","action":{"url":"https://tipjar.example.com/"}}}'>
Pagos en DHB
const { txHash, chainId, amount, receipt } = await dehub.actions.pay({
amount: 50, // DHB, whole numbers, up to 1,000,000
memo: 'Order #1042', // optional, 140 characters
});
// Send `receipt` to your server and verify it there.
await fetch('/api/orders/1042/paid', { method: 'POST', body: receipt });
DeHub muestra la cantidad, tu app y tu billetera, el usuario confirma en su billetera y DeHub comprueba la transferencia en la cadena (Base o BNB Chain) antes de responder. El receipt es un token firmado con typ: "payment", sub (la billetera de quien paga), aud (tu dominio), amount, token, chainId, txHash y el memo. Verifícalo igual que un token de inicio de sesión. Solo las apps registradas con un manifiesto firmado pueden cobrar.
Modo de prueba. Cuando abres tu propia app en DeHub con la cartera propietaria, los pagos son simulados: nada se mueve en cadena, y el recibo y el payment webhook llevan test: true, chainId: 0 y un txHash que empieza por test_. Nunca entregues bienes pagados por un recibo de prueba en producción.
Envío y revisión
- Sin listar: justo después de enviarla. Tu app tiene un enlace para compartir (
dehub.io/apps/your-slug) y funciona para cualquiera que la abra, con una insignia de No revisada. - Listada: tras la revisión. Tu app aparece en la tienda de apps de DeHub.
- Verificada: las apps de confianza reciben una marca de verificación y pueden destacarse.
Los revisores comprueban que la app carga, funciona en un móvil, coincide con su ficha y no imita a DeHub. Si actualizas el manifiesto y la envías de nuevo, la ficha se actualiza.
Recompensas semanales
Cada noche DeHub clasifica las apps listadas según su uso real: personas con sesión iniciada que vuelven (55%), usuarios semanales (35%), más un impulso en los primeros 14 días de una app. Cada lunes, la parte semanal del fondo mensual de recompensas en DHB se reparte según la puntuación. Para participar, una app necesita una billetera de propietario verificada y al menos 3 usuarios que vuelvan. La clasificación y las recompensas anteriores están en dehub.io/apps/dev.
Abrir DeHub