Обратно към Unity

DryreL Software Документация

Patreon Authenticator for Unity

Пълно ръководство за интегриране на Patreon Authenticator for Unity във вашите Unity проекти

Добре дошли в Patreon Authenticator for Unity

Пълен Unity пакет за интегриране на автентикация с Patreon OAuth 2.0, с вграден HTTP сървър, разширени функции за сигурност и съвместимост между платформите.

Първи стъпки

Patreon Authenticator for Unity е мощен плъгин, който безпроблемно свързва вашите Unity игри със системата за автентикация на Patreon. С него можете:

  • Разширена сигурност: криптиране AES-256, обфускация и сигурно съхранение
  • Вграден HTTP сървър: вграден HTTP listener за OAuth callback-и
  • Поддръжка на middleware: собствен middleware за OAuth callback-и на всички платформи
  • Мултиплатформен: работи на WebGL, Android, iOS, Windows, Mac и Linux
  • Сигурно управление на токени: криптиране за конкретното устройство с извеждане на ключ PBKDF2
  • Нишково безопасни операции: правилна обработка на HTTP заявки
  • Красив callback интерфейс: персонализируеми HTML страници за успех и грешка
  • Проверка на state: защита от CSRF чрез проверка на параметъра state
  • Обновяване на токен: автоматично обновяване на access токена
  • Извличане на потребителски профил: данни за потребителя и членството
  • Тестове за сигурност: вградени инструменти за проверка и тестване на сигурността
  • Поддръжка на GIF: анимирани аватари от Patreon с поддръжка на GIF анимация

Изисквания

Преди да започнете, уверете се, че имате:

  • Unity 2021.3 LTS или по-нова
  • .NET Standard 2.1 или по-нов
  • Акаунт на творец в Patreon
  • Основни познания по Unity и C#
  • Интернет връзка за заявките към Patreon API

Важна бележка

Плъгинът изисква Unity 2021.3 LTS или по-нова. По-старите версии не се поддържат.

Инсталиране

1. Инсталирайте пакета Newtonsoft.Json (задължително)

ВАЖНО: тази стъпка е задължителна преди използване на плъгина!

  1. Отворете Package Manager в Unity (Window → Package Manager)
  2. Натиснете бутона „+“
  3. Изберете „Install package by name…“
  4. Enter com.unity.nuget.newtonsoft-json
  5. Натиснете „Add“, за да инсталирате пакета

Без този пакет скриптовете няма да се компилират!

2. Копирайте файловете на плъгина

  1. Копирайте папката Assets/Plugins/PatreonAuthenticatorForUnity/ във вашия Unity проект
  2. Копирайте файла Assets/StreamingAssets/patreon-callback.html в папката StreamingAssets

