Назад до 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-слухач для колбеків OAuth
  • Підтримка middleware: власний middleware для колбеків OAuth на всіх платформах
  • Кросплатформність: працює на WebGL, Android, iOS, Windows, Mac і Linux
  • Безпечне керування токенами: шифрування з прив'язкою до пристрою та виведенням ключа PBKDF2
  • Потокобезпечні операції: коректна обробка HTTP-запитів
  • Гарний інтерфейс колбеку: налаштовувані HTML-сторінки успіху й помилки
  • Перевірка state: захист від CSRF із перевіркою параметра state
  • Оновлення токена: автоматичне оновлення токена доступу
  • Отримання профілю користувача: дані користувача та відомості про підписку
  • Тести безпеки: вбудовані інструменти перевірки й тестування безпеки
  • Підтримка GIF: анімовані аватари Patreon із підтримкою GIF-анімації

Вимоги

Перед початком переконайтеся, що у вас є:

  • Unity 2021.3 LTS або новіша
  • .NET Standard 2.1 або новіший
  • Акаунт автора на Patreon
  • Базові знання Unity та C#
  • Підключення до інтернету для запитів до API Patreon

Важлива примітка

Плагіну потрібна 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. Створіть асет PatreonConfig:
    • Перейдіть до теки Resources (створіть її, якщо її немає)
    • Клацніть правою кнопкою у вікні Project
    • Перейдіть до Create → Patreon Authenticator for Unity → Create New Config
    • Асет буде створено в теці Assets/Resources/ (PatreonConfig)
    • Задайте базові налаштування (див. розділ «Налаштування» нижче)
    • Client ID і Client Secret задаються пізніше скриптом PatreonReEncryptCredentials
  2. Створіть GameObject PatreonManager:
    • Клацніть правою кнопкою у вікні Hierarchy
    • Виберіть Create Empty
    • Перейменуйте GameObject на PatreonManager
  3. Додайте потрібні скрипти до PatreonManager:
    • Виберіть GameObject PatreonManager
    • Add Component → скрипт PatreonManager
    • ВАЖЛИВО: призначте асет 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 (додаткове налаштування не потрібне)

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

    • Автоматично використовуватиметься PatreonEmbeddedServer
    • Створює локальний HTTP-сервер на localhost:3000
  5. Про middleware:
    • Усі платформи використовують middleware для колбеків OAuth
    • 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. Перетягніть асет 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:
    • Щоб реєструвати OAuth-клієнти, треба бути автором на Patreon
    • Перейдіть до 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

Створивши асет PatreonConfig (див. «Налаштування сцени» вище), налаштуйте параметри API Patreon:

  • 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. Обробіть колбек
  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

Основний клас-синглтон для автентифікації Patreon.

Властивості:

  • bool IsUserAuthenticated() - Повертає true, якщо користувач увійшов
  • PatreonUser GetCurrentUser() - Повертає поточного автентифікованого користувача
  • string GetValidAccessToken() - Повертає дійсний access token (за потреби оновлює)

Методи:

  • void StartPatreonAuth() - Запускає OAuth-потік Patreon
  • void Logout() - Виконує вихід поточного користувача й очищає токени
  • void SetAccessToken(string token) - Встановлює access token
  • void ExchangeCodeForToken(string code, string state) - Обмінює код авторизації на access token

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-схеми: власна обробка колбеків

🔗 Обробка колбеків за платформами

