Kembali ke Unity

DryreL Software Dokumentasi

Patreon Authenticator for Unity

Panduan lengkap mengintegrasikan Patreon Authenticator for Unity ke proyek Unity Anda

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!

  1. Buka Package Manager di Unity (Window → Package Manager)
  2. Klik tombol "+"
  3. Pilih "Install package by name…"
  4. Enter com.unity.nuget.newtonsoft-json
  5. Klik "Add" untuk menginstal paket

Tanpa paket ini skrip tidak akan bisa dikompilasi!

2. Salin file plugin

  1. Salin folder Assets/Plugins/PatreonAuthenticatorForUnity/ ke proyek Unity Anda
  2. Salin file Assets/StreamingAssets/patreon-callback.html ke folder StreamingAssets

3. Pengaturan scene

  1. 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
  2. Buat GameObject PatreonManager:
    • Klik kanan di jendela Hierarchy
    • Pilih Create Empty
    • Ganti nama GameObject menjadi PatreonManager
  3. 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.

  4. Pengaturan per platform:

    📱 Platform mobile (Android/iOS):

    • PatreonDeepLinkHandler akan dipakai secara otomatis
    • Pengaturan Android: tambahkan ke AndroidManifest.xml Anda:
      <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.plist Anda:
      <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:

    • PatreonWebGLHandler akan dipakai secara otomatis
    • Memakai middleware untuk callback OAuth (tidak perlu pengaturan tambahan)

    🖥️ Platform desktop (Windows/Mac/Linux):

    • PatreonEmbeddedServer akan dipakai secara otomatis
    • Membuat server HTTP lokal di localhost:3000
  5. 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
  6. 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

  1. Selalu aktifkan enkripsi untuk Client Secret di produksi
  2. Gunakan obfuskasi untuk Client ID bila memungkinkan
  3. Jangan pernah commit PatreonConfig.asset ke version control
  4. Uji sistem keamanan sebelum build produksi
  5. Gunakan penyimpanan aman untuk semua data sensitif
  6. 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

  1. Buat GameObject kosong baru di scene Anda
  2. Ganti namanya menjadi sesuatu seperti "PatreonEncryptCredentials" (nanti akan dihapus)
  3. Tambahkan skrip PatreonEncryptCredentials ke GameObject

Langkah 2: Masukkan kredensial asli Anda

  1. Pilih GameObject di Hierarchy
  2. Di Inspector Anda akan melihat skrip enkripsi ulang dengan instruksi yang jelas
  3. Isi kredensial asli Anda di kolom yang disediakan:
    • Real Client Id: Client ID Patreon Anda
    • Real Client Secret: Client Secret Patreon Anda
  1. Seret asset PatreonConfig Anda ke kolom PatreonConfig Asset
  2. Jika Anda menetapkan PatreonConfig: nilai diatur otomatis setelah enkripsi
  3. Jika Anda tidak menetapkan PatreonConfig: Anda perlu menyalin nilai terenkripsi secara manual

Langkah 4: Enkripsi ulang kredensial Anda

  1. Klik kanan pada skrip di Inspector
  2. Pilih “Re-Encrypt All Credentials” dari menu konteks
  3. Tunggu prosesnya selesai - Anda akan melihat pesan sukses di Console

Langkah 5: Periksa dan bersihkan

  1. Periksa Console untuk pesan sukses
  2. Jika PatreonConfig ditetapkan: nilai diatur otomatis
  3. Jika PatreonConfig TIDAK ditetapkan: salin nilai terenkripsi ke PatreonConfig secara manual
  4. Hapus GameObject - tidak diperlukan lagi di scene

Konfigurasi

Pengaturan Patreon

Sebelum mengonfigurasi plugin di Unity, Anda perlu menyiapkan aplikasi Patreon Anda:

  1. Jadilah kreator Patreon:
  2. 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
  3. 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 Anda DryreL)

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. DryreL untuk patreon.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.asset ke 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.oauth
  • https://yourdomain.com/api/oauth/redirect?scheme=awesomeapp.auth
  • https://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:

  1. Pilih skema: mygame.oauth
  2. Pengaturan aplikasi Patreon: https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth
  3. Salin file platform dan ganti skemanya
  4. Atur customUriScheme di Unity
  5. Uji! 🎯

👑 Pengaturan Creator API (opsional)

Untuk fitur lanjutan seperti data kampanye, daftar anggota, dan informasi tier:

Langkah 1: Dapatkan Creator's Access Token

  1. Buka Patreon Developer Console
  2. Buat “Creator’s Access Token” (bukan OAuth Client)
  3. Pilih scope: campaigns, campaigns.members, campaigns.tiers
  4. Salin Access Token dan Refresh Token Anda

Langkah 2: Aktifkan Creator API

  1. Di skrip PatreonEncryptCredentials:
    • ✅ Centang “Enable Creator API”
    • Masukkan Creator Access Token Anda
    • Masukkan Creator Refresh Token Anda
  2. Klik “Encrypt All Credentials”
  3. 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:

  1. Inisialisasi authenticator
  2. Mulai proses login
  3. Tangani callback
  4. 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 login
  • PatreonUser GetCurrentUser() - Mengambil pengguna terautentikasi saat ini
  • string GetValidAccessToken() - Mengambil access token yang valid (di-refresh bila perlu)

Metode:

  • void StartPatreonAuth() - Memulai alur OAuth Patreon
  • void Logout() - Mengeluarkan pengguna saat ini dan menghapus token
  • void SetAccessToken(string token) - Mengatur access token
  • void ExchangeCodeForToken(string code, string state) - Menukar kode otorisasi dengan access token

PatreonUser

Mewakili pengguna Patreon beserta informasi langganannya.

Properti:

  • string Id - ID Patreon pengguna
  • string FullName - Nama lengkap pengguna
  • string Email - Alamat email pengguna
  • string FirstName - Nama depan pengguna
  • string LastName - Nama belakang pengguna
  • string Vanity - URL vanity pengguna
  • string ImageUrl - URL foto profil pengguna
  • bool IsPatron - Apakah pengguna seorang patron
  • float PledgeAmount - Jumlah dukungan dalam dolar
  • bool HasPledge - Apakah pengguna punya dukungan aktif
  • string DisplayName - Nama tampilan pengguna
  • string PatronStatus - Status patron pengguna
  • string TierTitle - Judul tier langganan pengguna
  • int 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:

  1. Periksa Client ID Anda di Patreon Developer Portal
  2. Pastikan Client ID dimasukkan dengan benar di Project Settings Unity
  3. Pastikan aplikasi Anda dikonfigurasi dengan benar di Patreon

Masalah refresh token

Masalah: token tidak di-refresh secara otomatis.

Solusi:

  1. Periksa koneksi internet Anda
  2. Pastikan Client Secret Anda benar
  3. Pastikan redirect URI Anda sama persis

Masalah build Unity

Masalah: plugin berjalan di editor tapi tidak di build.

Solusi:

  1. Pastikan semua dependensi yang diperlukan ikut dalam build
  2. Periksa bahwa konfigurasi Patreon Anda sudah benar untuk produksi
  3. 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 postMessage dengan 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

  1. 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}");
// 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 platform
  • Test Deep Link Callback: menguji penanganan deep link di mobile
  • Test WebGL Callback: menguji penanganan middleware WebGL
  • Show Platform Info: menampilkan informasi platform saat ini

Skrip uji

  • PatreonCallbackManager: pengujian khusus platform
  • PatreonDeepLinkHandler: pengujian deep link mobile
  • PatreonWebGLHandler: pengujian middleware WebGL
  • PatreonMobileTest: 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:

  1. Baca dokumentasi - Sebagian besar masalah umum dibahas di sini
  2. Gabung komunitas Discord kami - Dapatkan bantuan dari developer lain dan tim kami
  3. 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:

Pembaruan

Ikuti fitur terbaru dan perbaikan bug:

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 PatreonConfig ke 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_url jika image_url kosong

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)
  • 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:

  1. Uji akun kreator:
    • ✅ Email harus didapat
    • ✅ Foto profil harus didapat
    • ✅ Informasi tier harus akurat
    • ✅ Tautan sosial mungkin tersedia
  2. 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:

  1. Masalah data API: Patreon API V2 kadang mengembalikan data yang salah untuk pengguna biasa (mis. menampilkan tier “Creator” untuk pengguna biasa)
  2. Data bertentangan: API bisa mengembalikan nilai yang saling bertentangan (mis. patron_status: "not_patron" tetapi is_patron: true)
  3. Jenis akun tercampur: data pengguna dan kreator kadang tercampur dalam respons API
  4. Masalah status pengikut: kolom is_follower tidak andal dan bisa mengembalikan false meski 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 mengembalikan false meski 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!