3. Настройка на сцената

  1. Създайте asset PatreonConfig:
    • Отидете в папката Resources (създайте я, ако я няма)
    • Щракнете с десен бутон в прозореца Project
    • Отидете на Create → Patreon Authenticator for Unity → Create New Config
    • Asset-ът ще бъде създаден в папката Assets/Resources/ (PatreonConfig)
    • Задайте основните настройки (вижте раздел „Конфигурация“ по-долу)
    • Client ID и Client Secret се задават по-късно със скрипта PatreonReEncryptCredentials
  2. Създайте GameObject PatreonManager:
    • Щракнете с десен бутон в прозореца Hierarchy
    • Изберете Create Empty
    • Преименувайте GameObject-а на PatreonManager
  3. Добавете нужните скриптове към PatreonManager:
    • Изберете GameObject PatreonManager
    • Add Component → скрипт PatreonManager
    • ВАЖНО: задайте asset-а PatreonConfig в полето „Patreon Config“
    • Add Component → скрипт PatreonCallbackManager (работи на всички платформи, изисква компонентите по-долу)
    • Add Component → скрипт PatreonEmbeddedServer (само десктоп платформи)
    • Add Component → скрипт PatreonDeepLinkHandler (само мобилни платформи)
    • Add Component → скрипт PatreonWebGLHandler (само платформа WebGL)

    Всички скриптове са съвместими и могат да се използват заедно.

  4. Настройка по платформи:

    📱 Мобилни платформи (Android/iOS):

    • Автоматично ще се използва PatreonDeepLinkHandler
    • Настройка за 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="PatreonAuthenticatorForUnity.oauth" />
        </intent-filter>
      </activity>
      
    • Настройка за iOS: добавете във вашия 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>
      

    🌐 Платформа WebGL:

    • Автоматично ще се използва PatreonWebGLHandler
    • Използва middleware за OAuth callback-и (не е нужна допълнителна настройка)

    🖥️ Десктоп платформи (Windows/Mac/Linux):

    • Автоматично ще се използва PatreonEmbeddedServer
    • Създава локален HTTP сървър на localhost:3000
  5. За middleware:
    • Всички платформи използват middleware за OAuth callback-и
    • Middleware-ът обработва OAuth процеса и пренасочва обратно към вашето приложение
    • Собствена URI схема: задава се в PatreonConfig (по подразбиране: PatreonAuthenticatorForUnity.oauth)
    • Безплатен вариант за middleware: можете да създадете свой middleware в GitHub Pages
    • Копирайте кода на middleware от Assets/StreamingAssets/patreon-callback.html
    • Хостнете го в GitHub Pages като безплатен middleware
    • Обновете redirect URI в PatreonConfig да сочи към вашия middleware
    • Собствена URI схема: настройте middleware-а към вашата URI схема от PatreonConfig
  6. Проверете настройката:
    • GameObject-ът PatreonManager трябва да има всички нужни скриптове
    • PatreonConfig трябва да е зададен в компонента PatreonManager
    • В Console не трябва да има грешки при компилиране

Инсталирането е завършено

След импортиране от Unity Asset Store в директорията Assets/Plugins трябва да се появи папка 'PatreonAuthenticatorForUnity'.

Функции за сигурност

Разширена система за криптиране

Плъгинът включва пълна система за сигурност, която пази данните ви за достъп до Patreon:

Криптиране AES-256

  • Client Secret се криптира с AES-256 с ключове за конкретното устройство
  • Извеждане на ключ PBKDF2 с 10,000 итерации за максимална сигурност
  • Криптиране за конкретното устройство — уникални ключове за всяко устройство/приложение
  • Автоматично генериране на IV за всяка операция по криптиране

XOR обфускация

  • Client ID се обфускира с XOR криптиране
  • Кодиране Base64 за сигурно съхранение
  • Лека защита, подходяща за публични идентификатори

Сигурно съхранение

  • Криптирано PlayerPrefs хранилище за чувствителни данни
  • Автоматично изчистване на чувствителни данни от паметта
  • Методи за сигурно изтриване на съхранени данни

Проверка на сигурността

  • Вградени тестове за сигурност с компонента PatreonSecurityTest
  • Автоматична проверка на операциите по криптиране/декриптиране
  • Тестове за производителност на операциите по сигурност
  • Проверка на безопасността на паметта

Нива на сигурност

Ниво Client ID Client Secret Употреба
Максимално Обфускиран Криптиран Продукция
Високо Обикновен текст Криптиран Разработка
Средно Обфускиран Обикновен текст Тестване
Няма Обикновен текст Обикновен текст НЕ СЕ ПРЕПОРЪЧВА

Добри практики за сигурност

  1. Винаги включвайте криптирането на Client Secret в продукция
  2. Използвайте обфускация за Client ID, когато е възможно
  3. Никога не комитвайте PatreonConfig.asset в системата за контрол на версиите
  4. Тествайте системата за сигурност преди продукционния билд
  5. Използвайте сигурно съхранение за всякакви чувствителни данни
  6. Изчиствайте чувствителните данни от паметта, когато вече не са нужни

КРИТИЧНО: сигурна настройка на данните за достъп

ТОВА Е ИЗКЛЮЧИТЕЛНО ВАЖНО ЗА СИГУРНОСТТА!

Вашите данни за достъп до Patreon (Client ID и Client Secret) са изключително чувствителни и трябва да се криптират преди употреба. НИКОГА не ги съхранявайте като обикновен текст!