Усі платформи (єдина система 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-колбек: обмін postMessage з батьківським вікном
  • Сервер не потрібен: використовується розміщений сервіс middleware
  • Підтримка CORS: обробка міждоменних запитів

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

  • Перенаправлення middleware: https://yourdomain.com/api/oauth/redirect → localhost:3000
  • Вбудований сервер: HTTP Listener на localhost:3000
  • Loopback-потік: браузер → middleware → localhost → колбек застосунку
  • Без залежностей: чиста реалізація на 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 та обфускацію для захисту облікових даних API Patreon. Проте ВИ НЕСЕТЕ ПОВНУ ВІДПОВІДАЛЬНІСТЬ за безпеку своїх облікових даних і будь-які наслідки їх розкриття.

Надані функції безпеки

  • Шифрування AES-256: для захисту Client Secret
  • XOR-обфускація: для обфускації Client ID
  • Багаторівневе виведення ключів: ключі шифрування для кожної платформи
  • Захист від втручання: базова перевірка цілісності
  • Журнал аудиту безпеки: інструменти моніторингу та налагодження

Ваші обов'язки

  • Безпечне зберігання: ніколи не комітьте PatreonConfig у систему контролю версій
  • Правильне використання: дотримуйтеся всіх рекомендацій з безпеки цієї документації
  • Регулярне оновлення: тримайте облікові дані актуальними й періодично змінюйте їх
  • Безпека середовища: переконайтеся, що середовища розробки й продакшну захищені
  • Контроль доступу: обмежте доступ до файлів з обліковими даними та артефактів збірки

Обмеження відповідальності

DRYREL HUB НЕ НЕСЕ ВІДПОВІДАЛЬНОСТІ за будь-яку пряму, непряму, випадкову, особливу, наслідкову чи штрафну шкоду, зокрема, але не виключно:

  • Фінансові втрати: втрату доходу, перерву в роботі чи грошову шкоду
  • Порушення безпеки: несанкціонований доступ до вашого акаунта чи даних Patreon
  • Зловживання API: використання ваших облікових даних третіми особами
  • Розкриття даних: витік чутливої інформації
  • Перебої в роботі: простої чи недоступність сервісу
  • Юридичні наслідки: будь-які правові проблеми через розкриття облікових даних

ВИКОРИСТОВУЙТЕ ЦЕЙ ПЛАГІН НА ВЛАСНИЙ РИЗИК. ЖОДНИХ ГАРАНТІЙ НЕ НАДАЄТЬСЯ.

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

⚠️ Відомі проблеми з різними типами акаунтів

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

1. Не надходить e-mail

  • Проблема: у звичайних користувачів поле e-mail порожнє
  • Причина: обмеження scopes OAuth
  • Рішення: розширені scopes OAuth тепер включають identity[email]

2. Не надходить фото профілю

  • Проблема: URL фото профілю порожній
  • Причина: відмінності у зіставленні полів API
  • Рішення: якщо image_url порожнє, автоматично використовується thumb_url

3. Неправильні дані про рівень/статус

  • Проблема: звичайні користувачі показуються з рівнем «creator»
  • Причина: неузгодженість відповідей API для різних типів акаунтів
  • Рішення: розширене логування й перевірка (див. попередження в консолі)
  • Проблема: посилання на YouTube, Twitter, Facebook порожні
  • Причина: обмежений доступ до полів API для звичайних користувачів
  • Рішення: розширені запити полів у викликах API

🔍 Інформація для налагодження

Тепер плагін веде детальний лог налагодження. Перевірте в Console Unity:

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

📋 Чек-лист тестування

Під час тестування з різними типами акаунтів:

  1. Тест з акаунтом автора:
    • ✅ E-mail має надходити
    • ✅ Фото профілю має надходити
    • ✅ Дані про рівень мають бути правильними
    • ✅ Посилання на соцмережі можуть бути доступні
  2. Тест з акаунтом звичайного користувача:
    • ⚠️ E-mail може бути недоступний (залежить від scope)
    • ✅ Фото профілю має надходити (із запасним варіантом)
    • ⚠️ Дані про рівень можуть бути неправильними (пишеться попередження)
    • ⚠️ Посилання на соцмережі можуть бути недоступні

🛠️ Розширені scopes OAuth

Тепер плагін запитує розширені 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 до endpoints campaigns/pledges
  • Довідка: правильні способи визначення підписників див. у Patreon API Guide

Такий підхід дає надійні дані користувача незалежно від невідповідностей API.


Дякуємо!

Дякуємо, що використовуєте Patreon Authenticator for Unity. Сподіваємося, плагін допоможе вам створювати чудові можливості для ваших патронів на Patreon!