Voltar para Unity

DryreL Software Documentação

Patreon Authenticator for Unity

Guia completo para integrar o Patreon Authenticator for Unity aos seus projetos Unity

Bem-vindo ao Patreon Authenticator for Unity

Um pacote Unity completo para integrar a autenticação OAuth 2.0 do Patreon, com servidor HTTP embutido, recursos avançados de segurança e compatibilidade multiplataforma.

Primeiros passos

O Patreon Authenticator for Unity é um plugin poderoso que integra sem atrito seus jogos Unity ao sistema de autenticação do Patreon. Com este plugin você pode:

  • Segurança avançada: criptografia AES-256, ofuscação e armazenamento seguro
  • Servidor HTTP embutido: listener HTTP integrado para callbacks OAuth
  • Suporte a middleware: middleware personalizado para callbacks OAuth em todas as plataformas
  • Suporte multiplataforma: funciona em WebGL, Android, iOS, Windows, Mac e Linux
  • Gerenciamento seguro de tokens: criptografia específica do dispositivo com derivação de chaves PBKDF2
  • Operações thread-safe: tratamento correto de requisições HTTP
  • Interface de callback bonita: páginas HTML de sucesso/erro personalizáveis
  • Validação de state: proteção CSRF com validação do parâmetro state
  • Renovação de token: renovação automática do token de acesso
  • Busca do perfil do usuário: obtém informações do usuário e detalhes da assinatura
  • Testes de segurança: ferramentas integradas de validação e testes de segurança
  • Suporte a GIF: avatares animados do Patreon com suporte a animação GIF

Pré-requisitos

Antes de começar, verifique se você tem:

  • Unity 2021.3 LTS ou superior
  • .NET Standard 2.1 ou superior
  • Uma conta de criador no Patreon
  • Conhecimento básico de Unity e C#
  • Conexão com a internet para chamadas à API do Patreon

Observação importante

Este plugin requer Unity 2021.3 LTS ou superior. Versões mais antigas não são suportadas.

Instalação

1. Instale o pacote Newtonsoft.Json (obrigatório)

IMPORTANTE: este passo é obrigatório antes de usar o plugin!

  1. Abra o Package Manager do Unity (Window → Package Manager)
  2. Clique no botão “+”
  3. Selecione “Install package by name…”
  4. Enter com.unity.nuget.newtonsoft-json
  5. Clique em “Add” para instalar o pacote

Sem este pacote, os scripts não compilam!

2. Copie os arquivos do plugin

  1. Copie a pasta Assets/Plugins/PatreonAuthenticatorForUnity/ para o seu projeto Unity
  2. Copie o arquivo Assets/StreamingAssets/patreon-callback.html para a sua pasta StreamingAssets

3. Configuração da cena

  1. Crie o asset PatreonConfig:
    • Vá até a pasta Resources (crie-a se não existir)
    • Clique com o botão direito na janela Project
    • Navegue até Create → Patreon Authenticator for Unity → Create New Config
    • Isso criará o asset na pasta Assets/Resources/ (PatreonConfig)
    • Configure as opções básicas (veja a seção Configuração abaixo)
    • O Client ID e o Client Secret serão definidos depois com o script PatreonReEncryptCredentials
  2. Crie o GameObject PatreonManager:
    • Clique com o botão direito na janela Hierarchy
    • Selecione Create Empty
    • Renomeie o GameObject para PatreonManager
  3. Adicione os scripts necessários ao PatreonManager:
    • Selecione o GameObject PatreonManager
    • Add Component → script PatreonManager
    • IMPORTANTE: atribua o asset PatreonConfig ao campo “Patreon Config”
    • Add Component → script PatreonCallbackManager (cuida de todas as plataformas e exige os componentes a seguir)
    • Add Component → script PatreonEmbeddedServer (apenas plataformas desktop)
    • Add Component → script PatreonDeepLinkHandler (apenas plataformas móveis)
    • Add Component → script PatreonWebGLHandler (apenas plataforma WebGL)

    Todos os scripts são compatíveis e podem ser usados juntos.

  4. Configuração por plataforma:

    📱 Plataformas móveis (Android/iOS):

    • O PatreonDeepLinkHandler será usado automaticamente
    • Configuração no Android: adicione ao seu 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>
      
    • Configuração no iOS: adicione ao seu 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:

    • O PatreonWebGLHandler será usado automaticamente
    • Usa middleware para callbacks OAuth (nenhuma configuração extra necessária)

    🖥️ Plataformas desktop (Windows/Mac/Linux):

    • O PatreonEmbeddedServer será usado automaticamente
    • Cria um servidor HTTP local em localhost:3000
  5. Informações sobre o middleware:
    • Todas as plataformas usam middleware para callbacks OAuth
    • O middleware cuida do fluxo OAuth e redireciona para o seu app
    • Esquema de URI personalizado: configurado no PatreonConfig (padrão: PatreonAuthenticatorForUnity.oauth)
    • Opção de middleware grátis: você pode criar seu próprio middleware com o GitHub Pages
    • Copie o código do middleware de Assets/StreamingAssets/patreon-callback.html
    • Publique no GitHub Pages para ter um middleware grátis
    • Atualize a URI de redirecionamento no seu PatreonConfig para apontar para o seu middleware
    • Esquema de URI personalizado: atualize o middleware para usar o seu esquema de URI personalizado do PatreonConfig
  6. Verifique a configuração:
    • O GameObject PatreonManager deve ter todos os scripts necessários
    • O PatreonConfig deve estar atribuído no componente PatreonManager
    • Nenhum erro de compilação deve aparecer no Console