Защо това е важно

  • Обикновен текст = риск за сигурността: ако данните ви за достъп са в обикновен текст, всеки с достъп до билда ви може да ги открадне
  • Финансови последици: откраднатите данни дават достъп до акаунта ви в Patreon и могат да причинят финансови щети
  • Професионални последици: пробивите в сигурността могат да навредят на репутацията ви и на доверието на потребителите
  • Правни последици: недостатъчните мерки за сигурност могат да доведат до правни проблеми

Как да настроите сигурно данните си за достъп

Следвайте тези стъпки, за да криптирате данните си за достъп до Patreon:

Стъпка 1: Създайте GameObject за повторно криптиране

  1. Създайте нов празен GameObject в сцената
  2. Преименувайте го например на "PatreonEncryptCredentials" (после ще го изтриете)
  3. Добавете скрипта PatreonEncryptCredentials към GameObject-а

Стъпка 2: Въведете истинските си данни за достъп

  1. Изберете GameObject-а в Hierarchy
  2. В Inspector ще видите скрипта за повторно криптиране с ясни инструкции
  3. Попълнете истинските си данни в съответните полета:
    • Real Client Id: вашият Client ID в Patreon
    • Real Client Secret: вашият Client Secret в Patreon
  1. Плъзнете asset-а PatreonConfig в полето PatreonConfig Asset
  2. Ако зададете PatreonConfig: стойностите се попълват автоматично след криптирането
  3. Ако не зададете PatreonConfig: ще трябва да копирате криптираните стойности ръчно

Стъпка 4: Криптирайте повторно данните си

  1. Щракнете с десен бутон върху скрипта в Inspector
  2. Изберете „Re-Encrypt All Credentials“ от контекстното меню
  3. Изчакайте процесът да завърши - в Console ще се появят съобщения за успех

Стъпка 5: Проверете и почистете

  1. Проверете Console за съобщения за успех
  2. Ако PatreonConfig е зададен: стойностите се попълват автоматично
  3. Ако PatreonConfig НЕ е зададен: копирайте ръчно криптираните стойности в PatreonConfig
  4. Изтрийте GameObject-а - вече не ви трябва в сцената

Конфигурация

Настройка на Patreon

Преди да настроите плъгина в Unity, трябва да подготвите приложението си в Patreon:

  1. Станете творец в Patreon:
    • Трябва да сте творец в Patreon, за да регистрирате OAuth клиенти
    • Отидете в Patreon Developer Console
  2. Създайте OAuth клиент:
    • Натиснете „Create Client“ или „Register New Client“
    • Попълнете данните на приложението
    • ВАЖНО: задайте redirect URI: http://localhost:3000/patreon-callback
    • Той трябва да съвпада точно с redirect URI в PatreonConfig
  3. Вземете данните си за достъп:
    • Client ID: копирайте го от настройките на OAuth клиента
    • Client Secret: копирайте го от настройките на OAuth клиента (пазете го в тайна!)
    • Creator ID: потребителското ви име в Patreon (напр. ако Patreon-ът ви е patreon.com/DryreL, Creator ID е DryreL)

ПРЕДУПРЕЖДЕНИЕ ЗА СИГУРНОСТ:

  • НИКОГА не споделяйте Client ID и Client Secret с никого
  • НИКОГА не комитвайте тези стойности в системата за контрол на версиите
  • НИКОГА не ги публикувайте в публични форуми или Discord канали
  • Тези данни дават пълен достъп до акаунта ви в Patreon

Настройки на Unity

След като създадете asset-а PatreonConfig (вижте „Настройка на сцената“ по-горе), настройте Patreon API:

  • Redirect URI: http://localhost:3000/patreon-callback (трябва да съвпада с настройките в конзолата на Patreon)
  • Creator ID: потребителското ви име в Patreon (напр. DryreL за patreon.com/DryreL)
  • Authentication Timeout: колко да се чака автентикацията на потребителя (по подразбиране: 120 секунди)

КРИТИЧНО: Redirect URI в PatreonConfig трябва да съвпада точно с този в настройките на Patreon Developer Console!

ВАЖНО: никога не комитвайте PatreonConfig в системата за контрол на версиите!

  • Добавете Assets/Resources/PatreonConfig.asset във вашия .gitignore
  • Този файл съдържа чувствителни API данни за достъп

Client ID и Client Secret се задават автоматично, когато използвате скрипта PatreonEncryptCredentials!

