Bienvenido a Patreon Authenticator for Unity
Un paquete completo de Unity para integrar la autenticación OAuth 2.0 de Patreon, con servidor HTTP integrado, funciones de seguridad avanzadas y compatibilidad multiplataforma.
Primeros pasos
Patreon Authenticator for Unity es un potente plugin que integra sin fricciones tus juegos de Unity con el sistema de autenticación de Patreon. Con este plugin puedes:
- Seguridad avanzada: cifrado AES-256, ofuscación y almacenamiento seguro
- Servidor HTTP integrado: listener HTTP incorporado para los callbacks de OAuth
- Soporte de middleware: middleware personalizado para los callbacks de OAuth en todas las plataformas
- Soporte multiplataforma: funciona en WebGL, Android, iOS, Windows, Mac y Linux
- Gestión segura de tokens: cifrado específico del dispositivo con derivación de claves PBKDF2
- Operaciones seguras entre hilos: gestión correcta de las peticiones HTTP
- Interfaz de callback atractiva: páginas HTML de éxito/error personalizables
- Validación de state: protección CSRF con validación del parámetro state
- Renovación de tokens: renovación automática del token de acceso
- Obtención del perfil de usuario: recupera la información del usuario y los detalles de su suscripción
- Pruebas de seguridad: herramientas integradas de validación y pruebas de seguridad
- Soporte de GIF: avatares animados de Patreon con soporte de animación GIF
Requisitos previos
Antes de empezar, asegúrate de tener:
- Unity 2021.3 LTS o posterior
- .NET Standard 2.1 o posterior
- Una cuenta de creador de Patreon
- Conocimientos básicos de Unity y C#
- Conexión a internet para las llamadas a la API de Patreon
Nota importante
Este plugin requiere Unity 2021.3 LTS o posterior. Las versiones anteriores no son compatibles.
Instalación
1. Instala el paquete Newtonsoft.Json (obligatorio)
IMPORTANTE: ¡este paso es obligatorio antes de usar el plugin!
- Abre el Package Manager de Unity (
Window → Package Manager) - Haz clic en el botón “+”
- Selecciona “Install package by name…”
- Enter
com.unity.nuget.newtonsoft-json - Haz clic en “Add” para instalar el paquete
¡Sin este paquete, los scripts no compilarán!
2. Copia los archivos del plugin
- Copia la carpeta
Assets/Plugins/PatreonAuthenticatorForUnity/a tu proyecto de Unity - Copia el archivo
Assets/StreamingAssets/patreon-callback.htmla tu carpeta StreamingAssets
3. Configuración de la escena
- Crea el asset PatreonConfig:
- Ve a la carpeta Resources (créala si no existe)
- Haz clic derecho en la ventana Project
- Ve a
Create → Patreon Authenticator for Unity → Create New Config - Esto creará el asset en la carpeta
Assets/Resources/(PatreonConfig) - Configura los ajustes básicos (consulta la sección Configuración más abajo)
- El Client ID y el Client Secret se establecerán más tarde con el script PatreonReEncryptCredentials
- Crea el GameObject PatreonManager:
- Haz clic derecho en la ventana Hierarchy
- Selecciona
Create Empty - Cambia el nombre del GameObject a
PatreonManager
- Añade los scripts necesarios a PatreonManager:
- Selecciona el GameObject
PatreonManager - Add Component → script
PatreonManager - IMPORTANTE: asigna el asset PatreonConfig al campo “Patreon Config”
- Add Component → script
PatreonCallbackManager(gestiona todas las plataformas y requiere los siguientes componentes) - Add Component → script
PatreonEmbeddedServer(solo plataformas de escritorio) - Add Component → script
PatreonDeepLinkHandler(solo plataformas móviles) - Add Component → script
PatreonWebGLHandler(solo plataforma WebGL)
Todos los scripts son compatibles y pueden usarse juntos.
- Selecciona el GameObject
-
Configuración específica por plataforma:
📱 Plataformas móviles (Android/iOS):
- Se usará automáticamente
PatreonDeepLinkHandler - Configuración en Android: añade a tu
AndroidManifest.xml:<activity android:name="com.unity3d.player.UnityPlayerActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="PatreonAuthenticatorForUnity.oauth" /> </intent-filter> </activity> - Configuración en iOS: añade a tu
Info.plist:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>Patreon OAuth</string> <key>CFBundleURLSchemes</key> <array> <string>PatreonAuthenticatorForUnity.oauth</string> </array> </dict> </array>
🌐 Plataforma WebGL:
- Se usará automáticamente
PatreonWebGLHandler - Usa middleware para los callbacks de OAuth (no necesita configuración adicional)
🖥️ Plataformas de escritorio (Windows/Mac/Linux):
- Se usará automáticamente
PatreonEmbeddedServer - Crea un servidor HTTP local en
localhost:3000
- Se usará automáticamente
- Información sobre el middleware:
- Todas las plataformas usan middleware para los callbacks de OAuth
- El middleware gestiona el flujo OAuth y redirige a tu app
- Esquema de URI personalizado: se configura en PatreonConfig (por defecto:
PatreonAuthenticatorForUnity.oauth) - Opción de middleware gratuita: puedes crear tu propio middleware con GitHub Pages
- Copia el código del middleware desde
Assets/StreamingAssets/patreon-callback.html - Publícalo en GitHub Pages para tener un middleware gratis
- Actualiza la URI de redirección en tu PatreonConfig para que apunte a tu middleware
- Esquema de URI personalizado: actualiza el middleware para usar tu esquema de URI personalizado de PatreonConfig
- Comprueba la configuración:
- El GameObject PatreonManager debe tener todos los scripts necesarios
- PatreonConfig debe estar asignado en el componente PatreonManager
- No debe aparecer ningún error de compilación en la Console
Instalación completada
Tras importar desde la Unity Asset Store, deberías ver la carpeta 'PatreonAuthenticatorForUnity' en tu directorio Assets/Plugins.
Funciones de seguridad
Sistema de cifrado avanzado
El plugin incluye un sistema de seguridad completo para proteger tus credenciales de Patreon:
Cifrado AES-256
- El Client Secret se cifra con AES-256 usando claves específicas del dispositivo
- Derivación de claves PBKDF2 con 10,000 iteraciones para la máxima seguridad
- Cifrado específico del dispositivo: las claves son únicas por dispositivo/aplicación
- Generación automática del IV en cada operación de cifrado
Ofuscación XOR
- El Client ID se ofusca con cifrado XOR
- Codificación Base64 para un almacenamiento seguro
- Protección ligera adecuada para identificadores públicos
Almacenamiento seguro
- Almacenamiento en PlayerPrefs cifrado para datos sensibles
- Limpieza automática de los datos sensibles en memoria
- Métodos de borrado seguro para eliminar los datos guardados
Validación de seguridad
- Pruebas de seguridad integradas con el componente
PatreonSecurityTest - Validación automática de las operaciones de cifrado/descifrado
- Pruebas de rendimiento para las operaciones de seguridad
- Validación de la seguridad de la memoria
Niveles de seguridad
| Nivel | Client ID | Client Secret | Caso de uso |
|---|---|---|---|
| Máximo | Ofuscado | Cifrado | Producción |
| Alto | Texto plano | Cifrado | Desarrollo |
| Medio | Ofuscado | Texto plano | Pruebas |
| Ninguna | Texto plano | Texto plano | NO RECOMENDADO |
Buenas prácticas de seguridad
- Activa siempre el cifrado del Client Secret en producción
- Usa ofuscación para el Client ID cuando sea posible
- Nunca subas PatreonConfig.asset al control de versiones
- Prueba el sistema de seguridad antes de compilar para producción
- Usa almacenamiento seguro para cualquier dato sensible
- Borra los datos sensibles de la memoria cuando ya no los necesites
CRÍTICO: configuración segura de credenciales
¡ESTO ES EXTREMADAMENTE IMPORTANTE PARA LA SEGURIDAD!
Tus credenciales de Patreon (Client ID y Client Secret) son extremadamente sensibles y deben cifrarse antes de usarlas. ¡NUNCA las guardes en texto plano!
Por qué importa
- Texto plano = riesgo de seguridad: si tus credenciales están en texto plano, cualquiera con acceso a tu build puede robarlas
- Impacto económico: con credenciales robadas se puede acceder a tu cuenta de Patreon y causar daños económicos
- Impacto profesional: las brechas de seguridad pueden dañar tu reputación y la confianza de los usuarios
- Consecuencias legales: unas medidas de seguridad insuficientes pueden causar problemas legales
Cómo configurar tus credenciales de forma segura
Sigue estos pasos para cifrar tus credenciales de Patreon:
Paso 1: Crea el GameObject de recifrado
- Crea un GameObject vacío nuevo en tu escena
- Cámbiale el nombre por algo como
"PatreonEncryptCredentials"(lo borrarás después) - Añade el script
PatreonEncryptCredentialsal GameObject
Paso 2: Introduce tus credenciales reales
- Selecciona el GameObject en la Hierarchy
- En el Inspector verás el script de recifrado con instrucciones claras
- Rellena tus credenciales reales en los campos indicados:
Real Client Id: tu Client ID de PatreonReal Client Secret: tu Client Secret de Patreon
Paso 3: Asigna PatreonConfig (opcional pero recomendado)
- Arrastra tu asset PatreonConfig al campo
PatreonConfig Asset - Si asignas PatreonConfig: los valores se establecen automáticamente tras el cifrado
- Si no asignas PatreonConfig: tendrás que copiar a mano los valores cifrados
Paso 4: Recifra tus credenciales
- Haz clic derecho en el script en el Inspector
- Elige “Re-Encrypt All Credentials” en el menú contextual
- Espera a que termine el proceso - verás mensajes de éxito en la Console
Paso 5: Verifica y limpia
- Revisa la Console en busca de mensajes de éxito
- Si asignaste PatreonConfig: los valores se establecen automáticamente
- Si NO asignaste PatreonConfig: copia a mano los valores cifrados en tu PatreonConfig
- Borra el GameObject - ya no lo necesitas en la escena
Configuración
Configuración de Patreon
Antes de configurar el plugin en Unity, tienes que preparar tu aplicación de Patreon:
- Hazte creador en Patreon:
- Debes ser creador en Patreon para registrar clientes OAuth
- Ve a la Patreon Developer Console
- Crea un cliente OAuth:
- Haz clic en “Create Client” o “Register New Client”
- Rellena los datos de tu aplicación
- IMPORTANTE: configura la redirect URI como:
http://localhost:3000/patreon-callback - Debe coincidir exactamente con la redirect URI de tu PatreonConfig
- Obtén tus credenciales:
- Client ID: cópialo de los ajustes de tu cliente OAuth
- Client Secret: cópialo de los ajustes de tu cliente OAuth (¡mantenlo en secreto!)
- Creator ID: tu nombre de usuario de Patreon (p. ej., si tu Patreon es
patreon.com/DryreL, tu Creator ID esDryreL)
AVISO DE SEGURIDAD:
- NUNCA compartas tu Client ID ni tu Client Secret con nadie
- NUNCA subas estos valores al control de versiones
- NUNCA los publiques en foros públicos ni en canales de Discord
- Estas credenciales dan acceso total a tu cuenta de Patreon
Ajustes de Unity
Tras crear el asset PatreonConfig (ver Configuración de la escena arriba), configura los ajustes de la API de Patreon:
- Redirect URI:
http://localhost:3000/patreon-callback(debe coincidir con la consola de Patreon) - Creator ID: tu nombre de usuario de Patreon (p. ej.,
DryreLparapatreon.com/DryreL) - Authentication Timeout: cuánto esperar a que el usuario se autentique (por defecto: 120 segundos)
CRÍTICO: ¡la Redirect URI de PatreonConfig debe coincidir exactamente con la de tu Patreon Developer Console!
IMPORTANTE: ¡nunca subas PatreonConfig al control de versiones!
- Añade
Assets/Resources/PatreonConfig.asseta tu.gitignore - Este archivo contiene credenciales sensibles de la API
¡Client ID y Client Secret se establecen automáticamente al usar el script PatreonEncryptCredentials!
🌐 Guía de configuración del middleware
Uso del esquema URI dinámico
Este plugin usa ahora un sistema de middleware que permite a todas las plataformas usar una sola redirect URI.
1. Creación de la URL de OAuth:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME
Ejemplos:
https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauthhttps://yourdomain.com/api/oauth/redirect?scheme=awesomeapp.authhttps://yourdomain.com/api/oauth/redirect?scheme=unitygame.patreon
2. Ajustes de la app de Patreon:
- Redirect URI:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME - Client ID: igual que antes
- Client Secret: igual que antes
3. Configuración por plataforma:
Android (AndroidManifest.xml):
<activity android:name="com.unity3d.player.UnityPlayerActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="YOUR_APP_SCHEME" />
</intent-filter>
</activity>
iOS (Info.plist):
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>Patreon OAuth</string>
<key>CFBundleURLSchemes</key>
<array>
<string>YOUR_APP_SCHEME</string>
</array>
</dict>
</array>
4. Configuración de PatreonConfig:
Configura tu esquema URI personalizado en PatreonConfig:
- Custom URI Scheme: el esquema que quieras (p. ej.,
mygame.oauth) - Redirect URI: actualízala para que coincida con la URL de tu middleware
- Todos los cambios: desde la interfaz de PatreonConfig
5. URL de prueba:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME&code=test123&state=test456
✅ Ventajas:
- Un solo middleware para todos los juegos
- Esquema dinámico distinto para cada juego
- Configuración sencilla, solo cambia el esquema
- Detección automática de plataforma
🔧 Uso:
- Elige el esquema:
mygame.oauth - Ajustes de la app de Patreon:
https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth - Copia los archivos de plataforma y cambia el esquema
- Establece
customUriSchemeen Unity - ¡Pruébalo! 🎯
👑 Configuración de la Creator API (opcional)
Para funciones avanzadas como datos de campaña, listas de miembros e información de niveles:
Paso 1: Obtén el Creator's Access Token
- Ve a la Patreon Developer Console
- Crea un “Creator’s Access Token” (no un OAuth Client)
- Selecciona los scopes:
campaigns,campaigns.members,campaigns.tiers - Copia tu Access Token y tu Refresh Token
Paso 2: Activa la Creator API
- En el script
PatreonEncryptCredentials:- ✅ Marca “Enable Creator API”
- Introduce tu Creator Access Token
- Introduce tu Creator Refresh Token
- Haz clic en “Encrypt All Credentials”
- Los valores se establecen automáticamente en PatreonConfig
Alternativa: configuración manual
También puedes poner los tokens de la Creator API directamente en PatreonConfig:
- Creator Access Token: en PatreonConfig para acceder a datos de campaña/miembros
- Creator Refresh Token: en PatreonConfig para renovar el token
- Enable Creator API: actívalo en PatreonConfig para las funciones avanzadas
Nota: ¡asegúrate de que el cifrado esté hecho!
Paso 3: Usa la Creator API
// Get campaign information
StartCoroutine(PatreonManager.Instance.GetCampaignInfo());
// Get all campaign members/patrons
StartCoroutine(PatreonManager.Instance.GetCampaignMembers());
// Get campaign tiers/rewards
StartCoroutine(PatreonManager.Instance.GetCampaignTiers());
Paso 4: Muéstralo en la interfaz
Usa PatreonUserInfoDisplay con los campos nuevos:
- Nombre de la campaña, Resumen de la campaña, Número de patrons
- Importe del nivel, Descripción del nivel, Límite del nivel
- Miembro desde, Estado de la aportación, Próximo cargo
Referencia: Patreon API Guide
Autenticación
Flujo de inicio de sesión
El proceso de autenticación sigue los estándares de OAuth 2.0:
- Inicializa el autenticador
- Inicia el proceso de inicio de sesión
- Gestiona el callback
- Valida el token
Aquí tienes un ejemplo básico:
using DryreL.Patreon;
public class PatreonManager : MonoBehaviour
{
private PatreonAuthenticator authenticator;
void Start()
{
authenticator = new PatreonAuthenticator();
authenticator.OnLoginSuccess += OnLoginSuccess;
authenticator.OnLoginFailed += OnLoginFailed;
}
public void Login()
{
authenticator.StartLogin();
}
private void OnLoginSuccess(PatreonUser user)
{
Debug.Log($"Welcome, {user.FullName}!");
// Handle successful login
}
private void OnLoginFailed(string error)
{
Debug.LogError($"Login failed: {error}");
// Handle login failure
}
}
Gestión de tokens
El plugin gestiona automáticamente la renovación y el almacenamiento de tokens:
// Check if user is authenticated
if (authenticator.IsAuthenticated)
{
// Get current user
PatreonUser user = authenticator.CurrentUser;
// Check subscription status
bool isSubscriber = user.IsSubscriber;
string tier = user.SubscriptionTier;
}
Referencia de la API
Clases
PatreonManager
La clase singleton principal que gestiona la autenticación con Patreon.
Propiedades:
bool IsUserAuthenticated()- Devuelve true si el usuario ha iniciado sesiónPatreonUser GetCurrentUser()- Obtiene el usuario autenticado actualstring GetValidAccessToken()- Obtiene un access token válido (lo renueva si hace falta)
Métodos:
void StartPatreonAuth()- Inicia el flujo OAuth de Patreonvoid Logout()- Cierra la sesión del usuario actual y borra los tokensvoid SetAccessToken(string token)- Establece el access tokenvoid ExchangeCodeForToken(string code, string state)- Intercambia el código de autorización por un access token
PatreonUser
Representa a un usuario de Patreon con su información de suscripción.
Propiedades:
string Id- ID de Patreon del usuariostring FullName- Nombre completo del usuariostring Email- Correo electrónico del usuariostring FirstName- Nombre del usuariostring LastName- Apellido del usuariostring Vanity- URL personalizada del usuariostring ImageUrl- URL de la imagen de perfil del usuariobool IsPatron- Si el usuario es patronfloat PledgeAmount- Importe de la aportación en dólaresbool HasPledge- Si el usuario tiene una aportación activastring DisplayName- Nombre visible del usuariostring PatronStatus- Estado de patron del usuariostring TierTitle- Título del nivel de suscripción del usuarioint CentsPledged- Importe de la aportación en centavos
Métodos:
void LoadProfileAvatar(Action<Sprite> onComplete)- Carga el avatar del perfil del usuario como Sprite
Métodos
StartLogin()
Inicia el flujo OAuth de Patreon.
public void StartLogin()
Devuelve: void
Ejemplo:
authenticator.StartLogin();
Logout()
Cierra la sesión del usuario actual y borra los tokens guardados.
public void Logout()
Devuelve: void
Ejemplo:
authenticator.Logout();
Eventos
OnLoginSuccess
Se dispara cuando un usuario inicia sesión correctamente.
public event Action<PatreonUser> OnLoginSuccess;
Parámetros:
PatreonUser user- El usuario autenticado
OnLoginFailed
Se dispara cuando falla el inicio de sesión.
public event Action<string> OnLoginFailed;
Parámetros:
string error- Mensaje de error que describe el fallo
Ejemplos
Autenticación básica
using UnityEngine;
public class SimplePatreonExample : MonoBehaviour
{
void Start()
{
// Subscribe to events
PatreonManager.OnUserAuthenticated += HandleLoginSuccess;
PatreonManager.OnAuthenticationFailed += HandleLoginFailed;
}
public void LoginButtonClicked()
{
PatreonManager.Instance.StartPatreonAuth();
}
private void HandleLoginSuccess(PatreonUser user)
{
Debug.Log($"Welcome {user.FullName}!");
if (user.IsPatron)
{
Debug.Log($"You are a patron with tier: {user.TierTitle}");
Debug.Log($"Pledge amount: ${user.PledgeAmount:F2}");
// Unlock premium content
}
else
{
Debug.Log("You are not a patron");
// Show subscription prompt
}
}
private void HandleLoginFailed(string error)
{
Debug.LogError($"Login failed: {error}");
// Show error message to user
}
}
Gestión de contenido premium
public class PremiumContentManager : MonoBehaviour
{
[SerializeField] private PatreonAuthenticator authenticator;
[SerializeField] private GameObject premiumContent;
void Start()
{
CheckSubscriptionStatus();
}
private void CheckSubscriptionStatus()
{
if (authenticator.IsAuthenticated)
{
PatreonUser user = authenticator.CurrentUser;
if (user.IsSubscriber)
{
EnablePremiumContent(user.SubscriptionTier);
}
else
{
DisablePremiumContent();
}
}
else
{
DisablePremiumContent();
}
}
private void EnablePremiumContent(string tier)
{
premiumContent.SetActive(true);
// Configure content based on tier
switch (tier)
{
case "Bronze":
// Bronze tier features
break;
case "Silver":
// Silver tier features
break;
case "Gold":
// Gold tier features
break;
}
}
private void DisablePremiumContent()
{
premiumContent.SetActive(false);
}
}
Solución de problemas
Problemas comunes
Error “Invalid Client ID”
Problema: recibes un error “Invalid Client ID” al intentar autenticarte.
Solución:
- Comprueba tu Client ID en el Patreon Developer Portal
- Asegúrate de que el Client ID está bien introducido en los Project Settings de Unity
- Asegúrate de que tu aplicación está bien configurada en Patreon
Problemas al renovar tokens
Problema: los tokens no se renuevan automáticamente.
Solución:
- Comprueba tu conexión a internet
- Comprueba que tu Client Secret es correcto
- Asegúrate de que tu redirect URI coincide exactamente
Problemas en builds de Unity
Problema: el plugin funciona en el editor pero no en las builds.
Solución:
- Asegúrate de incluir todas las dependencias necesarias en la build
- Comprueba que tu configuración de Patreon está lista para producción
- Comprueba que tu redirect URI es accesible desde tu aplicación publicada
Modo de depuración
Activa el modo de depuración para obtener registros más detallados:
PatreonConfig config = new PatreonConfig
{
// ... other settings
DebugMode = true
};
Plataformas compatibles
| Plataforma | Estado | Notas |
|---|---|---|
| WebGL | ✅ Compatibilidad total | Autenticación en el navegador con servidor integrado |
| Android | ✅ Compatibilidad total | Integración nativa con el navegador, middleware (URI personalizada) |
| iOS | ✅ Compatibilidad total | Integración nativa con el navegador, middleware (URI personalizada) |
| Windows | ✅ Compatibilidad total | Builds de 32 y 64 bits |
| Mac | ✅ Compatibilidad total | Compatible con universal binary |
| Linux | ✅ Compatibilidad total | Todas las distribuciones principales |
Funciones en plataformas móviles
- Application.identifier: compatibilidad total en iOS/Android
- Device ID: claves de cifrado seguras por dispositivo
- Navegador del sistema: flujo OAuth nativo con vuelta a la app
- StreamingAssets: manejo de archivos por plataforma
- Esquemas de URL: manejo de callbacks personalizado
🔗 Manejo de callbacks por plataforma
Todas las plataformas (sistema de middleware unificado)
- Una sola redirect URI:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME - Esquema dinámico: cada juego puede usar su propio esquema URI
- Detección de plataforma: detección y enrutado automáticos
- Compatibilidad universal: funciona en escritorio, móvil y WebGL
Plataformas móviles (Android, iOS, Windows, UWP)
- Deep linking: esquema URI personalizado (
YOUR_APP_SCHEME://patreon-callback) - Redirección del middleware:
https://yourdomain.com/api/oauth/redirect→ deep link - Navegador del sistema: flujo OAuth nativo con vuelta automática a la app
- Validación de state: protección CSRF con el parámetro state
Plataforma WebGL
- Flujo del middleware: usa
https://yourdomain.com/api/oauth/redirect - Callback en JavaScript: comunicación
postMessagecon la ventana padre - Sin servidor propio: usa un servicio de middleware alojado
- Soporte CORS: manejo de peticiones de otro origen
Plataformas de escritorio (Windows, Mac, Linux)
- Redirección del middleware:
https://yourdomain.com/api/oauth/redirect→localhost:3000 - Servidor integrado: HTTP Listener en
localhost:3000 - Flujo loopback: navegador → middleware → localhost → callback de la app
- Sin dependencias: implementación pura con HttpListener de .NET
📱 Requisitos de configuración móvil
Configuración de Android
- Crea AndroidManifest.xml en
Assets/Plugins/Android/: ```xml
#### **iOS Setup**
1. **Player Settings** → **Other** → **Configuration**
2. **Add to Supported URL schemes**: `YOUR_APP_SCHEME`
3. Make sure **ios-info.plist** created.
4. **Xcode**: Verify URL scheme registration
#### **Patreon OAuth Client Configuration**
- **All Platforms**: Use single redirect URI with middleware
- **Redirect URI**: `https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME`
- **Client Type**: Select "Web application" (works for all platforms)
- **Dynamic Scheme**: Each game uses its own URI scheme
### 🌐 **Unified Middleware System**
**Hosted Middleware**: `https://yourdomain.com/api/oauth/redirect`
**Features:**
- **Platform Detection**: Automatic platform detection and routing
- **Dynamic Scheme**: Each game uses its own URI scheme
- **Universal Support**: Works on Desktop, Mobile, and WebGL
- **No Setup Required**: Uses hosted middleware service
**Middleware Workflow:**
1. **Patreon** → `https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME&code=...&state=...`
2. **Middleware** → Platform detection
3. **Redirect** → Platform-specific callback method
### 🚀 **Usage Examples**
#### **Platform-Specific OAuth Flow**
```csharp
// Automatic platform detection and callback handling
PatreonCallbackManager callbackManager = GetComponent<PatreonCallbackManager>();
callbackManager.StartPatreonOAuthFlow(clientId, state);
// Get platform-specific redirect URI
string redirectUri = callbackManager.GetPlatformRedirectUri();
Debug.Log($"Platform redirect URI: {redirectUri}");
Manejo de deep links en móvil
// Mobile deep link callback (called by system)
PatreonDeepLinkHandler deepLinkHandler = GetComponent<PatreonDeepLinkHandler>();
deepLinkHandler.HandleDeepLinkCallback("myapp.oauth://patreon-callback?code=abc123&state=xyz789");
// Test deep link callback
deepLinkHandler.TestDeepLinkCallback();
Manejo del middleware en WebGL
// WebGL middleware callback
PatreonWebGLHandler webGLHandler = GetComponent<PatreonWebGLHandler>();
webGLHandler.StartPatreonOAuthFlow(clientId, state);
// Test WebGL callback
webGLHandler.TestWebGLCallback();
Información de plataforma
// Show current platform and callback method
PatreonCallbackManager callbackManager = GetComponent<PatreonCallbackManager>();
callbackManager.ShowPlatformInfo();
// Output:
// 📱 Current Platform: AndroidPlayer
// 📱 Redirect URI: myapp.oauth://patreon-callback
// 🔗 Using deep link callback method
🧪 Pruebas
Comandos de prueba
Test Platform OAuth Flow: prueba el flujo OAuth de la plataformaTest Deep Link Callback: prueba el manejo de deep links en móvilTest WebGL Callback: prueba el manejo del middleware en WebGLShow Platform Info: muestra la información de la plataforma actual
Scripts de prueba
PatreonCallbackManager: pruebas por plataformaPatreonDeepLinkHandler: pruebas de deep links en móvilPatreonWebGLHandler: pruebas del middleware en WebGLPatreonMobileTest: pruebas de compatibilidad móvil
Pruebas de seguridad
El plugin incluye un sistema completo de pruebas de seguridad:
1. Añade el componente Security Test
// Add PatreonSecurityTest component to any GameObject
// Right-click on GameObject → Add Component → PatreonSecurityTest
2. Ejecuta las pruebas de seguridad
// In Inspector, click "Run All Security Tests" or use code:
var securityTest = GetComponent<PatreonSecurityTest>();
securityTest.RunAllTests();
3. Prueba componentes por separado
// Test encryption only
securityTest.TestEncryption();
// Test obfuscation only
securityTest.TestObfuscation();
// Test secure storage only
securityTest.TestSecureStorage();
// Performance test
securityTest.PerformanceTest();
4. Validación de seguridad
// Validate entire security system
bool isValid = PatreonSecurity.PatreonSecurity.ValidateSecuritySystem();
Debug.Log($"Security system valid: {isValid}");
Soporte
Obtener ayuda
Si tienes algún problema o alguna pregunta:
- Consulta la documentación - Aquí se tratan los problemas más comunes
- Únete a nuestra comunidad de Discord - Recibe ayuda de otros desarrolladores y de nuestro equipo
- Contacta con soporte - Para problemas técnicos, escríbenos con:
- Versión de Unity
- Versión del plugin
- Pasos para reproducirlo
- Mensajes de error
- Archivos de log
Comunidad
Únete a nuestra comunidad para soporte y novedades:
- Correo: [email protected]
- Discord: Únete a nuestra comunidad
- YouTube: DryreL Hub
- YouTube #2: DryreL Software
Actualizaciones
Mantente al día con las últimas funciones y correcciones:
- Unity Asset Store: Descárgalo del Marketplace (próximamente)
- Comunidad de Discord: Únete al Discord de DryreL Hub para soporte y novedades
AVISO LEGAL Y RESPONSABILIDAD
AVISO DE SEGURIDAD IMPORTANTE
Este plugin ofrece cifrado AES-256 y ofuscación para ayudar a proteger tus credenciales de la API de Patreon. Sin embargo, ERES TOTALMENTE RESPONSABLE de la seguridad de tus credenciales y de cualquier consecuencia que pueda derivarse de su exposición.
Funciones de seguridad incluidas
- Cifrado AES-256: para proteger el Client Secret
- Ofuscación XOR: para ofuscar el Client ID
- Derivación de claves en varias capas: claves de cifrado por plataforma
- Protección antimanipulación: validación básica de integridad
- Registro de auditoría de seguridad: herramientas de monitorización y depuración
Tus responsabilidades
- Almacenamiento seguro: nunca subas
PatreonConfigal control de versiones - Uso correcto: sigue todas las pautas de seguridad de esta documentación
- Actualizaciones periódicas: mantén las credenciales al día y rótalas
- Seguridad del entorno: asegúrate de que tus entornos de desarrollo y producción son seguros
- Control de acceso: limita el acceso a los archivos de credenciales y a los artefactos de build
Exención de responsabilidad
DRYREL HUB NO SERÁ RESPONSABLE de ningún daño directo, indirecto, incidental, especial, consecuente o punitivo, incluidos, entre otros:
- Pérdidas económicas: pérdida de ingresos, interrupción del negocio o daños monetarios
- Brechas de seguridad: acceso no autorizado a tu cuenta o datos de Patreon
- Abuso de la API: uso indebido de tus credenciales por terceros
- Exposición de datos: filtración de información sensible
- Interrupción del servicio: caídas o falta de disponibilidad
- Consecuencias legales: cualquier problema legal derivado de la exposición de credenciales
USA ESTE PLUGIN BAJO TU PROPIO RIESGO. NO SE OFRECE NINGUNA GARANTÍA.
🔧 API V2: problemas y soluciones según el tipo de cuenta
⚠️ Problemas conocidos con distintos tipos de cuenta
Al probar con distintos tipos de cuenta de Patreon (creador o usuario normal), puedes encontrarte estos problemas:
1. No se obtiene el correo
- Problema: el campo de correo llega vacío en usuarios normales
- Causa: limitaciones de los scopes de OAuth
- Solución: los scopes de OAuth ampliados ahora incluyen
identity[email]
2. No se obtiene la imagen de perfil
- Problema: la URL de la imagen de perfil está vacía
- Causa: diferencias en el mapeo de campos de la API
- Solución: se usa automáticamente
thumb_urlsiimage_urlestá vacío
3. Información de nivel/estado incorrecta
- Problema: usuarios normales aparecen con el nivel “creator”
- Causa: incoherencias en las respuestas de la API entre tipos de cuenta
- Solución: registro y validación mejorados (ver avisos en la consola)
4. No se obtienen los enlaces sociales
- Problema: los enlaces de YouTube, Twitter y Facebook están vacíos
- Causa: acceso limitado a campos de la API para usuarios normales
- Solución: peticiones de campos ampliadas en las llamadas a la API
🔍 Información de depuración
El plugin incluye ahora un registro de depuración completo. Revisa la Console de Unity para ver:
🔧 === USER DATA DEBUG ===- Análisis completo de los datos del usuario🔧 Email not available- Avisos de limitación de scopes🔧 Normal user has tier_title- Incoherencias según el tipo de cuenta
📋 Lista de comprobación de pruebas
Al probar con distintos tipos de cuenta:
- Prueba con cuenta de creador:
- ✅ Debe obtenerse el correo
- ✅ Debe obtenerse la imagen de perfil
- ✅ La información del nivel debe ser correcta
- ✅ Puede haber enlaces sociales
- Prueba con cuenta de usuario normal:
- ⚠️ Puede que no haya correo (depende del scope)
- ✅ Debe obtenerse la imagen de perfil (con alternativa)
- ⚠️ La información del nivel puede ser incorrecta (se registra como aviso)
- ⚠️ Puede que no haya enlaces sociales
🛠️ Scopes de OAuth ampliados
El plugin ahora solicita scopes ampliados:
identity identity[email] identity.memberships campaigns
Esto da un mejor acceso a los datos del usuario en distintos tipos de cuenta.
🔧 Validación y correcciones de datos de la API
Nota importante: el plugin incluye validación de datos en el cliente y correcciones para incoherencias conocidas de la API V2 de Patreon. Es necesario porque:
- Problemas de datos de la API: la API V2 de Patreon a veces devuelve datos incorrectos para usuarios normales (p. ej., muestra el nivel “Creator” en usuarios normales)
- Datos contradictorios: la API puede devolver valores en conflicto (p. ej.,
patron_status: "not_patron"perois_patron: true) - Mezcla de tipos de cuenta: los datos de usuario y de creador a veces se mezclan en las respuestas
- Problemas con el estado de seguidor: el campo
is_followerno es fiable y puede devolverfalseaunque el usuario siga al creador
Qué hace el plugin:
- ✅ Valida todos los datos de usuario de la API
- ✅ Corrige automáticamente las incoherencias conocidas
- ✅ Registra los problemas de la API para depurar
- ✅ Ofrece valores alternativos cuando hace falta
- ✅ Avisa de campos poco fiables como
is_follower
Logs de la consola a vigilar:
🔧 API ISSUE: Normal user has incorrect tier_title: Creator - fixing🔧 API ISSUE: is_follower is false - this might be incorrect due to Patreon API V2 limitations🔧 API DATA ISSUES DETECTED AND FIXED - This indicates Patreon API V2 data inconsistencies
Limitaciones conocidas de la API:
is_follower: este campo no es fiable en la API V2 de Patreon y puede devolverfalseaunque el usuario siga al creador- Detección de seguidores: para detectar seguidores con precisión hacen falta llamadas adicionales a los endpoints campaigns/pledges
- Referencia: consulta la Patreon API Guide para detectar seguidores correctamente
Así se obtienen datos de usuario fiables pese a las incoherencias de la API.
¡Gracias!
Gracias por usar Patreon Authenticator for Unity. ¡Esperamos que este plugin te ayude a crear experiencias increíbles para tus seguidores de Patreon!