Instalação concluída

Depois de importar da Unity Asset Store, você deve ver a pasta 'PatreonAuthenticatorForUnity' no diretório Assets/Plugins.

Recursos de segurança

Sistema de criptografia avançado

O plugin inclui um sistema de segurança completo para proteger suas credenciais do Patreon:

Criptografia AES-256

  • O Client Secret é criptografado com AES-256 usando chaves específicas do dispositivo
  • Derivação de chaves PBKDF2 com 10,000 iterações para máxima segurança
  • Criptografia específica do dispositivo - as chaves são únicas por dispositivo/aplicativo
  • Geração automática de IV em cada operação de criptografia

Ofuscação XOR

  • O Client ID é ofuscado com criptografia XOR
  • Codificação Base64 para armazenamento seguro
  • Proteção leve adequada para identificadores públicos

Armazenamento seguro

  • Armazenamento em PlayerPrefs criptografado para dados sensíveis
  • Limpeza automática de dados sensíveis da memória
  • Métodos de exclusão segura para remover dados armazenados

Validação de segurança

  • Testes de segurança integrados com o componente PatreonSecurityTest
  • Validação automática das operações de criptografia/descriptografia
  • Testes de desempenho para operações de segurança
  • Validação da segurança da memória

Níveis de segurança

Nível Client ID Client Secret Caso de uso
Máximo Ofuscado Criptografado Produção
Alto Texto simples Criptografado Desenvolvimento
Médio Ofuscado Texto simples Testes
Nenhuma Texto simples Texto simples NÃO RECOMENDADO

Boas práticas de segurança

  1. Sempre ative a criptografia do Client Secret em produção
  2. Use ofuscação para o Client ID quando possível
  3. Nunca faça commit do PatreonConfig.asset no controle de versão
  4. Teste o sistema de segurança antes de gerar a build de produção
  5. Use armazenamento seguro para qualquer dado sensível
  6. Limpe dados sensíveis da memória quando não forem mais necessários

CRÍTICO: configuração segura de credenciais

ISSO É EXTREMAMENTE IMPORTANTE PARA A SEGURANÇA!

Suas credenciais do Patreon (Client ID e Client Secret) são extremamente sensíveis e precisam ser criptografadas antes do uso. NUNCA as guarde em texto puro!

Por que isso importa

  • Texto puro = risco de segurança: se suas credenciais estiverem em texto puro, qualquer pessoa com acesso ao seu build pode roubá-las
  • Impacto financeiro: credenciais roubadas podem dar acesso à sua conta do Patreon e causar prejuízo financeiro
  • Impacto profissional: falhas de segurança podem prejudicar sua reputação e a confiança dos usuários
  • Implicações legais: medidas de segurança insuficientes podem causar problemas legais

Como configurar suas credenciais com segurança