🌐 Ръководство за настройка на middleware

Използване на динамична URI схема

Плъгинът вече използва middleware система, с която всички платформи работят с един redirect URI.

1. Създаване на OAuth URL:

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

Примери:

  • 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. Настройки на приложението в Patreon:

  • Redirect URI: https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME
  • Client ID: както преди
  • Client Secret: както преди

3. Настройка по платформи:

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. Настройка на PatreonConfig:

Задайте собствена URI схема в PatreonConfig:

  • Custom URI Scheme: схемата, която искате (напр. mygame.oauth)
  • Redirect URI: обновете го да съвпада с URL на вашия middleware
  • Всички промени: през интерфейса на PatreonConfig

5. Тестов URL:

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

✅ Предимства:

  • Един middleware за всички игри
  • Динамична схема, различна за всяка игра
  • Лесна настройка, сменя се само схемата
  • Автоматично разпознаване на платформата

🔧 Употреба:

  1. Изберете схема: mygame.oauth
  2. Настройки на приложението в Patreon: https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth
  3. Копирайте файловете за платформите и сменете схемата
  4. Задайте customUriScheme в Unity
  5. Тествайте! 🎯

👑 Настройка на Creator API (по избор)

За разширени функции като данни за кампанията, списъци с членове и информация за нивата:

Стъпка 1: Вземете Creator's Access Token

  1. Отидете в Patreon Developer Console
  2. Създайте „Creator’s Access Token“ (не OAuth Client)
  3. Изберете scopes: campaigns, campaigns.members, campaigns.tiers
  4. Копирайте Access Token и Refresh Token

Стъпка 2: Включете Creator API

  1. В скрипта PatreonEncryptCredentials:
    • ✅ Отметнете „Enable Creator API“
    • Въведете Creator Access Token
    • Въведете Creator Refresh Token
  2. Натиснете „Encrypt All Credentials“
  3. Стойностите се записват автоматично в PatreonConfig

Алтернатива: ръчна настройка

Можете да зададете токените на Creator API и директно в PatreonConfig:

  • Creator Access Token: в PatreonConfig, за достъп до данни за кампанията/членовете
  • Creator Refresh Token: в PatreonConfig, за подновяване на токена
  • Enable Creator API: включете го в PatreonConfig за разширените функции

Бележка: уверете се, че криптирането е направено!

Стъпка 3: Използвайте 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());

Стъпка 4: Покажете в интерфейса

Използвайте PatreonUserInfoDisplay с новите полета:

  • Име на кампанията, Резюме на кампанията, Брой патрони
  • Сума на нивото, Описание на нивото, Лимит на нивото
  • Член от, Статус на дарението, Следващо плащане

Справка: Patreon API Guide

Автентикация

Процес на вход

Процесът на автентикация следва стандартите на OAuth 2.0:

  1. Инициализирайте автентикатора
  2. Стартирайте процеса на вход
  3. Обработете callback-а
  4. Проверете токена

Ето прост пример:

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
    }
}

Управление на токени

Плъгинът автоматично обновява и съхранява токените:

// 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;
}

API справочник

Класове

PatreonManager

Основният singleton клас за автентикация с Patreon.

Свойства:

  • bool IsUserAuthenticated() - Връща true, ако потребителят е влязъл
  • PatreonUser GetCurrentUser() - Връща текущия автентикиран потребител
  • string GetValidAccessToken() - Връща валиден access токен (обновява го при нужда)

Методи:

  • void StartPatreonAuth() - Стартира OAuth процеса на Patreon
  • void Logout() - Излиза от профила на текущия потребител и изчиства токените
  • void SetAccessToken(string token) - Задава access токена
  • void ExchangeCodeForToken(string code, string state) - Разменя кода за оторизация срещу access токен

PatreonUser

Представя потребител на Patreon с информацията за абонамента му.

Свойства:

  • string Id - Patreon ID на потребителя
  • string FullName - Пълно име на потребителя
  • string Email - Имейл адрес на потребителя
  • string FirstName - Собствено име на потребителя
  • string LastName - Фамилия на потребителя
  • string Vanity - Персонален URL на потребителя
  • string ImageUrl - URL на профилната снимка
  • bool IsPatron - Дали потребителят е патрон
  • float PledgeAmount - Сума на дарението в долари
  • bool HasPledge - Дали потребителят има активно дарение
  • string DisplayName - Показвано име на потребителя
  • string PatronStatus - Статус на патрон на потребителя
  • string TierTitle - Име на нивото на абонамента
  • int CentsPledged - Сума на дарението в центове

