Bun venit la Patreon Authenticator for Unity
Un pachet Unity complet pentru integrarea autentificării Patreon OAuth 2.0, cu server HTTP integrat, funcții de securitate avansate și compatibilitate multiplatformă.
Primii pași
Patreon Authenticator for Unity e un plugin puternic care îți integrează fără efort jocurile Unity cu sistemul de autentificare Patreon. Cu el poți:
- Securitate avansată: criptare AES-256, ofuscare și stocare sigură
- Server HTTP integrat: HTTP listener încorporat pentru callbackurile OAuth
- Suport pentru middleware: middleware propriu pentru callbackurile OAuth pe toate platformele
- Multiplatformă: funcționează pe WebGL, Android, iOS, Windows, Mac și Linux
- Gestionare sigură a tokenurilor: criptare specifică dispozitivului cu derivare de cheie PBKDF2
- Operații thread-safe: gestionare corectă a cererilor HTTP
- Interfață de callback frumoasă: pagini HTML de succes și eroare personalizabile
- Validarea state: protecție CSRF prin validarea parametrului state
- Reîmprospătare token: reîmprospătare automată a access tokenului
- Preluarea profilului: datele utilizatorului și informații despre abonament
- Teste de securitate: instrumente integrate de validare și testare a securității
- Suport GIF: avataruri Patreon animate cu suport pentru animații GIF
Cerințe
Înainte să începi, asigură-te că ai:
- Unity 2021.3 LTS sau mai nou
- .NET Standard 2.1 sau mai nou
- Cont de creator Patreon
- Cunoștințe de bază de Unity și C#
- Conexiune la internet pentru cererile către API-ul Patreon
Notă importantă
Pluginul necesită Unity 2021.3 LTS sau mai nou. Versiunile mai vechi nu sunt suportate.
Instalare
1. Instalează pachetul Newtonsoft.Json (obligatoriu)
IMPORTANT: pasul acesta e obligatoriu înainte de a folosi pluginul!
- Deschide Package Manager în Unity (
Window → Package Manager) - Apasă butonul „+”
- Alege „Install package by name…”
- Enter
com.unity.nuget.newtonsoft-json - Apasă „Add” pentru a instala pachetul
Fără acest pachet scripturile nu se vor compila!
2. Copiază fișierele pluginului
- Copiază folderul
Assets/Plugins/PatreonAuthenticatorForUnity/în proiectul tău Unity - Copiază fișierul
Assets/StreamingAssets/patreon-callback.htmlîn folderul StreamingAssets
3. Configurarea scenei
- Creează asset-ul PatreonConfig:
- Mergi în folderul Resources (creează-l dacă nu există)
- Clic dreapta în fereastra Project
- Mergi la
Create → Patreon Authenticator for Unity → Create New Config - Asset-ul va fi creat în folderul
Assets/Resources/(PatreonConfig) - Setează configurările de bază (vezi secțiunea Configurare de mai jos)
- Client ID și Client Secret se setează mai târziu cu scriptul PatreonReEncryptCredentials
- Creează GameObject-ul PatreonManager:
- Clic dreapta în fereastra Hierarchy
- Alege
Create Empty - Redenumește GameObject-ul în
PatreonManager
- Adaugă scripturile necesare la PatreonManager:
- Selectează GameObject-ul
PatreonManager - Add Component → scriptul
PatreonManager - IMPORTANT: atribuie asset-ul PatreonConfig câmpului „Patreon Config”
- Add Component → scriptul
PatreonCallbackManager(funcționează pe toate platformele, necesită componentele de mai jos) - Add Component → scriptul
PatreonEmbeddedServer(doar platforme desktop) - Add Component → scriptul
PatreonDeepLinkHandler(doar platforme mobile) - Add Component → scriptul
PatreonWebGLHandler(doar platforma WebGL)
Toate scripturile sunt compatibile și pot fi folosite împreună.
- Selectează GameObject-ul
-
Configurare pe platforme:
📱 Platforme mobile (Android/iOS):
- Se va folosi automat
PatreonDeepLinkHandler - Configurare Android: adaugă în
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> - Configurare iOS: adaugă în
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>
🌐 Platforma WebGL:
- Se va folosi automat
PatreonWebGLHandler - Folosește middleware pentru callbackurile OAuth (nu e nevoie de configurare în plus)
🖥️ Platforme desktop (Windows/Mac/Linux):
- Se va folosi automat
PatreonEmbeddedServer - Creează un server HTTP local la
localhost:3000
- Se va folosi automat
- Despre middleware:
- Toate platformele folosesc middleware pentru callbackurile OAuth
- Middleware-ul se ocupă de fluxul OAuth și te redirecționează înapoi în aplicație
- Schemă URI proprie: setată în PatreonConfig (implicit:
PatreonAuthenticatorForUnity.oauth) - Variantă gratuită de middleware: îți poți crea propriul middleware pe GitHub Pages
- Copiază codul middleware din
Assets/StreamingAssets/patreon-callback.html - Găzduiește-l pe GitHub Pages ca middleware gratuit
- Actualizează redirect URI în PatreonConfig ca să indice spre middleware-ul tău
- Schemă URI proprie: configurează middleware-ul pe schema URI din PatreonConfig
- Verifică configurarea:
- GameObject-ul PatreonManager trebuie să aibă toate scripturile necesare
- PatreonConfig trebuie atribuit în componenta PatreonManager
- Nu trebuie să existe erori de compilare în Console
Instalare finalizată
După importul din Unity Asset Store, folderul 'PatreonAuthenticatorForUnity' ar trebui să apară în directorul Assets/Plugins.
Funcții de securitate
Sistem de criptare avansat
Pluginul include un sistem de securitate complet care îți protejează datele de acces Patreon:
Criptare AES-256
- Client Secret e criptat cu AES-256 cu chei specifice dispozitivului
- Derivare de cheie PBKDF2 cu 10,000 iterații pentru securitate maximă
- Criptare specifică dispozitivului — chei unice pentru fiecare dispozitiv/aplicație
- Generare automată de IV pentru fiecare operație de criptare
Ofuscare XOR
- Client ID e ofuscat cu criptare XOR
- Codare Base64 pentru stocare sigură
- Protecție ușoară, potrivită pentru identificatori publici
Stocare sigură
- Stocare PlayerPrefs criptată pentru date sensibile
- Ștergere automată a datelor sensibile din memorie
- Metode de ștergere sigură pentru datele stocate
Validarea securității
- Teste de securitate integrate cu componenta
PatreonSecurityTest - Validare automată a operațiilor de criptare/decriptare
- Teste de performanță pentru operațiile de securitate
- Validarea siguranței memoriei
Niveluri de securitate
| Nivel | Client ID | Client Secret | Utilizare |
|---|---|---|---|
| Maxim | Ofuscat | Criptat | Producție |
| Ridicat | Text simplu | Criptat | Dezvoltare |
| Mediu | Ofuscat | Text simplu | Testare |
| Niciuna | Text simplu | Text simplu | NERECOMANDAT |
Bune practici de securitate
- Activează mereu criptarea pentru Client Secret în producție
- Folosește ofuscarea pentru Client ID când se poate
- Nu face niciodată commit la PatreonConfig.asset în controlul versiunilor
- Testează sistemul de securitate înainte de build-ul de producție
- Folosește stocarea sigură pentru orice date sensibile
- Șterge datele sensibile din memorie când nu mai ai nevoie de ele
CRITIC: configurarea sigură a datelor de acces
ACEST LUCRU E EXTREM DE IMPORTANT PENTRU SECURITATE!
Datele tale de acces Patreon (Client ID și Client Secret) sunt extrem de sensibile și trebuie criptate înainte de folosire. NU le păstra niciodată ca text simplu!
De ce contează
- Text simplu = risc de securitate: dacă datele de acces sunt păstrate ca text simplu, oricine are acces la build-ul tău le poate fura
- Impact financiar: datele furate pot fi folosite pentru acces la contul tău Patreon și pot produce pagube financiare
- Impact profesional: breșele de securitate îți pot afecta reputația și încrederea utilizatorilor
- Implicații legale: măsurile de securitate insuficiente pot duce la probleme legale
Cum îți configurezi sigur datele de acces
Urmează acești pași ca să-ți criptezi datele de acces Patreon:
Pasul 1: Creează GameObject-ul de recriptare
- Creează un GameObject gol nou în scenă
- Redenumește-l în ceva precum
"PatreonEncryptCredentials"(îl vei șterge mai târziu) - Adaugă scriptul
PatreonEncryptCredentialspe GameObject
Pasul 2: Introdu datele de acces reale
- Selectează GameObject-ul în Hierarchy
- În Inspector vei vedea scriptul de recriptare cu instrucțiuni clare
- Completează datele de acces reale în câmpurile dedicate:
Real Client Id: Client ID-ul tău PatreonReal Client Secret: Client Secret-ul tău Patreon
Pasul 3: Atribuie PatreonConfig (opțional, dar recomandat)
- Trage asset-ul PatreonConfig în câmpul
PatreonConfig Asset - Dacă atribui PatreonConfig: valorile se setează automat după criptare
- Dacă nu atribui PatreonConfig: va trebui să copiezi manual valorile criptate
Pasul 4: Recriptează datele de acces
- Clic dreapta pe script în Inspector
- Alege „Re-Encrypt All Credentials” din meniul contextual
- Așteaptă finalizarea procesului - vei vedea mesaje de succes în Console
Pasul 5: Verifică și curăță
- Verifică Console pentru mesaje de succes
- Dacă PatreonConfig a fost atribuit: valorile se setează automat
- Dacă PatreonConfig NU a fost atribuit: copiază manual valorile criptate în PatreonConfig
- Șterge GameObject-ul - nu mai ai nevoie de el în scenă
Configurare
Configurare Patreon
Înainte de a configura pluginul în Unity, trebuie să-ți pregătești aplicația Patreon:
- Devino creator pe Patreon:
- Trebuie să fii creator pe Patreon ca să înregistrezi clienți OAuth
- Mergi la Patreon Developer Console
- Creează un client OAuth:
- Apasă „Create Client” sau „Register New Client”
- Completează detaliile aplicației
- IMPORTANT: setează redirect URI la:
http://localhost:3000/patreon-callback - Trebuie să fie identic cu redirect URI din PatreonConfig
- Obține datele de acces:
- Client ID: copiază-l din setările clientului OAuth
- Client Secret: copiază-l din setările clientului OAuth (păstrează-l secret!)
- Creator ID: numele tău de utilizator Patreon (de ex., dacă Patreon-ul tău e
patreon.com/DryreL, Creator ID eDryreL)
AVERTISMENT DE SECURITATE:
- NU împărtăși niciodată Client ID și Client Secret cu nimeni
- NU face niciodată commit cu aceste valori în controlul versiunilor
- NU le posta niciodată pe forumuri publice sau canale Discord
- Aceste date de acces dau acces complet la contul tău Patreon
Setări Unity
După ce creezi asset-ul PatreonConfig (vezi Configurarea scenei mai sus), configurează setările API Patreon:
- Redirect URI:
http://localhost:3000/patreon-callback(trebuie să corespundă setărilor din consola Patreon) - Creator ID: numele tău de utilizator Patreon (de ex.,
DryreLpentrupatreon.com/DryreL) - Authentication Timeout: cât se așteaptă autentificarea utilizatorului (implicit: 120 secunde)
CRITIC: Redirect URI din PatreonConfig trebuie să fie identic cu cel din setările Patreon Developer Console!
IMPORTANT: nu face niciodată commit cu PatreonConfig în controlul versiunilor!
- Adaugă
Assets/Resources/PatreonConfig.assetîn.gitignore - Acest fișier conține date de acces API sensibile
Client ID și Client Secret se setează automat când folosești scriptul PatreonEncryptCredentials!
🌐 Ghid de configurare middleware
Folosirea schemei URI dinamice
Pluginul folosește acum un sistem de middleware care permite tuturor platformelor să folosească un singur redirect URI.
1. Crearea URL-ului OAuth:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME
Exemple:
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. Setările aplicației Patreon:
- Redirect URI:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME - Client ID: la fel ca înainte
- Client Secret: la fel ca înainte
3. Configurare pe platforme:
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. Configurarea PatreonConfig:
Configurează schema URI proprie în PatreonConfig:
- Custom URI Scheme: schema dorită (de ex.,
mygame.oauth) - Redirect URI: actualizează-l ca să corespundă URL-ului middleware-ului
- Toate modificările: din interfața PatreonConfig
5. URL de test:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME&code=test123&state=test456
✅ Avantaje:
- Un singur middleware pentru toate jocurile
- Schemă dinamică, diferită pentru fiecare joc
- Configurare ușoară, schimbi doar schema
- Detectare automată a platformei
🔧 Utilizare:
- Alege schema:
mygame.oauth - Setările aplicației Patreon:
https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth - Copiază fișierele de platformă și schimbă schema
- Setează
customUriSchemeîn Unity - Testează! 🎯
👑 Configurare Creator API (opțional)
Pentru funcții avansate precum datele campaniei, listele de membri și informațiile despre niveluri:
Pasul 1: Obține Creator's Access Token
- Mergi la Patreon Developer Console
- Creează un „Creator’s Access Token” (nu un OAuth Client)
- Alege scope-urile:
campaigns,campaigns.members,campaigns.tiers - Copiază Access Token și Refresh Token
Pasul 2: Activează Creator API
- În scriptul
PatreonEncryptCredentials:- ✅ Bifează „Enable Creator API”
- Introdu Creator Access Token
- Introdu Creator Refresh Token
- Apasă „Encrypt All Credentials”
- Valorile se setează automat în PatreonConfig
Alternativă: configurare manuală
Poți seta tokenurile Creator API și direct în PatreonConfig:
- Creator Access Token: setat în PatreonConfig pentru acces la datele campaniei/membrilor
- Creator Refresh Token: setat în PatreonConfig pentru reînnoirea tokenului
- Enable Creator API: activează-l în PatreonConfig pentru funcțiile avansate
Notă: asigură-te că ai făcut criptarea!
Pasul 3: Folosește 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());
Pasul 4: Afișează în interfață
Folosește PatreonUserInfoDisplay cu câmpurile noi:
- Numele campaniei, Rezumatul campaniei, Numărul de patroni
- Suma nivelului, Descrierea nivelului, Limita nivelului
- Membru din, Starea contribuției, Următoarea plată
Referință: Patreon API Guide
Autentificare
Fluxul de autentificare
Procesul de autentificare respectă standardele OAuth 2.0:
- Inițializează autentificatorul
- Pornește procesul de autentificare
- Tratează callback-ul
- Validează tokenul
Iată un exemplu simplu:
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
}
}
Gestionarea tokenurilor
Pluginul se ocupă automat de reîmprospătarea și stocarea tokenurilor:
// 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;
}
Referință API
Clase
PatreonManager
Clasa singleton principală care gestionează autentificarea Patreon.
Proprietăți:
bool IsUserAuthenticated()- Returnează true dacă utilizatorul e autentificatPatreonUser GetCurrentUser()- Obține utilizatorul autentificat curentstring GetValidAccessToken()- Obține un access token valid (îl reîmprospătează la nevoie)
Metode:
void StartPatreonAuth()- Pornește fluxul OAuth Patreonvoid Logout()- Deconectează utilizatorul curent și șterge tokenurilevoid SetAccessToken(string token)- Setează access tokenulvoid ExchangeCodeForToken(string code, string state)- Schimbă codul de autorizare pe un access token
PatreonUser
Reprezintă un utilizator Patreon cu informațiile despre abonament.
Proprietăți:
string Id- ID-ul Patreon al utilizatoruluistring FullName- Numele complet al utilizatoruluistring Email- Adresa de e-mail a utilizatoruluistring FirstName- Prenumele utilizatoruluistring LastName- Numele de familie al utilizatoruluistring Vanity- URL-ul personalizat al utilizatoruluistring ImageUrl- URL-ul pozei de profilbool IsPatron- Dacă utilizatorul e patronfloat PledgeAmount- Suma contribuției în dolaribool HasPledge- Dacă utilizatorul are o contribuție activăstring DisplayName- Numele afișat al utilizatoruluistring PatronStatus- Statutul de patron al utilizatoruluistring TierTitle- Titlul nivelului de abonamentint CentsPledged- Suma contribuției în cenți
Metode:
void LoadProfileAvatar(Action<Sprite> onComplete)- Încarcă avatarul de profil al utilizatorului ca Sprite
Metode
StartLogin()
Pornește fluxul OAuth Patreon.
public void StartLogin()
Returnează: void
Exemplu:
authenticator.StartLogin();
Logout()
Deconectează utilizatorul curent și șterge tokenurile salvate.
public void Logout()
Returnează: void
Exemplu:
authenticator.Logout();
Evenimente
OnLoginSuccess
Se declanșează când un utilizator se autentifică cu succes.
public event Action<PatreonUser> OnLoginSuccess;
Parametri:
PatreonUser user- Utilizatorul autentificat
OnLoginFailed
Se declanșează când autentificarea eșuează.
public event Action<string> OnLoginFailed;
Parametri:
string error- Mesajul de eroare care descrie eșecul
Exemple
Autentificare de bază
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
}
}
Gestionarea conținutului 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);
}
}
Depanare
Probleme frecvente
Eroarea „Invalid Client ID”
Problemă: primești eroarea „Invalid Client ID” când încerci să te autentifici.
Soluție:
- Verifică Client ID în Patreon Developer Portal
- Asigură-te că Client ID e introdus corect în Project Settings din Unity
- Asigură-te că aplicația e configurată corect pe Patreon
Probleme la reîmprospătarea tokenurilor
Problemă: tokenurile nu se reîmprospătează automat.
Soluție:
- Verifică conexiunea la internet
- Verifică dacă Client Secret e corect
- Asigură-te că redirect URI corespunde exact
Probleme cu build-urile Unity
Problemă: pluginul merge în editor, dar nu în build-uri.
Soluție:
- Asigură-te că toate dependențele necesare sunt incluse în build
- Verifică dacă configurația Patreon e pregătită pentru producție
- Verifică dacă redirect URI e accesibil din aplicația publicată
Mod de depanare
Activează modul de depanare pentru jurnale mai detaliate:
PatreonConfig config = new PatreonConfig
{
// ... other settings
DebugMode = true
};
Platforme suportate
| Platformă | Stare | Note |
|---|---|---|
| WebGL | ✅ Suport complet | Autentificare în browser cu server integrat |
| Android | ✅ Suport complet | Integrare nativă cu browserul, middleware (URI propriu) |
| iOS | ✅ Suport complet | Integrare nativă cu browserul, middleware (URI propriu) |
| Windows | ✅ Suport complet | Build-uri pe 32 și 64 biți |
| Mac | ✅ Suport complet | Suport universal binary |
| Linux | ✅ Suport complet | Toate distribuțiile principale |
Funcții pe platformele mobile
- Application.identifier: suport complet pe iOS/Android
- Device ID: chei de criptare sigure pentru fiecare dispozitiv
- Browserul sistemului: flux OAuth nativ cu revenire în aplicație
- StreamingAssets: gestionarea fișierelor pe platforme
- Scheme URL: gestionare proprie a callback-urilor
🔗 Gestionarea callback-urilor pe platforme
Toate platformele (sistem middleware unificat)
- Un singur redirect URI:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME - Schemă dinamică: fiecare joc își poate folosi propria schemă URI
- Detectarea platformei: detectare și rutare automate
- Suport universal: funcționează pe desktop, mobil și WebGL
Platforme mobile (Android, iOS, Windows, UWP)
- Deep linking: schemă URI proprie (
YOUR_APP_SCHEME://patreon-callback) - Redirecționare middleware:
https://yourdomain.com/api/oauth/redirect→ deep link - Browserul sistemului: flux OAuth nativ cu revenire automată în aplicație
- Validarea state: protecție CSRF cu parametrul state
Platforma WebGL
- Fluxul middleware: folosește
https://yourdomain.com/api/oauth/redirect - Callback JavaScript: comunicare
postMessagecu fereastra părinte - Fără server propriu: folosește un serviciu middleware găzduit
- Suport CORS: gestionarea cererilor cross-origin
Platforme desktop (Windows, Mac, Linux)
- Redirecționare middleware:
https://yourdomain.com/api/oauth/redirect→localhost:3000 - Server integrat: HTTP Listener la
localhost:3000 - Flux loopback: browser → middleware → localhost → callback-ul aplicației
- Fără dependențe: implementare pură cu HttpListener din .NET
📱 Cerințe de configurare pe mobil
Configurare Android
- Creează AndroidManifest.xml în
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}");
Gestionarea deep link-urilor pe mobil
// 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();
Gestionarea middleware-ului în WebGL
// WebGL middleware callback
PatreonWebGLHandler webGLHandler = GetComponent<PatreonWebGLHandler>();
webGLHandler.StartPatreonOAuthFlow(clientId, state);
// Test WebGL callback
webGLHandler.TestWebGLCallback();
Informații despre platformă
// 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
🧪 Testare
Comenzi de test
Test Platform OAuth Flow: testează fluxul OAuth al platformeiTest Deep Link Callback: testează gestionarea deep link-urilor pe mobilTest WebGL Callback: testează gestionarea middleware-ului în WebGLShow Platform Info: afișează informațiile platformei curente
Scripturi de test
PatreonCallbackManager: testare pe platformePatreonDeepLinkHandler: testarea deep link-urilor pe mobilPatreonWebGLHandler: testarea middleware-ului în WebGLPatreonMobileTest: testarea compatibilității mobile
Testarea securității
Pluginul include un sistem complet de testare a securității:
1. Adaugă componenta Security Test
// Add PatreonSecurityTest component to any GameObject
// Right-click on GameObject → Add Component → PatreonSecurityTest
2. Rulează testele de securitate
// In Inspector, click "Run All Security Tests" or use code:
var securityTest = GetComponent<PatreonSecurityTest>();
securityTest.RunAllTests();
3. Testează componentele individual
// Test encryption only
securityTest.TestEncryption();
// Test obfuscation only
securityTest.TestObfuscation();
// Test secure storage only
securityTest.TestSecureStorage();
// Performance test
securityTest.PerformanceTest();
4. Validarea securității
// Validate entire security system
bool isValid = PatreonSecurity.PatreonSecurity.ValidateSecuritySystem();
Debug.Log($"Security system valid: {isValid}");
Suport
Obține ajutor
Dacă întâmpini probleme sau ai întrebări:
- Citește documentația - Majoritatea problemelor obișnuite sunt descrise aici
- Intră în comunitatea noastră de pe Discord - Primește ajutor de la alți dezvoltatori și de la echipa noastră
- Contactează suportul - Pentru probleme tehnice, trimite-ne:
- Versiunea Unity
- Versiunea pluginului
- Pașii pentru reproducere
- Mesajele de eroare
- Fișierele de log
Comunitate
Intră în comunitatea noastră pentru suport și noutăți:
- E-mail: [email protected]
- Discord: Intră în comunitatea noastră
- YouTube: DryreL Hub
- YouTube #2: DryreL Software
Actualizări
Fii la curent cu cele mai noi funcții și remedieri:
- Unity Asset Store: Descarcă din Marketplace (în curând)
- Comunitatea Discord: Intră pe Discord-ul DryreL Hub pentru suport și noutăți
DECLINAREA RĂSPUNDERII ȘI RESPONSABILITATE
NOTIFICARE IMPORTANTĂ DE SECURITATE
Acest plugin oferă criptare AES-256 și obfuscare pentru a-ți proteja credențialele API Patreon. Totuși, EȘTI SINGURUL RESPONSABIL pentru securitatea credențialelor tale și pentru orice consecințe care apar dacă sunt expuse.
Funcții de securitate oferite
- Criptare AES-256: pentru protecția Client Secret
- Obfuscare XOR: pentru ascunderea Client ID
- Derivare de chei pe mai multe niveluri: chei de criptare specifice platformei
- Protecție anti-modificare: verificare de bază a integrității
- Jurnal de audit de securitate: instrumente de monitorizare și depanare
Responsabilitățile tale
- Stocare sigură: nu face niciodată commit la
PatreonConfigîn sistemul de versionare - Utilizare corectă: urmează toate indicațiile de securitate din această documentație
- Actualizări regulate: ține credențialele la zi și schimbă-le periodic
- Securitatea mediului: asigură-te că mediile de dezvoltare și producție sunt sigure
- Controlul accesului: limitează accesul la fișierele cu credențiale și la rezultatele build-ului
Declinarea răspunderii
DRYREL HUB NU RĂSPUNDE pentru niciun fel de daune directe, indirecte, incidentale, speciale, consecutive sau punitive, inclusiv, dar fără a se limita la:
- Pierderi financiare: venituri pierdute, întreruperea activității sau pierderi bănești
- Breșe de securitate: acces neautorizat la contul sau datele tale Patreon
- Abuz de API: folosirea abuzivă a credențialelor tale de către terți
- Expunerea datelor: scurgerea de informații sensibile
- Întreruperi ale serviciului: nefuncționare sau serviciu indisponibil
- Consecințe juridice: orice probleme juridice cauzate de credențiale expuse
FOLOSEȘTI ACEST PLUGIN PE PROPRIUL RISC. NU SE OFERĂ NICIO GARANȚIE.
🔧 API V2: probleme și soluții pe tipuri de cont
⚠️ Probleme cunoscute cu diferite tipuri de cont
Când testezi cu diferite tipuri de cont Patreon (creator vs. utilizator obișnuit), poți întâlni următoarele probleme:
1. E-mailul nu este preluat
- Problema: câmpul de e-mail e gol pentru utilizatorii obișnuiți
- Cauza: limitările scope-ului OAuth
- Soluția: scope-urile OAuth extinse includ acum
identity[email]
2. Poza de profil nu este preluată
- Problema: URL-ul pozei de profil e gol
- Cauza: diferențe în maparea câmpurilor API
- Soluția: folosește automat
thumb_urldacăimage_urle gol
3. Informații greșite despre nivel/stare
- Problema: utilizatorii obișnuiți apar cu nivelul „creator”
- Cauza: răspunsuri API inconsecvente între tipurile de cont
- Soluția: logare și validare îmbunătățite (vezi avertismentele din consolă)
4. Linkurile sociale nu sunt preluate
- Problema: linkurile YouTube, Twitter, Facebook sunt goale
- Cauza: acces limitat la câmpurile API pentru utilizatorii obișnuiți
- Soluția: cereri de câmpuri extinse în apelurile API
🔍 Informații de depanare
Pluginul include acum logare completă pentru depanare. Verifică Console din Unity pentru:
🔧 === USER DATA DEBUG ===- Analiza completă a datelor utilizatorului🔧 Email not available- Avertismente despre limitările scope-ului🔧 Normal user has tier_title- Inconsecvențe între tipurile de cont
📋 Listă de verificare pentru testare
Când testezi cu diferite tipuri de cont:
- Testează contul de creator:
- ✅ E-mailul trebuie preluat
- ✅ Poza de profil trebuie preluată
- ✅ Informațiile despre nivel trebuie să fie corecte
- ✅ Linkurile sociale pot fi disponibile
- Testează contul de utilizator obișnuit:
- ⚠️ E-mailul poate lipsi (în funcție de scope)
- ✅ Poza de profil trebuie preluată (cu rezervă)
- ⚠️ Informațiile despre nivel pot fi greșite (se loghează ca avertisment)
- ⚠️ Linkurile sociale pot lipsi
🛠️ Scope-uri OAuth extinse
Pluginul cere acum scope-uri extinse:
identity identity[email] identity.memberships campaigns
Asta oferă acces mai bun la datele utilizatorului pentru toate tipurile de cont.
🔧 Validarea și corectarea datelor API
Notă importantă: pluginul include validarea datelor pe client și corecturi pentru inconsecvențele cunoscute ale Patreon API V2. E nevoie de ele pentru că:
- Probleme cu datele API: Patreon API V2 returnează uneori date greșite pentru utilizatori obișnuiți (de ex. arată nivelul „Creator” la utilizatori obișnuiți)
- Date contradictorii: API-ul poate returna valori contradictorii (de ex.
patron_status: "not_patron"daris_patron: true) - Tipuri de cont amestecate: datele de utilizator și de creator se amestecă uneori în răspunsurile API
- Probleme cu starea de urmăritor: câmpul
is_followernu e de încredere și poate returnafalsechiar dacă utilizatorul urmărește
Ce face pluginul:
- ✅ Validează toate datele utilizatorului din API
- ✅ Corectează automat inconsecvențele cunoscute ale datelor
- ✅ Loghează problemele API pentru depanare
- ✅ Oferă valori de rezervă când e nevoie
- ✅ Avertizează despre câmpuri nesigure precum
is_follower
Loguri de urmărit în consolă:
🔧 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
Limitări cunoscute ale API:
is_follower: acest câmp nu e de încredere în Patreon API V2 și poate returnafalsechiar dacă utilizatorul urmărește creatorul- Detectarea urmăritorilor: o detectare exactă necesită apeluri API suplimentare la endpointurile campaigns/pledges
- Referință: vezi Patreon API Guide pentru metodele corecte de detectare a urmăritorilor
Această abordare asigură date de utilizator fiabile, chiar dacă API-ul e inconsecvent.
Mulțumim!
Mulțumim că folosești Patreon Authenticator for Unity. Sperăm că pluginul te ajută să creezi experiențe grozave pentru susținătorii tăi de pe Patreon!