Siga estes passos para criptografar suas credenciais do Patreon:

Passo 1: Crie o GameObject de recriptografia

  1. Crie um GameObject vazio novo na sua cena
  2. Renomeie-o para algo como "PatreonEncryptCredentials" (você vai apagá-lo depois)
  3. Adicione o script PatreonEncryptCredentials ao GameObject

Passo 2: Insira suas credenciais reais

  1. Selecione o GameObject na Hierarchy
  2. No Inspector você verá o script de recriptografia com instruções claras
  3. Preencha suas credenciais reais nos campos indicados:
    • Real Client Id: seu Client ID do Patreon
    • Real Client Secret: seu Client Secret do Patreon
  1. Arraste seu asset PatreonConfig para o campo PatreonConfig Asset
  2. Se você atribuir o PatreonConfig: os valores são definidos automaticamente após a criptografia
  3. Se você não atribuir o PatreonConfig: será preciso copiar os valores criptografados manualmente

Passo 4: Recriptografe suas credenciais

  1. Clique com o botão direito no script no Inspector
  2. Escolha “Re-Encrypt All Credentials” no menu de contexto
  3. Espere o processo terminar - você verá mensagens de sucesso no Console

Passo 5: Verifique e limpe

  1. Confira o Console em busca de mensagens de sucesso
  2. Se o PatreonConfig foi atribuído: os valores são definidos automaticamente
  3. Se o PatreonConfig NÃO foi atribuído: copie os valores criptografados para o seu PatreonConfig manualmente
  4. Apague o GameObject - você não precisa mais dele na cena

Configuração

Configuração do Patreon

Antes de configurar o plugin no Unity, você precisa preparar seu aplicativo no Patreon:

  1. Torne-se criador no Patreon:
  2. Crie um cliente OAuth:
    • Clique em “Create Client” ou “Register New Client”
    • Preencha os dados do seu aplicativo
    • IMPORTANTE: defina a redirect URI como: http://localhost:3000/patreon-callback
    • Ela precisa ser exatamente igual à redirect URI do seu PatreonConfig
  3. Pegue suas credenciais:
    • Client ID: copie das configurações do seu cliente OAuth
    • Client Secret: copie das configurações do seu cliente OAuth (mantenha em segredo!)
    • Creator ID: seu nome de usuário no Patreon (ex.: se seu Patreon é patreon.com/DryreL, seu Creator ID é DryreL)

AVISO DE SEGURANÇA:

  • NUNCA compartilhe seu Client ID e Client Secret com ninguém
  • NUNCA faça commit desses valores no controle de versão
  • NUNCA publique-os em fóruns públicos ou canais do Discord
  • Essas credenciais dão acesso total à sua conta do Patreon

Configurações do Unity

Depois de criar o asset PatreonConfig (veja Configuração da cena acima), configure as opções da API do Patreon:

  • Redirect URI: http://localhost:3000/patreon-callback (precisa coincidir com o console do Patreon)
  • Creator ID: seu nome de usuário no Patreon (ex.: DryreL para patreon.com/DryreL)
  • Authentication Timeout: quanto tempo esperar pela autenticação do usuário (padrão: 120 segundos)

CRÍTICO: a Redirect URI do PatreonConfig precisa ser exatamente igual à do seu Patreon Developer Console!

IMPORTANTE: nunca faça commit do PatreonConfig no controle de versão!

  • Adicione Assets/Resources/PatreonConfig.asset ao seu .gitignore
  • Este arquivo contém credenciais sensíveis da API

Client ID e Client Secret são definidos automaticamente quando você usa o script PatreonEncryptCredentials!

🌐 Guia de configuração do middleware

Uso do esquema de URI dinâmico

Este plugin agora usa um sistema de middleware que permite a todas as plataformas usar uma única redirect URI.

1. Criação da URL OAuth:

https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME

Exemplos:

  • 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. Configurações do app no Patreon:

  • Redirect URI: https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME
  • Client ID: igual a antes
  • Client Secret: igual a antes

3. Configuração 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. Configuração do PatreonConfig:

Configure seu esquema de URI personalizado no PatreonConfig:

  • Custom URI Scheme: o esquema que você quiser (ex.: mygame.oauth)
  • Redirect URI: atualize para coincidir com a URL do seu middleware
  • Todas as alterações: feitas pela interface do PatreonConfig

