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!
- Abra o Package Manager do Unity (
Window → Package Manager) - Clique no botão “+”
- Selecione “Install package by name…”
- Enter
com.unity.nuget.newtonsoft-json - Clique em “Add” para instalar o pacote
Sem este pacote, os scripts não compilam!
2. Copie os arquivos do plugin
- Copie a pasta
Assets/Plugins/PatreonAuthenticatorForUnity/para o seu projeto Unity - Copie o arquivo
Assets/StreamingAssets/patreon-callback.htmlpara a sua pasta StreamingAssets
3. Configuração da cena
- 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
- Crie o GameObject PatreonManager:
- Clique com o botão direito na janela Hierarchy
- Selecione
Create Empty - Renomeie o GameObject para
PatreonManager
- 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.
- Selecione o GameObject
-
Configuração por plataforma:
📱 Plataformas móveis (Android/iOS):
- O
PatreonDeepLinkHandlerserá 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
PatreonWebGLHandlerserá usado automaticamente - Usa middleware para callbacks OAuth (nenhuma configuração extra necessária)
🖥️ Plataformas desktop (Windows/Mac/Linux):
- O
PatreonEmbeddedServerserá usado automaticamente - Cria um servidor HTTP local em
localhost:3000
- O
- 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
- 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
- Sempre ative a criptografia do Client Secret em produção
- Use ofuscação para o Client ID quando possível
- Nunca faça commit do PatreonConfig.asset no controle de versão
- Teste o sistema de segurança antes de gerar a build de produção
- Use armazenamento seguro para qualquer dado sensível
- 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
- Crie um GameObject vazio novo na sua cena
- Renomeie-o para algo como
"PatreonEncryptCredentials"(você vai apagá-lo depois) - Adicione o script
PatreonEncryptCredentialsao GameObject
Passo 2: Insira suas credenciais reais
- Selecione o GameObject na Hierarchy
- No Inspector você verá o script de recriptografia com instruções claras
- Preencha suas credenciais reais nos campos indicados:
Real Client Id: seu Client ID do PatreonReal Client Secret: seu Client Secret do Patreon
Passo 3: Atribua o PatreonConfig (opcional, mas recomendado)
- Arraste seu asset PatreonConfig para o campo
PatreonConfig Asset - Se você atribuir o PatreonConfig: os valores são definidos automaticamente após a criptografia
- Se você não atribuir o PatreonConfig: será preciso copiar os valores criptografados manualmente
Passo 4: Recriptografe suas credenciais
- Clique com o botão direito no script no Inspector
- Escolha “Re-Encrypt All Credentials” no menu de contexto
- Espere o processo terminar - você verá mensagens de sucesso no Console
Passo 5: Verifique e limpe
- Confira o Console em busca de mensagens de sucesso
- Se o PatreonConfig foi atribuído: os valores são definidos automaticamente
- Se o PatreonConfig NÃO foi atribuído: copie os valores criptografados para o seu PatreonConfig manualmente
- 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:
- Torne-se criador no Patreon:
- É preciso ser criador no Patreon para registrar clientes OAuth
- Acesse o Patreon Developer Console
- 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
- 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.:
DryreLparapatreon.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.assetao 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.oauthhttps://yourdomain.com/api/oauth/redirect?scheme=awesomeapp.authhttps://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:
- Escolha o esquema:
mygame.oauth - Configurações do app no Patreon:
https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth - Copie os arquivos de plataforma e troque o esquema
- Defina
customUriSchemeno Unity - 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
- Acesse o Patreon Developer Console
- Crie um “Creator’s Access Token” (não um OAuth Client)
- Selecione os scopes:
campaigns,campaigns.members,campaigns.tiers - Copie seu Access Token e seu Refresh Token
Passo 2: Ative a Creator API
- No script
PatreonEncryptCredentials:- ✅ Marque “Enable Creator API”
- Insira seu Creator Access Token
- Insira seu Creator Refresh Token
- Clique em “Encrypt All Credentials”
- 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:
- Inicialize o autenticador
- Inicie o processo de login
- Trate o callback
- 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 logadoPatreonUser GetCurrentUser()- Obtém o usuário autenticado atualstring GetValidAccessToken()- Obtém um access token válido (renova se necessário)
Métodos:
void StartPatreonAuth()- Inicia o fluxo OAuth do Patreonvoid Logout()- Desconecta o usuário atual e limpa os tokensvoid SetAccessToken(string token)- Define o access tokenvoid 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 Patreonstring FullName- Nome completo do usuáriostring Email- E-mail do usuáriostring FirstName- Primeiro nome do usuáriostring LastName- Sobrenome do usuáriostring Vanity- URL personalizada do usuáriostring ImageUrl- URL da foto de perfil do usuáriobool IsPatron- Se o usuário é patronfloat PledgeAmount- Valor do apoio em dólaresbool HasPledge- Se o usuário tem um apoio ativostring DisplayName- Nome de exibição do usuáriostring PatronStatus- Status de patron do usuáriostring TierTitle- Título do nível de assinatura do usuárioint 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:
- Confira seu Client ID no Patreon Developer Portal
- Verifique se o Client ID foi inserido corretamente nos Project Settings do Unity
- 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:
- Confira sua conexão com a internet
- Confirme que seu Client Secret está correto
- 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:
- Verifique se todas as dependências necessárias estão incluídas no build
- Confira se a configuração do Patreon está pronta para produção
- 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
postMessagecom 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
- 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}");
Tratamento de deep links no celular
// 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 plataformaTest Deep Link Callback: testa o tratamento de deep links no celularTest WebGL Callback: testa o tratamento do middleware no WebGLShow Platform Info: mostra as informações da plataforma atual
Scripts de teste
PatreonCallbackManager: testes por plataformaPatreonDeepLinkHandler: testes de deep link no celularPatreonWebGLHandler: testes do middleware no WebGLPatreonMobileTest: 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:
- Consulte a documentação - Os problemas mais comuns estão aqui
- Entre na nossa comunidade do Discord - Receba ajuda de outros desenvolvedores e da nossa equipe
- 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:
- E-mail: [email protected]
- Discord: Entre na nossa comunidade
- YouTube: DryreL Hub
- YouTube #2: DryreL Software
Atualizações
Fique por dentro dos recursos e correções mais recentes:
- Unity Asset Store: Baixe no Marketplace (em breve)
- Comunidade no Discord: Entre no Discord do DryreL Hub para suporte e novidades
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
PatreonConfigno 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_urlseimage_urlestiver 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)
4. Links sociais não obtidos
- 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:
- 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
- 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:
- 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)
- Dados contraditórios: a API pode retornar valores conflitantes (ex.:
patron_status: "not_patron"masis_patron: true) - Mistura de tipos de conta: dados de usuário e de criador às vezes se misturam nas respostas
- Problemas no status de seguidor: o campo
is_followernão é confiável e pode retornarfalsemesmo 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 retornarfalsemesmo 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!

