Volver a Unity

DryreL Software Documentación

Patreon Authenticator for Unity

Guía completa para integrar Patreon Authenticator for Unity en tus proyectos de Unity

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!

  1. Abre el Package Manager de Unity (Window → Package Manager)
  2. Haz clic en el botón “+”
  3. Selecciona “Install package by name…”
  4. Enter com.unity.nuget.newtonsoft-json
  5. Haz clic en “Add” para instalar el paquete

¡Sin este paquete, los scripts no compilarán!

2. Copia los archivos del plugin

  1. Copia la carpeta Assets/Plugins/PatreonAuthenticatorForUnity/ a tu proyecto de Unity
  2. Copia el archivo Assets/StreamingAssets/patreon-callback.html a tu carpeta StreamingAssets

3. Configuración de la escena

  1. 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
  2. Crea el GameObject PatreonManager:
    • Haz clic derecho en la ventana Hierarchy
    • Selecciona Create Empty
    • Cambia el nombre del GameObject a PatreonManager
  3. 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.

  4. 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
  5. 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
  6. 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

  1. Activa siempre el cifrado del Client Secret en producción
  2. Usa ofuscación para el Client ID cuando sea posible
  3. Nunca subas PatreonConfig.asset al control de versiones
  4. Prueba el sistema de seguridad antes de compilar para producción
  5. Usa almacenamiento seguro para cualquier dato sensible
  6. 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

  1. Crea un GameObject vacío nuevo en tu escena
  2. Cámbiale el nombre por algo como "PatreonEncryptCredentials" (lo borrarás después)
  3. Añade el script PatreonEncryptCredentials al GameObject

Paso 2: Introduce tus credenciales reales

  1. Selecciona el GameObject en la Hierarchy
  2. En el Inspector verás el script de recifrado con instrucciones claras
  3. Rellena tus credenciales reales en los campos indicados:
    • Real Client Id: tu Client ID de Patreon
    • Real Client Secret: tu Client Secret de Patreon
  1. Arrastra tu asset PatreonConfig al campo PatreonConfig Asset
  2. Si asignas PatreonConfig: los valores se establecen automáticamente tras el cifrado
  3. Si no asignas PatreonConfig: tendrás que copiar a mano los valores cifrados

Paso 4: Recifra tus credenciales

  1. Haz clic derecho en el script en el Inspector
  2. Elige “Re-Encrypt All Credentials” en el menú contextual
  3. Espera a que termine el proceso - verás mensajes de éxito en la Console

Paso 5: Verifica y limpia

  1. Revisa la Console en busca de mensajes de éxito
  2. Si asignaste PatreonConfig: los valores se establecen automáticamente
  3. Si NO asignaste PatreonConfig: copia a mano los valores cifrados en tu PatreonConfig
  4. 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:

  1. Hazte creador en Patreon:
  2. 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
  3. 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 es DryreL)

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., DryreL para patreon.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.asset a 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.oauth
  • https://yourdomain.com/api/oauth/redirect?scheme=awesomeapp.auth
  • https://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:

  1. Elige el esquema: mygame.oauth
  2. Ajustes de la app de Patreon: https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth
  3. Copia los archivos de plataforma y cambia el esquema
  4. Establece customUriScheme en Unity
  5. ¡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

  1. Ve a la Patreon Developer Console
  2. Crea un “Creator’s Access Token” (no un OAuth Client)
  3. Selecciona los scopes: campaigns, campaigns.members, campaigns.tiers
  4. Copia tu Access Token y tu Refresh Token

Paso 2: Activa la Creator API

  1. En el script PatreonEncryptCredentials:
    • ✅ Marca “Enable Creator API”
    • Introduce tu Creator Access Token
    • Introduce tu Creator Refresh Token
  2. Haz clic en “Encrypt All Credentials”
  3. 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:

  1. Inicializa el autenticador
  2. Inicia el proceso de inicio de sesión
  3. Gestiona el callback
  4. 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ón
  • PatreonUser GetCurrentUser() - Obtiene el usuario autenticado actual
  • string GetValidAccessToken() - Obtiene un access token válido (lo renueva si hace falta)

Métodos:

  • void StartPatreonAuth() - Inicia el flujo OAuth de Patreon
  • void Logout() - Cierra la sesión del usuario actual y borra los tokens
  • void SetAccessToken(string token) - Establece el access token
  • void 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 usuario
  • string FullName - Nombre completo del usuario
  • string Email - Correo electrónico del usuario
  • string FirstName - Nombre del usuario
  • string LastName - Apellido del usuario
  • string Vanity - URL personalizada del usuario
  • string ImageUrl - URL de la imagen de perfil del usuario
  • bool IsPatron - Si el usuario es patron
  • float PledgeAmount - Importe de la aportación en dólares
  • bool HasPledge - Si el usuario tiene una aportación activa
  • string DisplayName - Nombre visible del usuario
  • string PatronStatus - Estado de patron del usuario
  • string TierTitle - Título del nivel de suscripción del usuario
  • int 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:

  1. Comprueba tu Client ID en el Patreon Developer Portal
  2. Asegúrate de que el Client ID está bien introducido en los Project Settings de Unity
  3. 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:

  1. Comprueba tu conexión a internet
  2. Comprueba que tu Client Secret es correcto
  3. 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:

  1. Asegúrate de incluir todas las dependencias necesarias en la build
  2. Comprueba que tu configuración de Patreon está lista para producción
  3. 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 postMessage con 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

  1. 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}");
// 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 plataforma
  • Test Deep Link Callback: prueba el manejo de deep links en móvil
  • Test WebGL Callback: prueba el manejo del middleware en WebGL
  • Show Platform Info: muestra la información de la plataforma actual

Scripts de prueba

  • PatreonCallbackManager: pruebas por plataforma
  • PatreonDeepLinkHandler: pruebas de deep links en móvil
  • PatreonWebGLHandler: pruebas del middleware en WebGL
  • PatreonMobileTest: 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:

  1. Consulta la documentación - Aquí se tratan los problemas más comunes
  2. Únete a nuestra comunidad de Discord - Recibe ayuda de otros desarrolladores y de nuestro equipo
  3. 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:

Actualizaciones

Mantente al día con las últimas funciones y correcciones:

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 PatreonConfig al 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_url si image_url está 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)
  • 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:

  1. 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
  2. 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:

  1. 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)
  2. Datos contradictorios: la API puede devolver valores en conflicto (p. ej., patron_status: "not_patron" pero is_patron: true)
  3. Mezcla de tipos de cuenta: los datos de usuario y de creador a veces se mezclan en las respuestas
  4. Problemas con el estado de seguidor: el campo is_follower no es fiable y puede devolver false aunque 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 devolver false aunque 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!