5. URL de teste:

https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME&code=test123&state=test456

✅ Vantagens:

  • Um único middleware para todos os jogos
  • Esquema dinâmico diferente para cada jogo
  • Configuração fácil, basta trocar o esquema
  • Detecção automática de plataforma

🔧 Uso:

  1. Escolha o esquema: mygame.oauth
  2. Configurações do app no Patreon: https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth
  3. Copie os arquivos de plataforma e troque o esquema
  4. Defina customUriScheme no Unity
  5. Teste! 🎯

👑 Configuração da Creator API (opcional)

Para recursos avançados como dados de campanha, listas de membros e informações de níveis:

Passo 1: Obtenha o Creator's Access Token

  1. Acesse o Patreon Developer Console
  2. Crie um “Creator’s Access Token” (não um OAuth Client)
  3. Selecione os scopes: campaigns, campaigns.members, campaigns.tiers
  4. Copie seu Access Token e seu Refresh Token

Passo 2: Ative a Creator API

  1. No script PatreonEncryptCredentials:
    • ✅ Marque “Enable Creator API”
    • Insira seu Creator Access Token
    • Insira seu Creator Refresh Token
  2. Clique em “Encrypt All Credentials”
  3. Os valores são definidos automaticamente no PatreonConfig

Alternativa: configuração manual

Você também pode definir os tokens da Creator API direto no PatreonConfig:

  • Creator Access Token: defina no PatreonConfig para acessar dados de campanha/membros
  • Creator Refresh Token: defina no PatreonConfig para renovar o token
  • Enable Creator API: ative no PatreonConfig para os recursos avançados

Observação: confirme que a criptografia foi feita!

Passo 3: Use a 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());

Passo 4: Mostre na interface

Use PatreonUserInfoDisplay com os novos campos:

  • Nome da campanha, Resumo da campanha, Número de patrons
  • Valor do nível, Descrição do nível, Limite do nível
  • Membro desde, Status do apoio, Próxima cobrança

Referência: Patreon API Guide

Autenticação

Fluxo de login

O processo de autenticação segue os padrões OAuth 2.0:

  1. Inicialize o autenticador
  2. Inicie o processo de login
  3. Trate o callback
  4. Valide o token

Aqui vai um exemplo 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
    }
}

Gerenciamento de tokens

O plugin cuida automaticamente da renovação e do armazenamento dos 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;
}

Referência da API

Classes

PatreonManager

A classe singleton principal que cuida da autenticação com o Patreon.

Propriedades:

  • bool IsUserAuthenticated() - Retorna true se o usuário estiver logado
  • PatreonUser GetCurrentUser() - Obtém o usuário autenticado atual
  • string GetValidAccessToken() - Obtém um access token válido (renova se necessário)

Métodos:

  • void StartPatreonAuth() - Inicia o fluxo OAuth do Patreon
  • void Logout() - Desconecta o usuário atual e limpa os tokens
  • void SetAccessToken(string token) - Define o access token
  • void ExchangeCodeForToken(string code, string state) - Troca o código de autorização por um access token

PatreonUser

Representa um usuário do Patreon com as informações de assinatura.

Propriedades:

  • string Id - ID do usuário no Patreon
  • string FullName - Nome completo do usuário
  • string Email - E-mail do usuário
  • string FirstName - Primeiro nome do usuário
  • string LastName - Sobrenome do usuário
  • string Vanity - URL personalizada do usuário
  • string ImageUrl - URL da foto de perfil do usuário
  • bool IsPatron - Se o usuário é patron
  • float PledgeAmount - Valor do apoio em dólares
  • bool HasPledge - Se o usuário tem um apoio ativo
  • string DisplayName - Nome de exibição do usuário
  • string PatronStatus - Status de patron do usuário
  • string TierTitle - Título do nível de assinatura do usuário
  • int CentsPledged - Valor do apoio em centavos

Métodos:

  • void LoadProfileAvatar(Action<Sprite> onComplete) - Carrega o avatar do perfil do usuário como Sprite

Métodos

StartLogin()

Inicia o fluxo OAuth do Patreon.