Методи:

  • void LoadProfileAvatar(Action<Sprite> onComplete) - Зарежда профилния аватар на потребителя като Sprite

Методи

StartLogin()

Стартира OAuth процеса на Patreon.

public void StartLogin()

Връща: void

Пример:

authenticator.StartLogin();

Logout()

Излиза от профила на текущия потребител и изчиства запазените токени.

public void Logout()

Връща: void

Пример:

authenticator.Logout();

Събития

OnLoginSuccess

Задейства се при успешен вход на потребител.

public event Action<PatreonUser> OnLoginSuccess;

Параметри:

  • PatreonUser user - Автентикираният потребител

OnLoginFailed

Задейства се при неуспешен вход.

public event Action<string> OnLoginFailed;

Параметри:

  • string error - Съобщение за грешка, което описва проблема

Примери

Основна автентикация

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
    }
}

Управление на премиум съдържание

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);
    }
}

Отстраняване на проблеми

Чести проблеми

Грешка „Invalid Client ID“

Проблем: при опит за автентикация получавате грешка „Invalid Client ID“.

Решение:

  1. Проверете Client ID в Patreon Developer Portal
  2. Уверете се, че Client ID е въведен правилно в Project Settings на Unity
  3. Уверете се, че приложението е настроено правилно в Patreon

Проблеми с обновяването на токени

Проблем: токените не се обновяват автоматично.

Решение:

  1. Проверете интернет връзката си
  2. Проверете дали Client Secret е правилен
  3. Уверете се, че redirect URI съвпада точно

Проблеми с билдовете в Unity

Проблем: плъгинът работи в редактора, но не и в билдовете.

Решение:

  1. Уверете се, че всички нужни зависимости са включени в билда
  2. Проверете дали настройките на Patreon са готови за продукция
  3. Проверете дали redirect URI е достъпен от публикуваното приложение

Режим за отстраняване на грешки

Включете режима за отстраняване на грешки за по-подробни логове:

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

Поддържани платформи

Платформа Състояние Бележки
WebGL ✅ Пълна поддръжка Автентикация в браузъра с вграден сървър
Android ✅ Пълна поддръжка Нативна интеграция с браузъра, middleware (собствен URI)
iOS ✅ Пълна поддръжка Нативна интеграция с браузъра, middleware (собствен URI)
Windows ✅ Пълна поддръжка 32-битови и 64-битови билдове
Mac ✅ Пълна поддръжка Поддръжка на universal binary
Linux ✅ Пълна поддръжка Всички основни дистрибуции

Функции на мобилните платформи

  • Application.identifier: пълна поддръжка на iOS/Android
  • Device ID: сигурни ключове за криптиране за всяко устройство
  • Системен браузър: нативен OAuth процес с връщане в приложението
  • StreamingAssets: работа с файлове по платформи
  • URL схеми: собствена обработка на callback-и

🔗 Обработка на callback-и по платформи

Всички платформи (единна middleware система)

  • Един redirect URI: https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME
  • Динамична схема: всяка игра може да ползва своя URI схема
  • Разпознаване на платформата: автоматично разпознаване и маршрутизиране
  • Универсална поддръжка: работи на компютри, мобилни и WebGL

