Добре дошли в 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 (задължително)
ВАЖНО: тази стъпка е задължителна преди използване на плъгина!
- Отворете 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. Настройка на сцената
- Създайте asset PatreonConfig:
- Отидете в папката Resources (създайте я, ако я няма)
- Щракнете с десен бутон в прозореца Project
- Отидете на
Create → Patreon Authenticator for Unity → Create New Config - Asset-ът ще бъде създаден в папката
Assets/Resources/(PatreonConfig) - Задайте основните настройки (вижте раздел „Конфигурация“ по-долу)
- Client ID и Client Secret се задават по-късно със скрипта PatreonReEncryptCredentials
- Създайте GameObject PatreonManager:
- Щракнете с десен бутон в прозореца Hierarchy
- Изберете
Create Empty - Преименувайте GameObject-а на
PatreonManager
- Добавете нужните скриптове към PatreonManager:
- Изберете GameObject
PatreonManager - Add Component → скрипт
PatreonManager - ВАЖНО: задайте asset-а 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 callback-и (не е нужна допълнителна настройка)
🖥️ Десктоп платформи (Windows/Mac/Linux):
- Автоматично ще се използва
PatreonEmbeddedServer - Създава локален HTTP сървър на
localhost:3000
- Автоматично ще се използва
- За 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
- Проверете настройката:
- 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 (по избор, но се препоръчва)
- Плъзнете asset-а PatreonConfig в полето
PatreonConfig Asset - Ако зададете PatreonConfig: стойностите се попълват автоматично след криптирането
- Ако не зададете PatreonConfig: ще трябва да копирате криптираните стойности ръчно
Стъпка 4: Криптирайте повторно данните си
- Щракнете с десен бутон върху скрипта в Inspector
- Изберете „Re-Encrypt All Credentials“ от контекстното меню
- Изчакайте процесът да завърши - в Console ще се появят съобщения за успех
Стъпка 5: Проверете и почистете
- Проверете Console за съобщения за успех
- Ако PatreonConfig е зададен: стойностите се попълват автоматично
- Ако PatreonConfig НЕ е зададен: копирайте ръчно криптираните стойности в PatreonConfig
- Изтрийте GameObject-а - вече не ви трябва в сцената
Конфигурация
Настройка на Patreon
Преди да настроите плъгина в Unity, трябва да подготвите приложението си в Patreon:
- Станете творец в Patreon:
- Трябва да сте творец в Patreon, за да регистрирате OAuth клиенти
- Отидете в 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
След като създадете 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.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:
- Инициализирайте автентикатора
- Стартирайте процеса на вход
- Обработете callback-а
- Проверете токена
Ето прост пример:
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 процеса на Patreonvoid 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“.
Решение:
- Проверете 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 схеми: собствена обработка на 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
- Създайте 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 криптиране и обфускация, за да помогне да защитите идентификационните си данни за 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 при различните видове акаунти
- Решение: подобрени логове и проверки (вижте предупрежденията в конзолата)
4. Социалните връзки не се получават
- Проблем: връзките към YouTube, Twitter, Facebook са празни
- Причина: ограничен достъп до полетата на API за обикновени потребители
- Решение: разширени заявки за полета в извикванията на API
🔍 Информация за отстраняване на грешки
Плъгинът вече има подробни логове за отстраняване на грешки. Вижте Console в Unity за:
🔧 === USER DATA DEBUG ===- Пълен анализ на потребителските данни🔧 Email not available- Предупреждения за ограничения на scope🔧 Normal user has tier_title- Несъответствия между видовете акаунти
📋 Списък за тестване
При тестване с различни видове акаунти:
- Тествайте акаунт на създател:
- ✅ Имейлът трябва да се получи
- ✅ Профилната снимка трябва да се получи
- ✅ Информацията за ниво трябва да е точна
- ✅ Социалните връзки може да са налични
- Тествайте акаунт на обикновен потребител:
- ⚠️ Имейлът може да липсва (зависи от scope)
- ✅ Профилната снимка трябва да се получи (с резервен вариант)
- ⚠️ Информацията за ниво може да е грешна (записва се като предупреждение)
- ⚠️ Социалните връзки може да липсват
🛠️ Разширени OAuth scopes
Плъгинът вече изисква разширени 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 към endpoint-ите campaigns/pledges
- Справка: вижте Patreon API Guide за правилните методи за откриване на последователи
Този подход осигурява надеждни потребителски данни въпреки несъответствията в API.
Благодарим ви!
Благодарим ви, че използвате Patreon Authenticator for Unity. Надяваме се плъгинът да ви помогне да създадете страхотни изживявания за поддръжниците си в Patreon!

