Înapoi la Unity

DryreL Software Documentație

Patreon Authenticator for Unity

Ghid complet pentru integrarea Patreon Authenticator for Unity în proiectele tale Unity

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!

  1. Deschide Package Manager în Unity (Window → Package Manager)
  2. Apasă butonul „+”
  3. Alege „Install package by name…”
  4. Enter com.unity.nuget.newtonsoft-json
  5. Apasă „Add” pentru a instala pachetul

Fără acest pachet scripturile nu se vor compila!

2. Copiază fișierele pluginului

  1. Copiază folderul Assets/Plugins/PatreonAuthenticatorForUnity/ în proiectul tău Unity
  2. Copiază fișierul Assets/StreamingAssets/patreon-callback.html în folderul StreamingAssets

3. Configurarea scenei

  1. 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
  2. Creează GameObject-ul PatreonManager:
    • Clic dreapta în fereastra Hierarchy
    • Alege Create Empty
    • Redenumește GameObject-ul în PatreonManager
  3. 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ă.

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

  1. Activează mereu criptarea pentru Client Secret în producție
  2. Folosește ofuscarea pentru Client ID când se poate
  3. Nu face niciodată commit la PatreonConfig.asset în controlul versiunilor
  4. Testează sistemul de securitate înainte de build-ul de producție
  5. Folosește stocarea sigură pentru orice date sensibile
  6. Ș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

  1. Creează un GameObject gol nou în scenă
  2. Redenumește-l în ceva precum "PatreonEncryptCredentials" (îl vei șterge mai târziu)
  3. Adaugă scriptul PatreonEncryptCredentials pe GameObject

Pasul 2: Introdu datele de acces reale

  1. Selectează GameObject-ul în Hierarchy
  2. În Inspector vei vedea scriptul de recriptare cu instrucțiuni clare
  3. Completează datele de acces reale în câmpurile dedicate:
    • Real Client Id: Client ID-ul tău Patreon
    • Real Client Secret: Client Secret-ul tău Patreon
  1. Trage asset-ul PatreonConfig în câmpul PatreonConfig Asset
  2. Dacă atribui PatreonConfig: valorile se setează automat după criptare
  3. Dacă nu atribui PatreonConfig: va trebui să copiezi manual valorile criptate

Pasul 4: Recriptează datele de acces

  1. Clic dreapta pe script în Inspector
  2. Alege „Re-Encrypt All Credentials” din meniul contextual
  3. Așteaptă finalizarea procesului - vei vedea mesaje de succes în Console

Pasul 5: Verifică și curăță

  1. Verifică Console pentru mesaje de succes
  2. Dacă PatreonConfig a fost atribuit: valorile se setează automat
  3. Dacă PatreonConfig NU a fost atribuit: copiază manual valorile criptate în PatreonConfig
  4. Ș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:

  1. Devino creator pe Patreon:
  2. 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
  3. 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 e DryreL)

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

  1. Alege schema: mygame.oauth
  2. Setările aplicației Patreon: https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth
  3. Copiază fișierele de platformă și schimbă schema
  4. Setează customUriScheme în Unity
  5. 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

  1. Mergi la Patreon Developer Console
  2. Creează un „Creator’s Access Token” (nu un OAuth Client)
  3. Alege scope-urile: campaigns, campaigns.members, campaigns.tiers
  4. Copiază Access Token și Refresh Token

Pasul 2: Activează Creator API

  1. În scriptul PatreonEncryptCredentials:
    • ✅ Bifează „Enable Creator API”
    • Introdu Creator Access Token
    • Introdu Creator Refresh Token
  2. Apasă „Encrypt All Credentials”
  3. 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:

  1. Inițializează autentificatorul
  2. Pornește procesul de autentificare
  3. Tratează callback-ul
  4. 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 autentificat
  • PatreonUser GetCurrentUser() - Obține utilizatorul autentificat curent
  • string GetValidAccessToken() - Obține un access token valid (îl reîmprospătează la nevoie)

Metode:

  • void StartPatreonAuth() - Pornește fluxul OAuth Patreon
  • void Logout() - Deconectează utilizatorul curent și șterge tokenurile
  • void SetAccessToken(string token) - Setează access tokenul
  • void 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 utilizatorului
  • string FullName - Numele complet al utilizatorului
  • string Email - Adresa de e-mail a utilizatorului
  • string FirstName - Prenumele utilizatorului
  • string LastName - Numele de familie al utilizatorului
  • string Vanity - URL-ul personalizat al utilizatorului
  • string ImageUrl - URL-ul pozei de profil
  • bool IsPatron - Dacă utilizatorul e patron
  • float PledgeAmount - Suma contribuției în dolari
  • bool HasPledge - Dacă utilizatorul are o contribuție activă
  • string DisplayName - Numele afișat al utilizatorului
  • string PatronStatus - Statutul de patron al utilizatorului
  • string TierTitle - Titlul nivelului de abonament
  • int 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:

  1. Verifică Client ID în Patreon Developer Portal
  2. Asigură-te că Client ID e introdus corect în Project Settings din Unity
  3. 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:

  1. Verifică conexiunea la internet
  2. Verifică dacă Client Secret e corect
  3. Asigură-te că redirect URI corespunde exact

Probleme cu build-urile Unity

Problemă: pluginul merge în editor, dar nu în build-uri.

Soluție:

  1. Asigură-te că toate dependențele necesare sunt incluse în build
  2. Verifică dacă configurația Patreon e pregătită pentru producție
  3. 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 postMessage cu 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

  1. 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}");
// 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 platformei
  • Test Deep Link Callback: testează gestionarea deep link-urilor pe mobil
  • Test WebGL Callback: testează gestionarea middleware-ului în WebGL
  • Show Platform Info: afișează informațiile platformei curente

Scripturi de test

  • PatreonCallbackManager: testare pe platforme
  • PatreonDeepLinkHandler: testarea deep link-urilor pe mobil
  • PatreonWebGLHandler: testarea middleware-ului în WebGL
  • PatreonMobileTest: 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:

  1. Citește documentația - Majoritatea problemelor obișnuite sunt descrise aici
  2. Intră în comunitatea noastră de pe Discord - Primește ajutor de la alți dezvoltatori și de la echipa noastră
  3. 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:

Actualizări

Fii la curent cu cele mai noi funcții și remedieri:

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_url dacă image_url e 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ă)
  • 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:

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

  1. 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)
  2. Date contradictorii: API-ul poate returna valori contradictorii (de ex. patron_status: "not_patron" dar is_patron: true)
  3. Tipuri de cont amestecate: datele de utilizator și de creator se amestecă uneori în răspunsurile API
  4. Probleme cu starea de urmăritor: câmpul is_follower nu e de încredere și poate returna false chiar 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 returna false chiar 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!