Мобилни платформи (Android, iOS, Windows, UWP)

  • Deep linking: собствена URI схема (YOUR_APP_SCHEME://patreon-callback)
  • Пренасочване от middleware: https://yourdomain.com/api/oauth/redirect → deep link
  • Системен браузър: нативен OAuth процес с автоматично връщане в приложението
  • Проверка на state: защита от CSRF с параметъра state

Платформа WebGL

  • Middleware процес: използва https://yourdomain.com/api/oauth/redirect
  • JavaScript callback: postMessage комуникация с родителския прозорец
  • Не е нужен сървър: използва хостната middleware услуга
  • Поддръжка на CORS: обработка на заявки от друг произход

Десктоп платформи (Windows, Mac, Linux)

  • Пренасочване от middleware: https://yourdomain.com/api/oauth/redirect → localhost:3000
  • Вграден сървър: HTTP Listener на localhost:3000
  • Loopback процес: браузър → middleware → localhost → callback на приложението
  • Без зависимости: чиста реализация с HttpListener от .NET

📱 Изисквания за настройка на мобилни

Настройка на Android

  1. Създайте AndroidManifest.xml в 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();

Обработка на middleware в WebGL

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

// Test WebGL callback
webGLHandler.TestWebGLCallback();

Информация за платформата

// 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

🧪 Тестване

Тестови команди

  • Test Platform OAuth Flow: тества OAuth процеса за платформата
  • Test Deep Link Callback: тества обработката на deep link на мобилни
  • Test WebGL Callback: тества обработката на middleware в WebGL
  • Show Platform Info: показва информация за текущата платформа

Тестови скриптове

  • PatreonCallbackManager: тестове по платформи
  • PatreonDeepLinkHandler: тестове на deep link на мобилни
  • PatreonWebGLHandler: тестове на middleware в WebGL
  • PatreonMobileTest: тестове за съвместимост с мобилни

Тестване на сигурността

Плъгинът включва пълна система за тестване на сигурността:

1. Добавете компонента Security Test

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

2. Пуснете тестовете за сигурност

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

3. Тествайте компонентите поотделно

// Test encryption only
securityTest.TestEncryption();

// Test obfuscation only
securityTest.TestObfuscation();

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

// Performance test
securityTest.PerformanceTest();

4. Проверка на сигурността

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

Поддръжка

Получете помощ

Ако срещнете проблем или имате въпроси:

  1. Прочетете документацията - Повечето чести проблеми са описани тук
  2. Присъединете се към нашата общност в Discord - Получете помощ от други разработчици и от екипа ни
  3. Свържете се с поддръжката - При технически проблеми ни изпратете:
    • Версия на Unity
    • Версия на плъгина
    • Стъпки за възпроизвеждане
    • Съобщения за грешки
    • Лог файлове

Общност

Присъединете се към общността ни за поддръжка и новини:

Обновления

Следете най-новите функции и поправки:

ОТКАЗ ОТ ОТГОВОРНОСТ И ОТГОВОРНОСТИ

ВАЖНО СЪОБЩЕНИЕ ЗА СИГУРНОСТ

Този плъгин предлага AES-256 криптиране и обфускация, за да помогне да защитите идентификационните си данни за Patreon API. Въпреки това ВИЕ НОСИТЕ ПЪЛНАТА ОТГОВОРНОСТ за сигурността на данните си и за всички последици, ако те бъдат разкрити.

Предлагани функции за сигурност

  • AES-256 криптиране: за защита на Client Secret
  • XOR обфускация: за скриване на Client ID
  • Многослойно извличане на ключове: ключове за криптиране според платформата
  • Защита от намеса: основна проверка на целостта
  • Журнал за сигурност: инструменти за наблюдение и отстраняване на грешки

Вашите отговорности

  • Сигурно съхранение: никога не качвайте PatreonConfig в системата за контрол на версиите
  • Правилна употреба: спазвайте всички указания за сигурност в тази документация
  • Редовно обновяване: поддържайте данните актуални и ги сменяйте периодично
  • Сигурност на средата: уверете се, че средите за разработка и продукция са защитени
  • Контрол на достъпа: ограничете достъпа до файловете с данни и резултатите от build

Отказ от отговорност

DRYREL HUB НЕ НОСИ ОТГОВОРНОСТ за каквито и да е преки, косвени, случайни, специални, последващи или наказателни вреди, включително, но не само:

  • Финансови загуби: пропуснати приходи, прекъсване на дейността или парични загуби
  • Пробиви в сигурността: неоторизиран достъп до акаунта или данните ви в Patreon
  • Злоупотреба с API: злоупотреба с данните ви от трети страни
  • Изтичане на данни: изтичане на чувствителна информация
  • Прекъсване на услугата: срив или недостъпност на услугата
  • Правни последици: всякакви правни проблеми от разкрити данни

ИЗПОЛЗВАТЕ ТОЗИ ПЛЪГИН НА СОБСТВЕН РИСК. НЕ СЕ ДАВАТ НИКАКВИ ГАРАНЦИИ.

🔧 API V2: проблеми и решения според вида акаунт

⚠️ Известни проблеми с различни видове акаунти

При тестване с различни видове акаунти в Patreon (създател или обикновен потребител) може да срещнете следните проблеми:

1. Имейлът не се получава

  • Проблем: полето за имейл е празно при обикновени потребители
  • Причина: ограничения на OAuth scope
  • Решение: разширените OAuth scopes вече включват identity[email]

2. Профилната снимка не се получава

  • Проблем: URL адресът на профилната снимка е празен
  • Причина: разлики в съпоставянето на полетата в API
  • Решение: автоматично се използва thumb_url, ако image_url е празно

3. Грешна информация за ниво/статус

  • Проблем: обикновени потребители се показват с ниво „creator“
  • Причина: непоследователни отговори на API при различните видове акаунти
  • Решение: подобрени логове и проверки (вижте предупрежденията в конзолата)
  • Проблем: връзките към YouTube, Twitter, Facebook са празни
  • Причина: ограничен достъп до полетата на API за обикновени потребители
  • Решение: разширени заявки за полета в извикванията на API

🔍 Информация за отстраняване на грешки

Плъгинът вече има подробни логове за отстраняване на грешки. Вижте Console в Unity за:

  • 🔧 === USER DATA DEBUG === - Пълен анализ на потребителските данни
  • 🔧 Email not available - Предупреждения за ограничения на scope
  • 🔧 Normal user has tier_title - Несъответствия между видовете акаунти

📋 Списък за тестване

При тестване с различни видове акаунти:

  1. Тествайте акаунт на създател:
    • ✅ Имейлът трябва да се получи
    • ✅ Профилната снимка трябва да се получи
    • ✅ Информацията за ниво трябва да е точна
    • ✅ Социалните връзки може да са налични
  2. Тествайте акаунт на обикновен потребител:
    • ⚠️ Имейлът може да липсва (зависи от scope)
    • ✅ Профилната снимка трябва да се получи (с резервен вариант)
    • ⚠️ Информацията за ниво може да е грешна (записва се като предупреждение)
    • ⚠️ Социалните връзки може да липсват

🛠️ Разширени OAuth scopes

Плъгинът вече изисква разширени scopes:

identity identity[email] identity.memberships campaigns

Така се осигурява по-добър достъп до потребителските данни при всички видове акаунти.

🔧 Проверка и корекция на данните от API

Важна бележка: плъгинът проверява данните на клиента и коригира известните несъответствия на Patreon API V2. Това е нужно, защото:

  1. Проблеми с данните от API: Patreon API V2 понякога връща грешни данни за обикновени потребители (напр. показва ниво „Creator“ на обикновени потребители)
  2. Противоречиви данни: API може да върне противоречиви стойности (напр. patron_status: "not_patron", но is_patron: true)
  3. Смесени видове акаунти: данните на потребители и създатели понякога се смесват в отговорите на API
  4. Проблеми със статуса на последовател: полето is_follower е ненадеждно и може да върне false, дори ако потребителят следва

Какво прави плъгинът:

  • ✅ Проверява всички потребителски данни от API
  • ✅ Автоматично коригира известните несъответствия в данните
  • ✅ Записва проблемите с API за отстраняване на грешки
  • ✅ Дава резервни стойности, когато е нужно
  • ✅ Предупреждава за ненадеждни полета като is_follower

Логове в конзолата, които да следите:

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

Известни ограничения на API:

  • is_follower: това поле е ненадеждно в Patreon API V2 и може да върне false, дори ако потребителят следва създателя
  • Откриване на последователи: точното откриване изисква допълнителни извиквания на API към endpoint-ите campaigns/pledges
  • Справка: вижте Patreon API Guide за правилните методи за откриване на последователи

Този подход осигурява надеждни потребителски данни въпреки несъответствията в API.


Благодарим ви!

Благодарим ви, че използвате Patreon Authenticator for Unity. Надяваме се плъгинът да ви помогне да създадете страхотни изживявания за поддръжниците си в Patreon!