Ласкаво просимо до 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 (обов'язково)
ВАЖЛИВО: цей крок обов'язковий перед використанням плагіна!
- Відкрийте Package Manager в Unity (
Window → Package Manager) - Натисніть кнопку «+»
- Виберіть «Install package by name…»
- Enter
com.unity.nuget.newtonsoft-json - Натисніть «Add», щоб встановити пакет
Без цього пакета скрипти не скомпілюються!
2. Скопіюйте файли плагіна
- Скопіюйте теку
Assets/Plugins/PatreonAuthenticatorForUnity/у свій проєкт Unity - Скопіюйте файл
Assets/StreamingAssets/patreon-callback.htmlу теку StreamingAssets
3. Налаштування сцени
- Створіть асет PatreonConfig:
- Перейдіть до теки Resources (створіть її, якщо її немає)
- Клацніть правою кнопкою у вікні Project
- Перейдіть до
Create → Patreon Authenticator for Unity → Create New Config - Асет буде створено в теці
Assets/Resources/(PatreonConfig) - Задайте базові налаштування (див. розділ «Налаштування» нижче)
- Client ID і Client Secret задаються пізніше скриптом PatreonReEncryptCredentials
- Створіть GameObject PatreonManager:
- Клацніть правою кнопкою у вікні Hierarchy
- Виберіть
Create Empty - Перейменуйте GameObject на
PatreonManager
- Додайте потрібні скрипти до PatreonManager:
- Виберіть GameObject
PatreonManager - Add Component → скрипт
PatreonManager - ВАЖЛИВО: призначте асет PatreonConfig у полі «Patreon Config»
- Add Component → скрипт
PatreonCallbackManager(працює на всіх платформах, потребує компонентів нижче) - Add Component → скрипт
PatreonEmbeddedServer(лише десктопні платформи) - Add Component → скрипт
PatreonDeepLinkHandler(лише мобільні платформи) - Add Component → скрипт
PatreonWebGLHandler(лише платформа WebGL)
Усі скрипти сумісні й можуть використовуватися разом.
- Виберіть GameObject
-
Налаштування для платформ:
📱 Мобільні платформи (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
- Автоматично використовуватиметься
- Про 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
- Перевірте налаштування:
- На 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 | Застосування |
|---|---|---|---|
| Максимальний | Обфускований | Зашифрований | Продакшн |
| Високий | Відкритий текст | Зашифрований | Розробка |
| Середній | Обфускований | Відкритий текст | Тестування |
| Немає | Відкритий текст | Відкритий текст | НЕ РЕКОМЕНДОВАНО |
Рекомендації з безпеки
- Завжди вмикайте шифрування Client Secret у продакшні
- Використовуйте обфускацію Client ID, коли це можливо
- Ніколи не комітьте PatreonConfig.asset у систему контролю версій
- Перевірте систему безпеки перед збіркою для продакшну
- Використовуйте безпечне зберігання для будь-яких чутливих даних
- Очищуйте чутливі дані з пам'яті, коли вони більше не потрібні
КРИТИЧНО: безпечне налаштування облікових даних
ЦЕ НАДЗВИЧАЙНО ВАЖЛИВО ДЛЯ БЕЗПЕКИ!
Ваші облікові дані Patreon (Client ID і Client Secret) надзвичайно чутливі і мають бути зашифровані перед використанням. НІКОЛИ не зберігайте їх відкритим текстом!
Чому це важливо
- Відкритий текст = загроза безпеці: якщо облікові дані зберігаються відкритим текстом, їх може викрасти будь-хто з доступом до вашої збірки
- Фінансові наслідки: викрадені облікові дані дають доступ до вашого акаунта Patreon і можуть завдати фінансової шкоди
- Професійні наслідки: витоки можуть зашкодити вашій репутації та довірі користувачів
- Юридичні наслідки: недостатні заходи безпеки можуть призвести до юридичних проблем
Як безпечно налаштувати облікові дані
Щоб зашифрувати облікові дані Patreon, виконайте ці кроки:
Крок 1: Створіть GameObject для повторного шифрування
- Створіть новий порожній GameObject у сцені
- Перейменуйте його, наприклад на
"PatreonEncryptCredentials"(потім ви його видалите) - Додайте скрипт
PatreonEncryptCredentialsна GameObject
Крок 2: Введіть справжні облікові дані
- Виберіть GameObject в Hierarchy
- В Inspector з'явиться скрипт повторного шифрування зі зрозумілими інструкціями
- Введіть справжні облікові дані у відповідні поля:
Real Client Id: ваш Client ID PatreonReal Client Secret: ваш Client Secret Patreon
Крок 3: Призначте PatreonConfig (необов'язково, але рекомендовано)
- Перетягніть асет PatreonConfig у поле
PatreonConfig Asset - Якщо призначити PatreonConfig: значення задаються автоматично після шифрування
- Якщо не призначати PatreonConfig: зашифровані значення доведеться скопіювати вручну
Крок 4: Зашифруйте облікові дані повторно
- Клацніть правою кнопкою по скрипту в Inspector
- Виберіть «Re-Encrypt All Credentials» у контекстному меню
- Дочекайтеся завершення процесу - у Console з'являться повідомлення про успіх
Крок 5: Перевірте й приберіть зайве
- Перевірте Console на повідомлення про успіх
- Якщо PatreonConfig було призначено: значення задаються автоматично
- Якщо PatreonConfig НЕ було призначено: скопіюйте зашифровані значення в PatreonConfig вручну
- Видаліть GameObject - у сцені він більше не потрібен
Налаштування
Налаштування Patreon
Перед налаштуванням плагіна в Unity треба підготувати застосунок на Patreon:
- Станьте автором на Patreon:
- Щоб реєструвати OAuth-клієнти, треба бути автором на Patreon
- Перейдіть до Patreon Developer Console
- Створіть OAuth-клієнт:
- Натисніть «Create Client» або «Register New Client»
- Заповніть дані застосунку
- ВАЖЛИВО: вкажіть redirect URI:
http://localhost:3000/patreon-callback - Він має точно збігатися з redirect URI у PatreonConfig
- Отримайте облікові дані:
- 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.oauthhttps://yourdomain.com/api/oauth/redirect?scheme=awesomeapp.authhttps://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 для всіх ігор
- Динамічна схема, своя для кожної гри
- Просте налаштування: змінюється лише схема
- Автоматичне визначення платформи
🔧 Використання:
- Виберіть схему:
mygame.oauth - Налаштування застосунку Patreon:
https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth - Скопіюйте файли платформ і змініть схему
- Вкажіть
customUriSchemeв Unity - Перевірте! 🎯
👑 Налаштування Creator API (необов'язково)
Для розширених функцій — даних кампанії, списків учасників і відомостей про рівні:
Крок 1: Отримайте Creator's Access Token
- Перейдіть до Patreon Developer Console
- Створіть «Creator’s Access Token» (не OAuth Client)
- Виберіть scopes:
campaigns,campaigns.members,campaigns.tiers - Скопіюйте Access Token і Refresh Token
Крок 2: Увімкніть Creator API
- У скрипті
PatreonEncryptCredentials:- ✅ Позначте «Enable Creator API»
- Введіть Creator Access Token
- Введіть Creator Refresh Token
- Натисніть «Encrypt All Credentials»
- Значення автоматично запишуться в 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:
- Ініціалізуйте автентифікатор
- Запустіть процес входу
- Обробіть колбек
- Перевірте токен
Ось простий приклад:
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-потік Patreonvoid Logout()- Виконує вихід поточного користувача й очищає токениvoid SetAccessToken(string token)- Встановлює access tokenvoid 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».
Рішення:
- Перевірте Client ID у Patreon Developer Portal
- Переконайтеся, що Client ID правильно введено в Project Settings Unity
- Переконайтеся, що застосунок правильно налаштовано на Patreon
Проблеми з оновленням токенів
Проблема: токени не оновлюються автоматично.
Рішення:
- Перевірте підключення до інтернету
- Переконайтеся, що Client Secret правильний
- Переконайтеся, що redirect URI збігається точно
Проблеми зі збірками Unity
Проблема: плагін працює в редакторі, але не у збірках.
Рішення:
- Переконайтеся, що всі потрібні залежності включено у збірку
- Перевірте, що налаштування Patreon готові для продакшну
- Переконайтеся, що 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
- Створіть 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}");
Обробка deep link на мобільних
// 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 у WebGLShow Platform Info: показ відомостей про поточну платформу
Тестові скрипти
PatreonCallbackManager: тести за платформамиPatreonDeepLinkHandler: тести deep link на мобільнихPatreonWebGLHandler: тести middleware у WebGLPatreonMobileTest: тести сумісності з мобільними
Тестування безпеки
Плагін містить повноцінну систему тестування безпеки:
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}");
Підтримка
Отримати допомогу
Якщо виникли проблеми чи запитання:
- Перегляньте документацію - тут розібрано найпоширеніші проблеми
- Приєднуйтеся до нашої спільноти в Discord - допоможуть інші розробники й наша команда
- Напишіть у підтримку - з технічних питань вкажіть:
- Версію Unity
- Версію плагіна
- Кроки для відтворення
- Повідомлення про помилки
- Файли логів
Спільнота
Приєднуйтеся до спільноти по підтримку й новини:
- Пошта: [email protected]
- Discord: Приєднатися до спільноти
- YouTube: DryreL Hub
- YouTube #2: DryreL Software
Оновлення
Стежте за новими функціями й виправленнями:
- Unity Asset Store: Завантажити в Marketplace (незабаром)
- Спільнота в Discord: Приєднуйтеся до Discord DryreL Hub по підтримку й новини
ВІДМОВА ВІД ВІДПОВІДАЛЬНОСТІ
ВАЖЛИВЕ ПОВІДОМЛЕННЯ ПРО БЕЗПЕКУ
Плагін надає шифрування 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 для різних типів акаунтів
- Рішення: розширене логування й перевірка (див. попередження в консолі)
4. Не надходять посилання на соцмережі
- Проблема: посилання на YouTube, Twitter, Facebook порожні
- Причина: обмежений доступ до полів API для звичайних користувачів
- Рішення: розширені запити полів у викликах API
🔍 Інформація для налагодження
Тепер плагін веде детальний лог налагодження. Перевірте в Console Unity:
🔧 === USER DATA DEBUG ===- Повний аналіз даних користувача🔧 Email not available- Попередження про обмеження scopes🔧 Normal user has tier_title- Невідповідності типів акаунтів
📋 Чек-лист тестування
Під час тестування з різними типами акаунтів:
- Тест з акаунтом автора:
- ✅ E-mail має надходити
- ✅ Фото профілю має надходити
- ✅ Дані про рівень мають бути правильними
- ✅ Посилання на соцмережі можуть бути доступні
- Тест з акаунтом звичайного користувача:
- ⚠️ E-mail може бути недоступний (залежить від scope)
- ✅ Фото профілю має надходити (із запасним варіантом)
- ⚠️ Дані про рівень можуть бути неправильними (пишеться попередження)
- ⚠️ Посилання на соцмережі можуть бути недоступні
🛠️ Розширені scopes OAuth
Тепер плагін запитує розширені scopes:
identity identity[email] identity.memberships campaigns
Це дає кращий доступ до даних користувача для різних типів акаунтів.
🔧 Перевірка й виправлення даних API
Важливо: плагін перевіряє дані на боці клієнта та виправляє відомі невідповідності Patreon API V2. Це потрібно, тому що:
- Помилки в даних API: Patreon API V2 іноді повертає неправильні дані для звичайних користувачів (наприклад, рівень «Creator»)
- Суперечності в даних: API може повертати суперечливі значення (наприклад,
patron_status: "not_patron", алеis_patron: true) - Змішування типів акаунтів: у відповідях API дані користувача й автора іноді змішуються
- Проблеми зі статусом підписника: поле
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!