public void StartLogin()

Retorna: void

Exemplo:

authenticator.StartLogin();

Logout()

Desconecta o usuário atual e limpa os tokens salvos.

public void Logout()

Retorna: void

Exemplo:

authenticator.Logout();

Eventos

OnLoginSuccess

Disparado quando um usuário faz login com sucesso.

public event Action<PatreonUser> OnLoginSuccess;

Parâmetros:

  • PatreonUser user - O usuário autenticado

OnLoginFailed

Disparado quando o login falha.

public event Action<string> OnLoginFailed;

Parâmetros:

  • string error - Mensagem de erro que descreve a falha

Exemplos

Autenticação 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
    }
}

Gerenciamento de conteúdo 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);
    }
}

Solução de problemas

Problemas comuns

Erro “Invalid Client ID”

Problema: você recebe um erro “Invalid Client ID” ao tentar se autenticar.

Solução:

  1. Confira seu Client ID no Patreon Developer Portal
  2. Verifique se o Client ID foi inserido corretamente nos Project Settings do Unity
  3. Verifique se seu aplicativo está configurado corretamente no Patreon

Problemas na renovação de tokens

Problema: os tokens não são renovados automaticamente.

Solução:

  1. Confira sua conexão com a internet
  2. Confirme que seu Client Secret está correto
  3. Verifique se sua redirect URI coincide exatamente

Problemas em builds do Unity

Problema: o plugin funciona no editor, mas não nos builds.

Solução:

  1. Verifique se todas as dependências necessárias estão incluídas no build
  2. Confira se a configuração do Patreon está pronta para produção
  3. Confirme que sua redirect URI pode ser acessada pelo aplicativo publicado

Modo de depuração

Ative o modo de depuração para ter logs mais detalhados:

PatreonConfig config = new PatreonConfig
{
    // ... other settings
    DebugMode = true
};

Plataformas suportadas

Plataforma Status Observações
WebGL ✅ Suporte completo Autenticação no navegador com servidor embutido
Android ✅ Suporte completo Integração nativa com o navegador, middleware (URI personalizada)
iOS ✅ Suporte completo Integração nativa com o navegador, middleware (URI personalizada)
Windows ✅ Suporte completo Builds de 32 e 64 bits
Mac ✅ Suporte completo Suporte a universal binary
Linux ✅ Suporte completo Todas as principais distribuições

Recursos em plataformas móveis

  • Application.identifier: suporte completo no iOS/Android
  • Device ID: chaves de criptografia seguras por dispositivo
  • Navegador do sistema: fluxo OAuth nativo com retorno ao app
  • StreamingAssets: tratamento de arquivos por plataforma
  • Esquemas de URL: tratamento de callbacks personalizado

🔗 Tratamento de callbacks por plataforma

Todas as plataformas (sistema de middleware unificado)

  • Uma única redirect URI: https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME
  • Esquema dinâmico: cada jogo pode usar seu próprio esquema de URI
  • Detecção de plataforma: detecção e roteamento automáticos
  • Suporte universal: funciona em desktop, celular e WebGL

