Selamat datang di Patreon Authenticator for Unity
Paket Unity lengkap untuk mengintegrasikan autentikasi Patreon OAuth 2.0 dengan server HTTP bawaan, fitur keamanan tingkat lanjut, dan kompatibilitas lintas platform.
Memulai
Patreon Authenticator for Unity adalah plugin andal untuk mengintegrasikan game Unity Anda dengan sistem autentikasi Patreon secara mulus. Dengannya Anda bisa:
- Keamanan tingkat lanjut: enkripsi AES-256, obfuskasi, dan penyimpanan aman
- Server HTTP bawaan: HTTP listener tertanam untuk callback OAuth
- Dukungan middleware: middleware kustom untuk callback OAuth di semua platform
- Lintas platform: berjalan di WebGL, Android, iOS, Windows, Mac, dan Linux
- Manajemen token aman: enkripsi khusus perangkat dengan derivasi kunci PBKDF2
- Operasi thread-safe: penanganan request HTTP yang benar
- UI callback yang menarik: halaman HTML sukses dan error yang bisa disesuaikan
- Validasi state: perlindungan CSRF dengan validasi parameter state
- Refresh token: refresh access token otomatis
- Pengambilan profil pengguna: data pengguna dan informasi keanggotaan
- Pengujian keamanan: alat bawaan untuk validasi dan pengujian keamanan
- Dukungan GIF: avatar Patreon animasi dengan dukungan animasi GIF
Persyaratan
Sebelum mulai, pastikan Anda punya:
- Unity 2021.3 LTS atau lebih baru
- .NET Standard 2.1 atau lebih baru
- Akun kreator Patreon
- Pengetahuan dasar Unity dan C#
- Koneksi internet untuk request API Patreon
Catatan penting
Plugin ini membutuhkan Unity 2021.3 LTS atau lebih baru. Versi lama tidak didukung.
Instalasi
1. Instal paket Newtonsoft.Json (wajib)
PENTING: langkah ini wajib sebelum memakai plugin!
- Buka Package Manager di Unity (
Window → Package Manager) - Klik tombol "+"
- Pilih "Install package by name…"
- Enter
com.unity.nuget.newtonsoft-json - Klik "Add" untuk menginstal paket
Tanpa paket ini skrip tidak akan bisa dikompilasi!
2. Salin file plugin
- Salin folder
Assets/Plugins/PatreonAuthenticatorForUnity/ke proyek Unity Anda - Salin file
Assets/StreamingAssets/patreon-callback.htmlke folder StreamingAssets
3. Pengaturan scene
- Buat asset PatreonConfig:
- Buka folder Resources (buat jika belum ada)
- Klik kanan di jendela Project
- Buka
Create → Patreon Authenticator for Unity → Create New Config - Asset akan dibuat di folder
Assets/Resources/(PatreonConfig) - Atur pengaturan dasar (lihat bagian Konfigurasi di bawah)
- Client ID dan Client Secret diatur nanti oleh skrip PatreonReEncryptCredentials
- Buat GameObject PatreonManager:
- Klik kanan di jendela Hierarchy
- Pilih
Create Empty - Ganti nama GameObject menjadi
PatreonManager
- Tambahkan skrip yang diperlukan ke PatreonManager:
- Pilih GameObject
PatreonManager - Add Component → skrip
PatreonManager - PENTING: tetapkan asset PatreonConfig ke kolom "Patreon Config"
- Add Component → skrip
PatreonCallbackManager(berjalan di semua platform, membutuhkan komponen di bawah) - Add Component → skrip
PatreonEmbeddedServer(hanya platform desktop) - Add Component → skrip
PatreonDeepLinkHandler(hanya platform mobile) - Add Component → skrip
PatreonWebGLHandler(hanya platform WebGL)
Semua skrip kompatibel dan bisa dipakai bersama.
- Pilih GameObject
-
Pengaturan per platform:
📱 Platform mobile (Android/iOS):
PatreonDeepLinkHandlerakan dipakai secara otomatis- Pengaturan Android: tambahkan ke
AndroidManifest.xmlAnda:<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> - Pengaturan iOS: tambahkan ke
Info.plistAnda:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>Patreon OAuth</string> <key>CFBundleURLSchemes</key> <array> <string>PatreonAuthenticatorForUnity.oauth</string> </array> </dict> </array>
🌐 Platform WebGL:
PatreonWebGLHandlerakan dipakai secara otomatis- Memakai middleware untuk callback OAuth (tidak perlu pengaturan tambahan)
🖥️ Platform desktop (Windows/Mac/Linux):
PatreonEmbeddedServerakan dipakai secara otomatis- Membuat server HTTP lokal di
localhost:3000
- Tentang middleware:
- Semua platform memakai middleware untuk callback OAuth
- Middleware menangani alur OAuth dan mengalihkan kembali ke aplikasi Anda
- Skema URI kustom: diatur di PatreonConfig (default:
PatreonAuthenticatorForUnity.oauth) - Opsi middleware gratis: Anda bisa membuat middleware sendiri di GitHub Pages
- Salin kode middleware dari
Assets/StreamingAssets/patreon-callback.html - Hosting di GitHub Pages sebagai middleware gratis
- Perbarui redirect URI di PatreonConfig agar mengarah ke middleware Anda
- Skema URI kustom: atur middleware ke skema URI Anda dari PatreonConfig
- Periksa pengaturan Anda:
- GameObject PatreonManager harus memiliki semua skrip yang diperlukan
- PatreonConfig harus ditetapkan di komponen PatreonManager
- Tidak boleh ada error kompilasi di Console
Instalasi selesai
Setelah impor dari Unity Asset Store, folder 'PatreonAuthenticatorForUnity' akan muncul di direktori Assets/Plugins.
Fitur keamanan
Sistem enkripsi tingkat lanjut
Plugin ini dilengkapi sistem keamanan lengkap untuk melindungi kredensial Patreon Anda:
Enkripsi AES-256
- Client Secret dienkripsi dengan AES-256 memakai kunci khusus perangkat
- Derivasi kunci PBKDF2 dengan 10,000 iterasi untuk keamanan maksimal
- Enkripsi khusus perangkat — kunci unik untuk tiap perangkat/aplikasi
- Pembuatan IV otomatis untuk setiap operasi enkripsi
Obfuskasi XOR
- Client ID diobfuskasi dengan enkripsi XOR
- Encoding Base64 untuk penyimpanan aman
- Perlindungan ringan yang cocok untuk identifier publik
Penyimpanan aman
- Penyimpanan PlayerPrefs terenkripsi untuk data sensitif
- Pembersihan otomatis data sensitif dari memori
- Metode penghapusan aman untuk data tersimpan
Validasi keamanan
- Pengujian keamanan bawaan dengan komponen
PatreonSecurityTest - Validasi otomatis operasi enkripsi/dekripsi
- Pengujian performa untuk operasi keamanan
- Validasi keamanan memori
Tingkat keamanan
| Level | Client ID | Client Secret | Penggunaan |
|---|---|---|---|
| Maksimal | Diobfuskasi | Dienkripsi | Produksi |
| Tinggi | Teks biasa | Dienkripsi | Pengembangan |
| Sedang | Diobfuskasi | Teks biasa | Pengujian |
| Tidak ada | Teks biasa | Teks biasa | TIDAK DISARANKAN |
Praktik keamanan terbaik
- Selalu aktifkan enkripsi untuk Client Secret di produksi
- Gunakan obfuskasi untuk Client ID bila memungkinkan
- Jangan pernah commit PatreonConfig.asset ke version control
- Uji sistem keamanan sebelum build produksi
- Gunakan penyimpanan aman untuk semua data sensitif
- Hapus data sensitif dari memori saat tidak diperlukan lagi
KRITIS: Pengaturan kredensial yang aman
INI SANGAT PENTING UNTUK KEAMANAN!
Kredensial Patreon Anda (Client ID dan Client Secret) sangat sensitif dan harus dienkripsi sebelum dipakai. JANGAN PERNAH menyimpannya sebagai teks biasa!
Mengapa ini penting
- Teks biasa = risiko keamanan: jika kredensial disimpan sebagai teks biasa, siapa pun yang punya akses ke build Anda bisa mencurinya
- Dampak finansial: kredensial curian bisa dipakai untuk mengakses akun Patreon Anda dan berpotensi menimbulkan kerugian finansial
- Dampak profesional: kebocoran keamanan bisa merusak reputasi dan kepercayaan pengguna
- Implikasi hukum: langkah keamanan yang kurang memadai bisa menimbulkan masalah hukum
Cara mengatur kredensial dengan aman
Ikuti langkah-langkah ini untuk mengenkripsi kredensial Patreon Anda:
Langkah 1: Buat GameObject untuk enkripsi ulang
- Buat GameObject kosong baru di scene Anda
- Ganti namanya menjadi sesuatu seperti
"PatreonEncryptCredentials"(nanti akan dihapus) - Tambahkan skrip
PatreonEncryptCredentialske GameObject
Langkah 2: Masukkan kredensial asli Anda
- Pilih GameObject di Hierarchy
- Di Inspector Anda akan melihat skrip enkripsi ulang dengan instruksi yang jelas
- Isi kredensial asli Anda di kolom yang disediakan:
Real Client Id: Client ID Patreon AndaReal Client Secret: Client Secret Patreon Anda
Langkah 3: Tetapkan PatreonConfig (opsional tapi disarankan)
- Seret asset PatreonConfig Anda ke kolom
PatreonConfig Asset - Jika Anda menetapkan PatreonConfig: nilai diatur otomatis setelah enkripsi
- Jika Anda tidak menetapkan PatreonConfig: Anda perlu menyalin nilai terenkripsi secara manual
Langkah 4: Enkripsi ulang kredensial Anda
- Klik kanan pada skrip di Inspector
- Pilih “Re-Encrypt All Credentials” dari menu konteks
- Tunggu prosesnya selesai - Anda akan melihat pesan sukses di Console
Langkah 5: Periksa dan bersihkan
- Periksa Console untuk pesan sukses
- Jika PatreonConfig ditetapkan: nilai diatur otomatis
- Jika PatreonConfig TIDAK ditetapkan: salin nilai terenkripsi ke PatreonConfig secara manual
- Hapus GameObject - tidak diperlukan lagi di scene
Konfigurasi
Pengaturan Patreon
Sebelum mengonfigurasi plugin di Unity, Anda perlu menyiapkan aplikasi Patreon Anda:
- Jadilah kreator Patreon:
- Anda harus menjadi kreator Patreon untuk mendaftarkan klien OAuth
- Buka Patreon Developer Console
- Buat klien OAuth:
- Klik “Create Client” atau “Register New Client”
- Isi detail aplikasi Anda
- PENTING: Atur redirect URI menjadi:
http://localhost:3000/patreon-callback - Ini harus sama persis dengan redirect URI di PatreonConfig Anda
- Dapatkan kredensial Anda:
- Client ID: salin dari pengaturan klien OAuth Anda
- Client Secret: salin dari pengaturan klien OAuth Anda (rahasiakan!)
- Creator ID: nama pengguna Patreon Anda (mis. jika Patreon Anda
patreon.com/DryreL, Creator ID AndaDryreL)
PERINGATAN KEAMANAN:
- JANGAN PERNAH membagikan Client ID dan Client Secret Anda kepada siapa pun
- JANGAN PERNAH meng-commit nilai ini ke version control
- JANGAN PERNAH memposting di forum publik atau channel Discord
- Kredensial ini memberi akses penuh ke akun Patreon Anda
Pengaturan Unity
Setelah membuat asset PatreonConfig (lihat Pengaturan scene di atas), konfigurasikan pengaturan API Patreon Anda:
- Redirect URI:
http://localhost:3000/patreon-callback(harus sama dengan pengaturan konsol Patreon) - Creator ID: nama pengguna Patreon Anda (mis.
DryreLuntukpatreon.com/DryreL) - Authentication Timeout: berapa lama menunggu autentikasi pengguna (default: 120 detik)
KRITIS: Redirect URI di PatreonConfig harus sama persis dengan yang ada di pengaturan Patreon Developer Console Anda!
PENTING: Jangan pernah meng-commit PatreonConfig ke version control!
- Tambahkan
Assets/Resources/PatreonConfig.assetke file.gitignore - File ini berisi kredensial API yang sensitif
Client ID dan Client Secret akan diatur otomatis saat Anda memakai skrip PatreonEncryptCredentials!
🌐 Panduan pengaturan middleware
Penggunaan skema URI dinamis
Plugin ini kini memakai sistem middleware yang memungkinkan semua platform memakai satu redirect URI.
1. Pembuatan URL OAuth:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME
Contoh:
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. Pengaturan aplikasi Patreon:
- Redirect URI:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME - Client ID: sama seperti sebelumnya
- Client Secret: sama seperti sebelumnya
3. Pengaturan platform:
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. Pengaturan PatreonConfig:
Konfigurasikan skema URI kustom Anda di PatreonConfig:
- Custom URI Scheme: atur ke skema yang Anda inginkan (mis.
mygame.oauth) - Redirect URI: perbarui agar sesuai dengan URL middleware Anda
- Semua perubahan: dilakukan lewat antarmuka PatreonConfig
5. URL uji:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME&code=test123&state=test456
✅ Keuntungan:
- Satu middleware untuk semua game
- Skema dinamis berbeda untuk setiap game
- Pengaturan mudah, cukup ganti skemanya
- Deteksi platform otomatis
🔧 Penggunaan:
- Pilih skema:
mygame.oauth - Pengaturan aplikasi Patreon:
https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth - Salin file platform dan ganti skemanya
- Atur
customUriSchemedi Unity - Uji! 🎯
👑 Pengaturan Creator API (opsional)
Untuk fitur lanjutan seperti data kampanye, daftar anggota, dan informasi tier:
Langkah 1: Dapatkan Creator's Access Token
- Buka Patreon Developer Console
- Buat “Creator’s Access Token” (bukan OAuth Client)
- Pilih scope:
campaigns,campaigns.members,campaigns.tiers - Salin Access Token dan Refresh Token Anda
Langkah 2: Aktifkan Creator API
- Di skrip
PatreonEncryptCredentials:- ✅ Centang “Enable Creator API”
- Masukkan Creator Access Token Anda
- Masukkan Creator Refresh Token Anda
- Klik “Encrypt All Credentials”
- Nilai akan diatur otomatis ke PatreonConfig
Alternatif: konfigurasi manual
Anda juga bisa mengatur token Creator API langsung di PatreonConfig:
- Creator Access Token: atur di PatreonConfig untuk akses data kampanye/anggota
- Creator Refresh Token: atur di PatreonConfig untuk pembaruan token
- Enable Creator API: aktifkan di PatreonConfig untuk fitur lanjutan
Catatan: pastikan enkripsinya sudah dilakukan!
Langkah 3: Gunakan 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());
Langkah 4: Tampilkan di UI
Gunakan PatreonUserInfoDisplay dengan kolom baru:
- Nama kampanye, Ringkasan kampanye, Jumlah patron
- Jumlah tier, Deskripsi tier, Batas tier
- Anggota sejak, Status dukungan, Tagihan berikutnya
Referensi: Patreon API Guide
Autentikasi
Alur login
Proses autentikasi mengikuti standar OAuth 2.0:
- Inisialisasi authenticator
- Mulai proses login
- Tangani callback
- Validasi token
Berikut contoh dasarnya:
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
}
}
Manajemen token
Plugin otomatis menangani refresh dan penyimpanan token:
// 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;
}
Referensi API
Kelas
PatreonManager
Kelas singleton utama untuk menangani autentikasi Patreon.
Properti:
bool IsUserAuthenticated()- Mengembalikan true jika pengguna sudah loginPatreonUser GetCurrentUser()- Mengambil pengguna terautentikasi saat inistring GetValidAccessToken()- Mengambil access token yang valid (di-refresh bila perlu)
Metode:
void StartPatreonAuth()- Memulai alur OAuth Patreonvoid Logout()- Mengeluarkan pengguna saat ini dan menghapus tokenvoid SetAccessToken(string token)- Mengatur access tokenvoid ExchangeCodeForToken(string code, string state)- Menukar kode otorisasi dengan access token
PatreonUser
Mewakili pengguna Patreon beserta informasi langganannya.
Properti:
string Id- ID Patreon penggunastring FullName- Nama lengkap penggunastring Email- Alamat email penggunastring FirstName- Nama depan penggunastring LastName- Nama belakang penggunastring Vanity- URL vanity penggunastring ImageUrl- URL foto profil penggunabool IsPatron- Apakah pengguna seorang patronfloat PledgeAmount- Jumlah dukungan dalam dolarbool HasPledge- Apakah pengguna punya dukungan aktifstring DisplayName- Nama tampilan penggunastring PatronStatus- Status patron penggunastring TierTitle- Judul tier langganan penggunaint CentsPledged- Jumlah dukungan dalam sen
Metode:
void LoadProfileAvatar(Action<Sprite> onComplete)- Memuat avatar profil pengguna sebagai Sprite
Metode
StartLogin()
Memulai alur OAuth Patreon.
public void StartLogin()
Mengembalikan: void
Contoh:
authenticator.StartLogin();
Logout()
Mengeluarkan pengguna saat ini dan menghapus token yang tersimpan.
public void Logout()
Mengembalikan: void
Contoh:
authenticator.Logout();
Event
OnLoginSuccess
Dipicu saat pengguna berhasil login.
public event Action<PatreonUser> OnLoginSuccess;
Parameter:
PatreonUser user- Pengguna yang terautentikasi
OnLoginFailed
Dipicu saat login gagal.
public event Action<string> OnLoginFailed;
Parameter:
string error- Pesan error yang menjelaskan kegagalan
Contoh
Autentikasi dasar
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
}
}
Manajemen konten premium
public class PremiumContentManager : MonoBehaviour
{
[SerializeField] private PatreonAuthenticator authenticator;
[SerializeField] private GameObject premiumContent;
void Start()
{
CheckSubscriptionStatus();
}
private void CheckSubscriptionStatus()
{
if (authenticator.IsAuthenticated)
{
PatreonUser user = authenticator.CurrentUser;
if (user.IsSubscriber)
{
EnablePremiumContent(user.SubscriptionTier);
}
else
{
DisablePremiumContent();
}
}
else
{
DisablePremiumContent();
}
}
private void EnablePremiumContent(string tier)
{
premiumContent.SetActive(true);
// Configure content based on tier
switch (tier)
{
case "Bronze":
// Bronze tier features
break;
case "Silver":
// Silver tier features
break;
case "Gold":
// Gold tier features
break;
}
}
private void DisablePremiumContent()
{
premiumContent.SetActive(false);
}
}
Pemecahan masalah
Masalah umum
Error “Invalid Client ID”
Masalah: Anda mendapat error “Invalid Client ID” saat mencoba autentikasi.
Solusi:
- Periksa Client ID Anda di Patreon Developer Portal
- Pastikan Client ID dimasukkan dengan benar di Project Settings Unity
- Pastikan aplikasi Anda dikonfigurasi dengan benar di Patreon
Masalah refresh token
Masalah: token tidak di-refresh secara otomatis.
Solusi:
- Periksa koneksi internet Anda
- Pastikan Client Secret Anda benar
- Pastikan redirect URI Anda sama persis
Masalah build Unity
Masalah: plugin berjalan di editor tapi tidak di build.
Solusi:
- Pastikan semua dependensi yang diperlukan ikut dalam build
- Periksa bahwa konfigurasi Patreon Anda sudah benar untuk produksi
- Pastikan redirect URI Anda bisa diakses dari aplikasi yang dirilis
Mode debug
Aktifkan mode debug untuk log yang lebih rinci:
PatreonConfig config = new PatreonConfig
{
// ... other settings
DebugMode = true
};
Dukungan platform
| Platform | Status | Catatan |
|---|---|---|
| WebGL | ✅ Dukungan penuh | Autentikasi berbasis browser dengan server tertanam |
| Android | ✅ Dukungan penuh | Integrasi native dengan browser, middleware (URI kustom) |
| iOS | ✅ Dukungan penuh | Integrasi native dengan browser, middleware (URI kustom) |
| Windows | ✅ Dukungan penuh | Build 32-bit & 64-bit |
| Mac | ✅ Dukungan penuh | Dukungan universal binary |
| Linux | ✅ Dukungan penuh | Semua distribusi utama |
Fitur platform mobile
- Application.identifier: dukungan penuh di iOS/Android
- Device ID: kunci enkripsi khusus perangkat yang aman
- Browser sistem: alur OAuth native dengan kembali ke aplikasi
- StreamingAssets: penanganan file khusus platform
- Skema URL: penanganan callback kustom
🔗 Penanganan callback khusus platform
Semua platform (sistem middleware terpadu)
- Satu redirect URI:
https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME - Skema dinamis: setiap game bisa memakai skema URI sendiri
- Deteksi platform: deteksi dan routing platform otomatis
- Dukungan universal: berjalan di desktop, mobile, dan WebGL
Platform mobile (Android, iOS, Windows, UWP)
- Deep linking: skema URI kustom (
YOUR_APP_SCHEME://patreon-callback) - Redirect middleware:
https://yourdomain.com/api/oauth/redirect→ deep link - Browser sistem: alur OAuth native dengan kembali ke aplikasi secara otomatis
- Validasi state: perlindungan CSRF dengan parameter state
Platform WebGL
- Alur middleware: memakai
https://yourdomain.com/api/oauth/redirect - Callback JavaScript: komunikasi
postMessagedengan jendela induk - Tanpa server: memakai layanan middleware yang di-hosting
- Dukungan CORS: penanganan request lintas origin
Platform desktop (Windows, Mac, Linux)
- Redirect middleware:
https://yourdomain.com/api/oauth/redirect→localhost:3000 - Server tertanam: HTTP Listener di
localhost:3000 - Alur loopback: browser → middleware → localhost → callback aplikasi
- Tanpa dependensi: implementasi murni HttpListener .NET
📱 Persyaratan pengaturan mobile
Pengaturan Android
- Buat AndroidManifest.xml di
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}");
Penanganan deep link di mobile
// 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();
Penanganan middleware WebGL
// WebGL middleware callback
PatreonWebGLHandler webGLHandler = GetComponent<PatreonWebGLHandler>();
webGLHandler.StartPatreonOAuthFlow(clientId, state);
// Test WebGL callback
webGLHandler.TestWebGLCallback();
Informasi platform
// Show current platform and callback method
PatreonCallbackManager callbackManager = GetComponent<PatreonCallbackManager>();
callbackManager.ShowPlatformInfo();
// Output:
// 📱 Current Platform: AndroidPlayer
// 📱 Redirect URI: myapp.oauth://patreon-callback
// 🔗 Using deep link callback method
🧪 Pengujian
Perintah uji
Test Platform OAuth Flow: menguji alur OAuth khusus platformTest Deep Link Callback: menguji penanganan deep link di mobileTest WebGL Callback: menguji penanganan middleware WebGLShow Platform Info: menampilkan informasi platform saat ini
Skrip uji
PatreonCallbackManager: pengujian khusus platformPatreonDeepLinkHandler: pengujian deep link mobilePatreonWebGLHandler: pengujian middleware WebGLPatreonMobileTest: pengujian kompatibilitas mobile
Pengujian keamanan
Plugin ini menyertakan sistem pengujian keamanan yang lengkap:
1. Tambahkan komponen Security Test
// Add PatreonSecurityTest component to any GameObject
// Right-click on GameObject → Add Component → PatreonSecurityTest
2. Jalankan pengujian keamanan
// In Inspector, click "Run All Security Tests" or use code:
var securityTest = GetComponent<PatreonSecurityTest>();
securityTest.RunAllTests();
3. Uji komponen satu per satu
// Test encryption only
securityTest.TestEncryption();
// Test obfuscation only
securityTest.TestObfuscation();
// Test secure storage only
securityTest.TestSecureStorage();
// Performance test
securityTest.PerformanceTest();
4. Validasi keamanan
// Validate entire security system
bool isValid = PatreonSecurity.PatreonSecurity.ValidateSecuritySystem();
Debug.Log($"Security system valid: {isValid}");
Dukungan
Dapatkan bantuan
Jika Anda mengalami masalah atau punya pertanyaan:
- Baca dokumentasi - Sebagian besar masalah umum dibahas di sini
- Gabung komunitas Discord kami - Dapatkan bantuan dari developer lain dan tim kami
- Hubungi dukungan - Untuk masalah teknis, kirimkan kepada kami:
- Versi Unity
- Versi plugin
- Langkah untuk mereproduksi
- Pesan error
- File log
Komunitas
Gabung komunitas kami untuk dukungan dan pembaruan:
- Email: [email protected]
- Discord: Gabung komunitas kami
- YouTube: DryreL Hub
- YouTube #2: DryreL Software
Pembaruan
Ikuti fitur terbaru dan perbaikan bug:
- Unity Asset Store: Unduh dari Marketplace (segera hadir)
- Komunitas Discord: Gabung Discord DryreL Hub untuk dukungan dan pembaruan
PENAFIAN & TANGGUNG JAWAB
PEMBERITAHUAN KEAMANAN PENTING
Plugin ini menyediakan enkripsi AES-256 dan obfuskasi untuk membantu melindungi kredensial API Patreon Anda. Namun, ANDA BERTANGGUNG JAWAB PENUH atas keamanan kredensial Anda dan segala akibat yang timbul jika kredensial tersebut terekspos.
Fitur keamanan yang disediakan
- Enkripsi AES-256: untuk melindungi Client Secret
- Obfuskasi XOR: untuk mengobfuskasi Client ID
- Derivasi kunci berlapis: kunci enkripsi khusus platform
- Perlindungan anti-tampering: validasi integritas dasar
- Log audit keamanan: alat pemantauan dan debugging
Tanggung jawab Anda
- Penyimpanan aman: jangan pernah meng-commit
PatreonConfigke version control - Penggunaan yang benar: ikuti semua panduan keamanan di dokumentasi ini
- Pembaruan rutin: jaga kredensial tetap terbaru dan rotasi secara berkala
- Keamanan lingkungan: pastikan lingkungan development dan produksi Anda aman
- Kontrol akses: batasi akses ke file kredensial dan artefak build
Penafian tanggung jawab
DRYREL HUB TIDAK BERTANGGUNG JAWAB atas kerugian langsung, tidak langsung, insidental, khusus, konsekuensial, atau punitif apa pun, termasuk namun tidak terbatas pada:
- Kerugian finansial: kehilangan pendapatan, gangguan bisnis, atau kerugian uang
- Pelanggaran keamanan: akses tanpa izin ke akun atau data Patreon Anda
- Penyalahgunaan API: penyalahgunaan kredensial Anda oleh pihak ketiga
- Paparan data: kebocoran informasi sensitif
- Gangguan layanan: downtime atau layanan tidak tersedia
- Konsekuensi hukum: masalah hukum apa pun akibat kredensial terekspos
GUNAKAN PLUGIN INI ATAS RISIKO ANDA SENDIRI. TIDAK ADA JAMINAN YANG DIBERIKAN.
🔧 API V2: masalah dan solusi per jenis akun
⚠️ Masalah yang diketahui dengan berbagai jenis akun
Saat menguji dengan berbagai jenis akun Patreon (kreator vs pengguna biasa), Anda mungkin menemui masalah berikut:
1. Email tidak didapat
- Masalah: kolom email kosong untuk pengguna biasa
- Penyebab: batasan scope OAuth
- Solusi: scope OAuth yang diperluas kini mencakup
identity[email]
2. Foto profil tidak didapat
- Masalah: URL foto profil kosong
- Penyebab: perbedaan pemetaan kolom API
- Solusi: otomatis memakai
thumb_urljikaimage_urlkosong
3. Informasi tier/status salah
- Masalah: pengguna biasa tampil sebagai tier “creator”
- Penyebab: respons API yang tidak konsisten antar jenis akun
- Solusi: logging dan validasi yang ditingkatkan (lihat peringatan di console)
4. Tautan sosial tidak didapat
- Masalah: tautan YouTube, Twitter, Facebook kosong
- Penyebab: akses kolom API terbatas untuk pengguna biasa
- Solusi: permintaan kolom yang diperluas di panggilan API
🔍 Informasi debug
Plugin kini menyertakan log debug yang lengkap. Periksa Console Unity untuk:
🔧 === USER DATA DEBUG ===- Analisis lengkap data pengguna🔧 Email not available- Peringatan batasan scope🔧 Normal user has tier_title- Ketidakkonsistenan jenis akun
📋 Daftar periksa pengujian
Saat menguji dengan berbagai jenis akun:
- Uji akun kreator:
- ✅ Email harus didapat
- ✅ Foto profil harus didapat
- ✅ Informasi tier harus akurat
- ✅ Tautan sosial mungkin tersedia
- Uji akun pengguna biasa:
- ⚠️ Email mungkin tidak tersedia (tergantung scope)
- ✅ Foto profil harus didapat (dengan cadangan)
- ⚠️ Informasi tier mungkin salah (dicatat sebagai peringatan)
- ⚠️ Tautan sosial mungkin tidak tersedia
🛠️ Scope OAuth yang diperluas
Plugin kini meminta scope yang diperluas:
identity identity[email] identity.memberships campaigns
Ini memberi akses yang lebih baik ke data pengguna di berbagai jenis akun.
🔧 Validasi & perbaikan data API
Catatan penting: plugin menyertakan validasi data di sisi klien dan perbaikan untuk ketidakkonsistenan Patreon API V2 yang diketahui. Ini diperlukan karena:
- Masalah data API: Patreon API V2 kadang mengembalikan data yang salah untuk pengguna biasa (mis. menampilkan tier “Creator” untuk pengguna biasa)
- Data bertentangan: API bisa mengembalikan nilai yang saling bertentangan (mis.
patron_status: "not_patron"tetapiis_patron: true) - Jenis akun tercampur: data pengguna dan kreator kadang tercampur dalam respons API
- Masalah status pengikut: kolom
is_followertidak andal dan bisa mengembalikanfalsemeski pengguna mengikuti
Yang dilakukan plugin:
- ✅ Memvalidasi semua data pengguna dari API
- ✅ Memperbaiki ketidakkonsistenan data yang diketahui secara otomatis
- ✅ Mencatat masalah API untuk debugging
- ✅ Memberi nilai cadangan bila perlu
- ✅ Memperingatkan kolom yang tidak andal seperti
is_follower
Log console yang perlu diperhatikan:
🔧 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
Batasan API yang diketahui:
is_follower: kolom ini tidak andal di Patreon API V2 dan bisa mengembalikanfalsemeski pengguna mengikuti kreator- Deteksi pengikut: untuk mendeteksi pengikut secara akurat diperlukan panggilan API tambahan ke endpoint campaigns/pledges
- Referensi: lihat Patreon API Guide untuk metode deteksi pengikut yang benar
Pendekatan ini memastikan data pengguna yang andal meski API tidak konsisten.
Terima kasih!
Terima kasih telah memakai Patreon Authenticator for Unity. Semoga plugin ini membantu Anda menciptakan pengalaman luar biasa bagi pendukung Patreon Anda!