Plataformas móveis (Android, iOS, Windows, UWP)

  • Deep linking: esquema de URI personalizado (YOUR_APP_SCHEME://patreon-callback)
  • Redirecionamento do middleware: https://yourdomain.com/api/oauth/redirect → deep link
  • Navegador do sistema: fluxo OAuth nativo com retorno automático ao app
  • Validação de state: proteção contra CSRF com o parâmetro state

Plataforma WebGL

  • Fluxo do middleware: usa https://yourdomain.com/api/oauth/redirect
  • Callback em JavaScript: comunicação postMessage com a janela pai
  • Sem servidor próprio: usa um serviço de middleware hospedado
  • Suporte a CORS: tratamento de requisições de outra origem

Plataformas desktop (Windows, Mac, Linux)

  • Redirecionamento do middleware: https://yourdomain.com/api/oauth/redirect → localhost:3000
  • Servidor embutido: HTTP Listener em localhost:3000
  • Fluxo loopback: navegador → middleware → localhost → callback do app
  • Sem dependências: implementação pura com HttpListener do .NET

📱 Requisitos de configuração móvel

Configuração do Android

  1. Crie o AndroidManifest.xml em 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();

Tratamento do middleware no WebGL

// WebGL middleware callback
PatreonWebGLHandler webGLHandler = GetComponent<PatreonWebGLHandler>();
webGLHandler.StartPatreonOAuthFlow(clientId, state);

// Test WebGL callback
webGLHandler.TestWebGLCallback();

Informações da 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

🧪 Testes

Comandos de teste

  • Test Platform OAuth Flow: testa o fluxo OAuth da plataforma
  • Test Deep Link Callback: testa o tratamento de deep links no celular
  • Test WebGL Callback: testa o tratamento do middleware no WebGL
  • Show Platform Info: mostra as informações da plataforma atual

Scripts de teste

  • PatreonCallbackManager: testes por plataforma
  • PatreonDeepLinkHandler: testes de deep link no celular
  • PatreonWebGLHandler: testes do middleware no WebGL
  • PatreonMobileTest: testes de compatibilidade móvel

Testes de segurança

O plugin inclui um sistema completo de testes de segurança:

1. Adicione o componente Security Test

// Add PatreonSecurityTest component to any GameObject
// Right-click on GameObject → Add Component → PatreonSecurityTest

2. Rode os testes de segurança

// In Inspector, click "Run All Security Tests" or use code:
var securityTest = GetComponent<PatreonSecurityTest>();
securityTest.RunAllTests();

3. Teste componentes individualmente

// Test encryption only
securityTest.TestEncryption();

// Test obfuscation only
securityTest.TestObfuscation();

// Test secure storage only
securityTest.TestSecureStorage();

// Performance test
securityTest.PerformanceTest();

4. Validação de segurança

// Validate entire security system
bool isValid = PatreonSecurity.PatreonSecurity.ValidateSecuritySystem();
Debug.Log($"Security system valid: {isValid}");

Suporte

Obter ajuda

Se você tiver algum problema ou dúvida:

  1. Consulte a documentação - Os problemas mais comuns estão aqui
  2. Entre na nossa comunidade do Discord - Receba ajuda de outros desenvolvedores e da nossa equipe
  3. Fale com o suporte - Para problemas técnicos, envie-nos:
    • Versão do Unity
    • Versão do plugin
    • Passos para reproduzir
    • Mensagens de erro
    • Arquivos de log

Comunidade

Entre na nossa comunidade para suporte e novidades:

Atualizações

Fique por dentro dos recursos e correções mais recentes:

AVISO LEGAL E RESPONSABILIDADE

AVISO IMPORTANTE DE SEGURANÇA

Este plugin oferece criptografia AES-256 e ofuscação para ajudar a proteger suas credenciais da API do Patreon. Porém, VOCÊ É TOTALMENTE RESPONSÁVEL pela segurança das suas credenciais e por quaisquer consequências da exposição delas.

Recursos de segurança oferecidos

  • Criptografia AES-256: para proteger o Client Secret
  • Ofuscação XOR: para ofuscar o Client ID
  • Derivação de chaves em várias camadas: chaves de criptografia por plataforma
  • Proteção contra adulteração: validação básica de integridade
  • Log de auditoria de segurança: ferramentas de monitoramento e depuração

Suas responsabilidades

  • Armazenamento seguro: nunca faça commit de PatreonConfig no controle de versão
  • Uso correto: siga todas as orientações de segurança desta documentação
  • Atualizações regulares: mantenha as credenciais atualizadas e troque-as periodicamente
  • Segurança do ambiente: garanta que seus ambientes de desenvolvimento e produção são seguros
  • Controle de acesso: limite o acesso aos arquivos de credenciais e artefatos de build

Isenção de responsabilidade

A DRYREL HUB NÃO SE RESPONSABILIZA por quaisquer danos diretos, indiretos, incidentais, especiais, consequentes ou punitivos, incluindo, mas não se limitando a:

  • Perdas financeiras: perda de receita, interrupção dos negócios ou danos monetários
  • Violações de segurança: acesso não autorizado à sua conta ou dados do Patreon
  • Abuso da API: uso indevido das suas credenciais por terceiros
  • Exposição de dados: vazamento de informações sensíveis
  • Interrupção do serviço: quedas ou indisponibilidade
  • Consequências legais: quaisquer problemas legais decorrentes da exposição de credenciais

USE ESTE PLUGIN POR SUA CONTA E RISCO. NENHUMA GARANTIA É OFERECIDA.

🔧 API V2: problemas e soluções por tipo de conta

⚠️ Problemas conhecidos com diferentes tipos de conta

Ao testar com diferentes tipos de conta do Patreon (criador ou usuário comum), você pode encontrar estes problemas:

1. E-mail não obtido

  • Problema: o campo de e-mail volta vazio para usuários comuns
  • Causa: limitações dos scopes do OAuth
  • Solução: os scopes ampliados do OAuth agora incluem identity[email]

2. Foto de perfil não obtida

  • Problema: a URL da foto de perfil está vazia
  • Causa: diferenças no mapeamento de campos da API
  • Solução: usa automaticamente thumb_url se image_url estiver vazio

3. Informação de nível/status incorreta

  • Problema: usuários comuns aparecem com o nível “creator”
  • Causa: inconsistências nas respostas da API entre tipos de conta
  • Solução: logs e validação aprimorados (veja os avisos no console)
  • Problema: os links do YouTube, Twitter e Facebook estão vazios
  • Causa: acesso limitado a campos da API para usuários comuns
  • Solução: solicitações ampliadas de campos nas chamadas à API

🔍 Informações de depuração

O plugin agora inclui logs de depuração completos. Confira no Console do Unity:

  • 🔧 === USER DATA DEBUG === - Análise completa dos dados do usuário
  • 🔧 Email not available - Avisos de limitação de scopes
  • 🔧 Normal user has tier_title - Inconsistências por tipo de conta

📋 Checklist de testes

Ao testar com diferentes tipos de conta:

  1. Teste com conta de criador:
    • ✅ O e-mail deve ser obtido
    • ✅ A foto de perfil deve ser obtida
    • ✅ A informação do nível deve estar correta
    • ✅ Links sociais podem estar disponíveis
  2. Teste com conta de usuário comum:
    • ⚠️ O e-mail pode não estar disponível (depende do scope)
    • ✅ A foto de perfil deve ser obtida (com alternativa)
    • ⚠️ A informação do nível pode estar errada (registrada como aviso)
    • ⚠️ Links sociais podem não estar disponíveis

🛠️ Scopes ampliados do OAuth

O plugin agora solicita scopes ampliados:

identity identity[email] identity.memberships campaigns

Isso dá melhor acesso aos dados do usuário em diferentes tipos de conta.

🔧 Validação e correções de dados da API

Observação importante: o plugin inclui validação de dados no cliente e correções para inconsistências conhecidas da API V2 do Patreon. Isso é necessário porque:

  1. Problemas nos dados da API: a API V2 do Patreon às vezes retorna dados errados para usuários comuns (ex.: mostra o nível “Creator” para usuários comuns)
  2. Dados contraditórios: a API pode retornar valores conflitantes (ex.: patron_status: "not_patron" mas is_patron: true)
  3. Mistura de tipos de conta: dados de usuário e de criador às vezes se misturam nas respostas
  4. Problemas no status de seguidor: o campo is_follower não é confiável e pode retornar false mesmo quando o usuário segue o criador

O que o plugin faz:

  • ✅ Valida todos os dados de usuário da API
  • ✅ Corrige automaticamente inconsistências conhecidas
  • ✅ Registra problemas da API para depuração
  • ✅ Fornece valores alternativos quando necessário
  • ✅ Avisa sobre campos pouco confiáveis como is_follower

Logs do console para acompanhar:

  • 🔧 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

Limitações conhecidas da API:

  • is_follower: este campo não é confiável na API V2 do Patreon e pode retornar false mesmo quando o usuário segue o criador
  • Detecção de seguidores: para detectar seguidores com precisão, são necessárias chamadas extras aos endpoints campaigns/pledges
  • Referência: veja o Patreon API Guide para métodos corretos de detecção de seguidores

Assim os dados de usuário ficam confiáveis apesar das inconsistências da API.


Obrigado!

Obrigado por usar o Patreon Authenticator for Unity. Esperamos que este plugin ajude você a criar experiências incríveis para seus apoiadores no Patreon!