العودة إلى Unity

DryreL Software التوثيق

Patreon Authenticator for Unity

دليل كامل لدمج Patreon Authenticator for Unity في مشاريع Unity الخاصة بك

مرحبًا بك في Patreon Authenticator for Unity

حزمة Unity متكاملة لدمج مصادقة Patreon OAuth 2.0 مع خادم HTTP مدمج وميزات أمان متقدمة وتوافق عبر المنصات.

البدء

Patreon Authenticator for Unity إضافة قوية تدمج ألعاب Unity بسلاسة مع نظام مصادقة Patreon. معها يمكنك:

  • أمان متقدم: تشفير AES-256 وتمويه وتخزين آمن
  • خادم HTTP مدمج: مستمع HTTP مدمج لاستدعاءات OAuth
  • دعم الـ middleware: middleware مخصص لاستدعاءات OAuth على كل المنصات
  • متعدد المنصات: يعمل على WebGL وAndroid وiOS وWindows وMac وLinux
  • إدارة آمنة للرموز: تشفير مرتبط بالجهاز مع اشتقاق مفتاح PBKDF2
  • عمليات آمنة للخيوط: معالجة سليمة لطلبات HTTP
  • واجهة استدعاء جميلة: صفحات HTML قابلة للتخصيص للنجاح والخطأ
  • التحقق من state: حماية من CSRF بالتحقق من معامل state
  • تحديث الرمز: تحديث تلقائي لرمز الوصول
  • جلب ملف المستخدم: بيانات المستخدم ومعلومات العضوية
  • اختبارات الأمان: أدوات مدمجة للتحقق من الأمان واختباره
  • دعم GIF: صور رمزية متحركة من Patreon مع دعم حركة GIF

المتطلبات

قبل البدء تأكد من توفر ما يلي:

  • Unity 2021.3 LTS أو أحدث
  • .NET Standard 2.1 أو أحدث
  • حساب مبدع على Patreon
  • معرفة أساسية بـ Unity وC#
  • اتصال بالإنترنت لطلبات API الخاصة بـ Patreon

ملاحظة مهمة

تتطلب هذه الإضافة Unity 2021.3 LTS أو أحدث. الإصدارات الأقدم غير مدعومة.

التثبيت

1. ثبّت حزمة Newtonsoft.Json (إلزامي)

مهم: هذه الخطوة إلزامية قبل استخدام الإضافة!

  1. افتح Package Manager في Unity (Window → Package Manager)
  2. اضغط زر «+»
  3. اختر «Install package by name…»
  4. Enter com.unity.nuget.newtonsoft-json
  5. اضغط «Add» لتثبيت الحزمة

بدون هذه الحزمة لن تُترجَم السكربتات!

2. انسخ ملفات الإضافة

  1. انسخ المجلد Assets/Plugins/PatreonAuthenticatorForUnity/ إلى مشروع Unity الخاص بك
  2. انسخ الملف Assets/StreamingAssets/patreon-callback.html إلى مجلد StreamingAssets

3. إعداد المشهد

  1. أنشئ أصل PatreonConfig:
    • اذهب إلى مجلد Resources (أنشئه إن لم يكن موجودًا)
    • انقر بزر الفأرة الأيمن في نافذة Project
    • انتقل إلى Create → Patreon Authenticator for Unity → Create New Config
    • سيُنشأ الأصل في مجلد Assets/Resources/ ‏(PatreonConfig)
    • اضبط الإعدادات الأساسية (انظر قسم «الإعداد» أدناه)
    • يُضبط Client ID وClient Secret لاحقًا بسكربت PatreonReEncryptCredentials
  2. أنشئ GameObject باسم PatreonManager:
    • انقر بزر الفأرة الأيمن في نافذة Hierarchy
    • اختر Create Empty
    • أعد تسمية الـ GameObject إلى PatreonManager
  3. أضف السكربتات المطلوبة إلى PatreonManager:
    • اختر الـ GameObject ‏PatreonManager
    • Add Component ← سكربت PatreonManager
    • مهم: عيّن أصل PatreonConfig في حقل «Patreon Config»
    • Add Component ← سكربت PatreonCallbackManager (يعمل على كل المنصات، ويتطلب المكوّنات أدناه)
    • Add Component ← سكربت PatreonEmbeddedServer (منصات سطح المكتب فقط)
    • Add Component ← سكربت PatreonDeepLinkHandler (منصات الهاتف فقط)
    • Add Component ← سكربت PatreonWebGLHandler (منصة WebGL فقط)

    كل السكربتات متوافقة ويمكن استخدامها معًا.

  4. الإعداد حسب المنصة:

    📱 منصات الهاتف (Android/iOS):

    • سيُستخدم PatreonDeepLinkHandler تلقائيًا
    • إعداد Android: أضف إلى ملف AndroidManifest.xml:
      <activity android:name="com.unity3d.player.UnityPlayerActivity">
        <intent-filter>
          <action android:name="android.intent.action.VIEW" />
          <category android:name="android.intent.category.DEFAULT" />
          <category android:name="android.intent.category.BROWSABLE" />
          <data android:scheme="PatreonAuthenticatorForUnity.oauth" />
        </intent-filter>
      </activity>
      
    • إعداد iOS: أضف إلى ملف Info.plist:
      <key>CFBundleURLTypes</key>
      <array>
        <dict>
          <key>CFBundleURLName</key>
          <string>Patreon OAuth</string>
          <key>CFBundleURLSchemes</key>
          <array>
            <string>PatreonAuthenticatorForUnity.oauth</string>
          </array>
        </dict>
      </array>
      

    🌐 منصة WebGL:

    • سيُستخدم PatreonWebGLHandler تلقائيًا
    • تستخدم middleware لاستدعاءات OAuth (لا حاجة إلى إعداد إضافي)

    🖥️ منصات سطح المكتب (Windows/Mac/Linux):

    • سيُستخدم PatreonEmbeddedServer تلقائيًا
    • ينشئ خادم HTTP محليًا على localhost:3000
  5. عن الـ middleware:
    • كل المنصات تستخدم middleware لاستدعاءات OAuth
    • يعالج الـ middleware مسار OAuth ويعيد التوجيه إلى تطبيقك
    • مخطط URI مخصص: يُضبط في PatreonConfig (الافتراضي: PatreonAuthenticatorForUnity.oauth)
    • خيار middleware مجاني: يمكنك إنشاء middleware خاص بك على GitHub Pages
    • انسخ كود الـ middleware من Assets/StreamingAssets/patreon-callback.html
    • استضفه على GitHub Pages ليكون middleware مجانيًا
    • حدّث redirect URI في PatreonConfig ليشير إلى الـ middleware الخاص بك
    • مخطط URI مخصص: اضبط الـ middleware على مخطط URI الخاص بك من PatreonConfig
  6. تحقق من الإعداد:
    • يجب أن يحمل الـ GameObject ‏PatreonManager كل السكربتات المطلوبة
    • يجب تعيين PatreonConfig في مكوّن PatreonManager
    • يجب ألا تظهر أخطاء ترجمة في Console

اكتمل التثبيت

بعد الاستيراد من Unity Asset Store يجب أن يظهر مجلد 'PatreonAuthenticatorForUnity' داخل Assets/Plugins.

ميزات الأمان

نظام تشفير متقدم

تتضمن الإضافة نظام أمان متكاملًا لحماية بيانات اعتماد Patreon الخاصة بك:

تشفير AES-256

  • Client Secret مشفّر بـ AES-256 بمفاتيح خاصة بالجهاز
  • اشتقاق مفتاح PBKDF2 بـ 10,000 تكرار لأقصى درجات الأمان
  • تشفير خاص بالجهاز — مفاتيح فريدة لكل جهاز/تطبيق
  • توليد IV تلقائي لكل عملية تشفير

تمويه XOR

  • Client ID مموّه بتشفير XOR
  • ترميز Base64 للتخزين الآمن
  • حماية خفيفة مناسبة للمعرّفات العامة

التخزين الآمن

  • تخزين PlayerPrefs مشفّر للبيانات الحساسة
  • مسح تلقائي للبيانات الحساسة من الذاكرة
  • دوال حذف آمن للبيانات المخزّنة

التحقق من الأمان

  • اختبارات أمان مدمجة مع مكوّن PatreonSecurityTest
  • تحقق تلقائي من عمليات التشفير وفك التشفير
  • اختبارات أداء لعمليات الأمان
  • تحقق من أمان الذاكرة

مستويات الأمان

المستوى Client ID Client Secret الاستخدام
أقصى مموّه مشفّر الإنتاج
عالٍ نص عادي مشفّر التطوير
متوسط مموّه نص عادي الاختبار
لا شيء نص عادي نص عادي غير موصى به

أفضل ممارسات الأمان

  1. فعّل التشفير دائمًا لـ Client Secret في الإنتاج
  2. استخدم التمويه لـ Client ID متى أمكن
  3. لا ترفع أبدًا ملف PatreonConfig.asset إلى نظام إدارة الإصدارات
  4. اختبر نظام الأمان قبل البناء للإنتاج
  5. استخدم التخزين الآمن لأي بيانات حساسة
  6. امسح البيانات الحساسة من الذاكرة عندما لا تعود بحاجة إليها

حرج: إعداد آمن لبيانات الاعتماد

هذا مهم للغاية من أجل الأمان!

بيانات اعتماد Patreon الخاصة بك (Client ID وClient Secret) حساسة للغاية ويجب تشفيرها قبل الاستخدام. لا تخزّنها أبدًا كنص عادي!

لماذا يهم هذا

  • النص العادي = خطر أمني: إذا خُزّنت بيانات اعتمادك كنص عادي، يمكن لأي شخص يصل إلى نسختك المبنية سرقتها
  • الأثر المالي: يمكن استخدام البيانات المسروقة للوصول إلى حسابك على Patreon وقد تسبب ضررًا ماليًا
  • الأثر المهني: قد تضر الاختراقات الأمنية بسمعتك وبثقة المستخدمين
  • التبعات القانونية: قد تؤدي إجراءات الأمان غير الكافية إلى مشكلات قانونية

كيف تُعدّ بيانات اعتمادك بأمان

اتبع هذه الخطوات لتشفير بيانات اعتماد Patreon:

الخطوة 1: أنشئ GameObject لإعادة التشفير

  1. أنشئ GameObject فارغًا جديدًا في المشهد
  2. أعد تسميته باسم مثل "PatreonEncryptCredentials" (ستحذفه لاحقًا)
  3. أضف سكربت PatreonEncryptCredentials إلى الـ GameObject

الخطوة 2: أدخل بيانات اعتمادك الحقيقية

  1. اختر الـ GameObject في Hierarchy
  2. في Inspector سترى سكربت إعادة التشفير مع تعليمات واضحة
  3. أدخل بيانات اعتمادك الحقيقية في الحقول المخصصة:
    • Real Client Id: ‏Client ID الخاص بك على Patreon
    • Real Client Secret: ‏Client Secret الخاص بك على Patreon
  1. اسحب أصل PatreonConfig إلى حقل PatreonConfig Asset
  2. إذا عيّنت PatreonConfig: تُضبط القيم تلقائيًا بعد التشفير
  3. إذا لم تعيّن PatreonConfig: عليك نسخ القيم المشفّرة يدويًا

الخطوة 4: أعد تشفير بيانات اعتمادك

  1. انقر بزر الفأرة الأيمن على السكربت في Inspector
  2. اختر «Re-Encrypt All Credentials» من القائمة
  3. انتظر حتى تكتمل العملية - ستظهر رسائل النجاح في Console

الخطوة 5: تحقّق ونظّف

  1. راجع Console بحثًا عن رسائل النجاح
  2. إذا عُيّن PatreonConfig: تُضبط القيم تلقائيًا
  3. إذا لم يُعيَّن PatreonConfig: انسخ القيم المشفّرة إلى PatreonConfig يدويًا
  4. احذف الـ GameObject - لم تعد بحاجة إليه في المشهد

الإعداد

إعداد Patreon

قبل إعداد الإضافة في Unity، عليك تجهيز تطبيقك على Patreon:

  1. كن مبدعًا على Patreon:
  2. أنشئ عميل OAuth:
    • اضغط «Create Client» أو «Register New Client»
    • املأ بيانات تطبيقك
    • مهم: اضبط redirect URI على: http://localhost:3000/patreon-callback
    • يجب أن يطابق تمامًا redirect URI في PatreonConfig
  3. احصل على بيانات اعتمادك:
    • Client ID: انسخه من إعدادات عميل OAuth
    • Client Secret: انسخه من إعدادات عميل OAuth (احتفظ به سرًّا!)
    • Creator ID: اسم المستخدم على Patreon (مثلًا إذا كان Patreon الخاص بك patreon.com/DryreL فإن Creator ID هو DryreL)

تحذير أمني:

  • لا تشارك Client ID وClient Secret مع أي أحد أبدًا
  • لا ترفع هذه القيم إلى نظام إدارة الإصدارات أبدًا
  • لا تنشرها أبدًا في المنتديات العامة أو قنوات Discord
  • تمنح بيانات الاعتماد هذه وصولًا كاملًا إلى حسابك على Patreon

إعدادات Unity

بعد إنشاء أصل PatreonConfig (انظر إعداد المشهد أعلاه)، اضبط إعدادات 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:

https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME

أمثلة:

  • https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth
  • https://yourdomain.com/api/oauth/redirect?scheme=awesomeapp.auth
  • https://yourdomain.com/api/oauth/redirect?scheme=unitygame.patreon

2. إعدادات تطبيق Patreon:

  • Redirect URI: https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME
  • Client ID: كما كان
  • Client Secret: كما كان

3. إعداد المنصات:

Android (AndroidManifest.xml):
<activity android:name="com.unity3d.player.UnityPlayerActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="YOUR_APP_SCHEME" />
    </intent-filter>
</activity>
iOS (Info.plist):
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>Patreon OAuth</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>YOUR_APP_SCHEME</string>
        </array>
    </dict>
</array>

4. إعداد PatreonConfig:

اضبط مخطط URI المخصص في PatreonConfig:

  • Custom URI Scheme: المخطط الذي تريده (مثل mygame.oauth)
  • Redirect URI: حدّثه ليطابق رابط الـ middleware
  • كل التغييرات: من واجهة PatreonConfig

5. رابط الاختبار:

https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME&code=test123&state=test456

✅ المزايا:

  • middleware واحد لكل الألعاب
  • مخطط ديناميكي مختلف لكل لعبة
  • إعداد سهل، فقط غيّر المخطط
  • اكتشاف تلقائي للمنصة

🔧 الاستخدام:

  1. اختر المخطط: mygame.oauth
  2. إعدادات تطبيق Patreon: https://yourdomain.com/api/oauth/redirect?scheme=mygame.oauth
  3. انسخ ملفات المنصات وغيّر المخطط
  4. اضبط customUriScheme في Unity
  5. جرّبه! 🎯

👑 إعداد Creator API (اختياري)

للميزات المتقدمة مثل بيانات الحملة وقوائم الأعضاء ومعلومات المستويات:

الخطوة 1: احصل على Creator's Access Token

  1. اذهب إلى Patreon Developer Console
  2. أنشئ «Creator’s Access Token» (وليس OAuth Client)
  3. اختر الصلاحيات: campaigns، campaigns.members، campaigns.tiers
  4. انسخ Access Token وRefresh Token

الخطوة 2: فعّل Creator API

  1. في سكربت PatreonEncryptCredentials:
    • ✅ حدّد «Enable Creator API»
    • أدخل Creator Access Token
    • أدخل Creator Refresh Token
  2. اضغط «Encrypt All Credentials»
  3. ستُضبط القيم تلقائيًا في PatreonConfig

بديل: الإعداد اليدوي

يمكنك أيضًا ضبط رموز Creator API مباشرة في PatreonConfig:

  • Creator Access Token: يُضبط في PatreonConfig للوصول إلى بيانات الحملة/الأعضاء
  • Creator Refresh Token: يُضبط في PatreonConfig لتجديد الرمز
  • Enable Creator API: فعّله في PatreonConfig للميزات المتقدمة

ملاحظة: تأكد من إتمام التشفير!

الخطوة 3: استخدم Creator API

// Get campaign information
StartCoroutine(PatreonManager.Instance.GetCampaignInfo());

// Get all campaign members/patrons
StartCoroutine(PatreonManager.Instance.GetCampaignMembers());

// Get campaign tiers/rewards
StartCoroutine(PatreonManager.Instance.GetCampaignTiers());

الخطوة 4: اعرضه في الواجهة

استخدم PatreonUserInfoDisplay مع الحقول الجديدة:

  • اسم الحملة، ملخص الحملة، عدد الداعمين
  • مبلغ المستوى، وصف المستوى، حد المستوى
  • عضو منذ، حالة الدعم، الدفعة التالية

المرجع: Patreon API Guide

المصادقة

مسار تسجيل الدخول

تتبع عملية المصادقة معايير OAuth 2.0:

  1. هيّئ المصادِق
  2. ابدأ عملية تسجيل الدخول
  3. عالج الاستدعاء
  4. تحقّق من الرمز

إليك مثالًا بسيطًا:

using DryreL.Patreon;

public class PatreonManager : MonoBehaviour
{
    private PatreonAuthenticator authenticator;
    
    void Start()
    {
        authenticator = new PatreonAuthenticator();
        authenticator.OnLoginSuccess += OnLoginSuccess;
        authenticator.OnLoginFailed += OnLoginFailed;
    }
    
    public void Login()
    {
        authenticator.StartLogin();
    }
    
    private void OnLoginSuccess(PatreonUser user)
    {
        Debug.Log($"Welcome, {user.FullName}!");
        // Handle successful login
    }
    
    private void OnLoginFailed(string error)
    {
        Debug.LogError($"Login failed: {error}");
        // Handle login failure
    }
}

إدارة الرموز

تتولى الإضافة تجديد الرموز وتخزينها تلقائيًا:

// Check if user is authenticated
if (authenticator.IsAuthenticated)
{
    // Get current user
    PatreonUser user = authenticator.CurrentUser;
    
    // Check subscription status
    bool isSubscriber = user.IsSubscriber;
    string tier = user.SubscriptionTier;
}

مرجع API

الأصناف

PatreonManager

صنف singleton الرئيسي لمعالجة مصادقة Patreon.

الخصائص:

  • bool IsUserAuthenticated() - تُرجع true إذا كان المستخدم مسجّل الدخول
  • PatreonUser GetCurrentUser() - تجلب المستخدم المصادَق الحالي
  • string GetValidAccessToken() - تجلب access token صالحًا (وتجدده عند الحاجة)

الدوال:

  • void StartPatreonAuth() - تبدأ مسار OAuth الخاص بـ Patreon
  • void Logout() - تسجّل خروج المستخدم الحالي وتمسح الرموز
  • void SetAccessToken(string token) - تضبط access token
  • void ExchangeCodeForToken(string code, string state) - تستبدل رمز التفويض بـ access token

PatreonUser

يمثّل مستخدم Patreon مع معلومات اشتراكه.

الخصائص:

  • string Id - معرّف المستخدم على Patreon
  • string FullName - الاسم الكامل للمستخدم
  • string Email - البريد الإلكتروني للمستخدم
  • string FirstName - الاسم الأول للمستخدم
  • string LastName - اسم عائلة المستخدم
  • string Vanity - الرابط المخصص للمستخدم
  • string ImageUrl - رابط صورة الملف الشخصي
  • bool IsPatron - هل المستخدم داعم
  • float PledgeAmount - مبلغ الدعم بالدولار
  • bool HasPledge - هل لدى المستخدم دعم نشط
  • string DisplayName - الاسم المعروض للمستخدم
  • string PatronStatus - حالة الدعم لدى المستخدم
  • string TierTitle - عنوان مستوى اشتراك المستخدم
  • int CentsPledged - مبلغ الدعم بالسنت

الدوال:

  • void LoadProfileAvatar(Action<Sprite> onComplete) - تحمّل الصورة الرمزية للمستخدم كـ Sprite

الدوال

StartLogin()

تبدأ مسار OAuth الخاص بـ Patreon.

public void StartLogin()

القيمة المُرجعة: void

مثال:

authenticator.StartLogin();

Logout()

تسجّل خروج المستخدم الحالي وتمسح الرموز المخزّنة.

public void Logout()

القيمة المُرجعة: void

مثال:

authenticator.Logout();

الأحداث

OnLoginSuccess

يُطلق عند نجاح تسجيل دخول المستخدم.

public event Action<PatreonUser> OnLoginSuccess;

المعاملات:

  • PatreonUser user - المستخدم المصادَق

OnLoginFailed

يُطلق عند فشل تسجيل الدخول.

public event Action<string> OnLoginFailed;

المعاملات:

  • string error - رسالة خطأ تصف سبب الفشل

أمثلة

مصادقة أساسية

using UnityEngine;

public class SimplePatreonExample : MonoBehaviour
{
    void Start()
    {
        // Subscribe to events
        PatreonManager.OnUserAuthenticated += HandleLoginSuccess;
        PatreonManager.OnAuthenticationFailed += HandleLoginFailed;
    }
    
    public void LoginButtonClicked()
    {
        PatreonManager.Instance.StartPatreonAuth();
    }
    
    private void HandleLoginSuccess(PatreonUser user)
    {
        Debug.Log($"Welcome {user.FullName}!");
        
        if (user.IsPatron)
        {
            Debug.Log($"You are a patron with tier: {user.TierTitle}");
            Debug.Log($"Pledge amount: ${user.PledgeAmount:F2}");
            // Unlock premium content
        }
        else
        {
            Debug.Log("You are not a patron");
            // Show subscription prompt
        }
    }
    
    private void HandleLoginFailed(string error)
    {
        Debug.LogError($"Login failed: {error}");
        // Show error message to user
    }
}

إدارة المحتوى المميز

public class PremiumContentManager : MonoBehaviour
{
    [SerializeField] private PatreonAuthenticator authenticator;
    [SerializeField] private GameObject premiumContent;
    
    void Start()
    {
        CheckSubscriptionStatus();
    }
    
    private void CheckSubscriptionStatus()
    {
        if (authenticator.IsAuthenticated)
        {
            PatreonUser user = authenticator.CurrentUser;
            
            if (user.IsSubscriber)
            {
                EnablePremiumContent(user.SubscriptionTier);
            }
            else
            {
                DisablePremiumContent();
            }
        }
        else
        {
            DisablePremiumContent();
        }
    }
    
    private void EnablePremiumContent(string tier)
    {
        premiumContent.SetActive(true);
        
        // Configure content based on tier
        switch (tier)
        {
            case "Bronze":
                // Bronze tier features
                break;
            case "Silver":
                // Silver tier features
                break;
            case "Gold":
                // Gold tier features
                break;
        }
    }
    
    private void DisablePremiumContent()
    {
        premiumContent.SetActive(false);
    }
}

حل المشكلات

مشكلات شائعة

خطأ «Invalid Client ID»

المشكلة: يظهر لك خطأ «Invalid Client ID» عند محاولة المصادقة.

الحل:

  1. تحقق من Client ID في Patreon Developer Portal
  2. تأكد من إدخال Client ID بشكل صحيح في Project Settings في Unity
  3. تأكد من إعداد تطبيقك بشكل صحيح على Patreon

مشكلات تجديد الرموز

المشكلة: لا تتجدد الرموز تلقائيًا.

الحل:

  1. تحقق من اتصالك بالإنترنت
  2. تأكد من صحة Client Secret
  3. تأكد من تطابق redirect URI تمامًا

مشكلات بناء Unity

المشكلة: تعمل الإضافة في المحرر لكن لا تعمل في النسخ المبنية.

الحل:

  1. تأكد من تضمين كل الاعتماديات المطلوبة في البناء
  2. تحقق من أن إعدادات Patreon مهيأة للإنتاج
  3. تأكد من إمكانية الوصول إلى redirect URI من تطبيقك المنشور

وضع التصحيح

فعّل وضع التصحيح للحصول على سجلات أكثر تفصيلًا:

PatreonConfig config = new PatreonConfig
{
    // ... other settings
    DebugMode = true
};

المنصات المدعومة

المنصة الحالة ملاحظات
WebGL ✅ دعم كامل مصادقة عبر المتصفح مع خادم مدمج
Android ✅ دعم كامل تكامل أصلي مع المتصفح، middleware (URI مخصص)
iOS ✅ دعم كامل تكامل أصلي مع المتصفح، middleware (URI مخصص)
Windows ✅ دعم كامل نسخ 32-bit و64-bit
Mac ✅ دعم كامل دعم universal binary
Linux ✅ دعم كامل كل التوزيعات الرئيسية

ميزات منصات الهاتف

  • Application.identifier: دعم كامل على iOS/Android
  • Device ID: مفاتيح تشفير آمنة خاصة بالجهاز
  • متصفح النظام: مسار OAuth أصلي مع العودة إلى التطبيق
  • StreamingAssets: معالجة الملفات حسب المنصة
  • مخططات URL: معالجة مخصصة للاستدعاءات

🔗 معالجة الاستدعاءات حسب المنصة

كل المنصات (نظام middleware موحّد)

  • redirect URI واحد: https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME
  • مخطط ديناميكي: يمكن لكل لعبة استخدام مخطط URI خاص بها
  • اكتشاف المنصة: اكتشاف وتوجيه تلقائيان
  • دعم شامل: يعمل على سطح المكتب والهاتف وWebGL

منصات الهاتف (Android وiOS وWindows وUWP)

  • الروابط العميقة: مخطط URI مخصص (YOUR_APP_SCHEME://patreon-callback)
  • إعادة توجيه الـ middleware: https://yourdomain.com/api/oauth/redirect ← رابط عميق
  • متصفح النظام: مسار OAuth أصلي مع عودة تلقائية إلى التطبيق
  • التحقق من state: حماية من CSRF بمعامل state

منصة WebGL

  • مسار الـ middleware: يستخدم https://yourdomain.com/api/oauth/redirect
  • استدعاء JavaScript: تواصل postMessage مع النافذة الأم
  • لا حاجة إلى خادم: يستخدم خدمة middleware مستضافة
  • دعم CORS: معالجة الطلبات من نطاقات أخرى

منصات سطح المكتب (Windows وMac وLinux)

  • إعادة توجيه الـ middleware: https://yourdomain.com/api/oauth/redirect ← localhost:3000
  • خادم مدمج: HTTP Listener على localhost:3000
  • مسار loopback: المتصفح ← middleware ← localhost ← استدعاء التطبيق
  • بلا اعتماديات: تنفيذ خالص بـ HttpListener من .NET

📱 متطلبات الإعداد على الهاتف

إعداد Android

  1. أنشئ AndroidManifest.xml في Assets/Plugins/Android/: ```xml

#### **iOS Setup**
1. **Player Settings** → **Other** → **Configuration**
2. **Add to Supported URL schemes**: `YOUR_APP_SCHEME`
3. Make sure **ios-info.plist** created.
4. **Xcode**: Verify URL scheme registration

#### **Patreon OAuth Client Configuration**
- **All Platforms**: Use single redirect URI with middleware
- **Redirect URI**: `https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME`
- **Client Type**: Select "Web application" (works for all platforms)
- **Dynamic Scheme**: Each game uses its own URI scheme

### 🌐 **Unified Middleware System**

**Hosted Middleware**: `https://yourdomain.com/api/oauth/redirect`

**Features:**
- **Platform Detection**: Automatic platform detection and routing
- **Dynamic Scheme**: Each game uses its own URI scheme
- **Universal Support**: Works on Desktop, Mobile, and WebGL
- **No Setup Required**: Uses hosted middleware service

**Middleware Workflow:**
1. **Patreon** → `https://yourdomain.com/api/oauth/redirect?scheme=YOUR_APP_SCHEME&code=...&state=...`
2. **Middleware** → Platform detection
3. **Redirect** → Platform-specific callback method

### 🚀 **Usage Examples**

#### **Platform-Specific OAuth Flow**
```csharp
// Automatic platform detection and callback handling
PatreonCallbackManager callbackManager = GetComponent<PatreonCallbackManager>();
callbackManager.StartPatreonOAuthFlow(clientId, state);

// Get platform-specific redirect URI
string redirectUri = callbackManager.GetPlatformRedirectUri();
Debug.Log($"Platform redirect URI: {redirectUri}");
// Mobile deep link callback (called by system)
PatreonDeepLinkHandler deepLinkHandler = GetComponent<PatreonDeepLinkHandler>();
deepLinkHandler.HandleDeepLinkCallback("myapp.oauth://patreon-callback?code=abc123&state=xyz789");

// Test deep link callback
deepLinkHandler.TestDeepLinkCallback();

معالجة الـ middleware في WebGL

// WebGL middleware callback
PatreonWebGLHandler webGLHandler = GetComponent<PatreonWebGLHandler>();
webGLHandler.StartPatreonOAuthFlow(clientId, state);

// Test WebGL callback
webGLHandler.TestWebGLCallback();

معلومات المنصة

// Show current platform and callback method
PatreonCallbackManager callbackManager = GetComponent<PatreonCallbackManager>();
callbackManager.ShowPlatformInfo();

// Output:
// 📱 Current Platform: AndroidPlayer
// 📱 Redirect URI: myapp.oauth://patreon-callback
// 🔗 Using deep link callback method

🧪 الاختبار

أوامر الاختبار

  • Test Platform OAuth Flow: يختبر مسار OAuth الخاص بالمنصة
  • Test Deep Link Callback: يختبر معالجة الروابط العميقة على الهاتف
  • Test WebGL Callback: يختبر معالجة الـ middleware في WebGL
  • Show Platform Info: يعرض معلومات المنصة الحالية

سكربتات الاختبار

  • PatreonCallbackManager: اختبار خاص بالمنصة
  • PatreonDeepLinkHandler: اختبار الروابط العميقة على الهاتف
  • PatreonWebGLHandler: اختبار الـ middleware في WebGL
  • PatreonMobileTest: اختبار التوافق مع الهاتف

اختبار الأمان

تتضمن الإضافة نظامًا شاملًا لاختبار الأمان:

1. أضف مكوّن Security Test

// Add PatreonSecurityTest component to any GameObject
// Right-click on GameObject → Add Component → PatreonSecurityTest

2. شغّل اختبارات الأمان

// In Inspector, click "Run All Security Tests" or use code:
var securityTest = GetComponent<PatreonSecurityTest>();
securityTest.RunAllTests();

3. اختبر المكوّنات منفردة

// Test encryption only
securityTest.TestEncryption();

// Test obfuscation only
securityTest.TestObfuscation();

// Test secure storage only
securityTest.TestSecureStorage();

// Performance test
securityTest.PerformanceTest();

4. التحقق من الأمان

// Validate entire security system
bool isValid = PatreonSecurity.PatreonSecurity.ValidateSecuritySystem();
Debug.Log($"Security system valid: {isValid}");

الدعم

احصل على المساعدة

إذا واجهتك أي مشكلة أو كان لديك سؤال:

  1. راجع التوثيق - معظم المشكلات الشائعة مشروحة هنا
  2. انضم إلى مجتمعنا على Discord - احصل على مساعدة من مطورين آخرين ومن فريقنا
  3. تواصل مع الدعم - للمشكلات التقنية راسلنا مع:
    • إصدار Unity
    • إصدار الإضافة
    • خطوات إعادة إنتاج المشكلة
    • رسائل الخطأ
    • ملفات السجل

المجتمع

انضم إلى مجتمعنا للدعم والتحديثات:

التحديثات

تابع أحدث الميزات وإصلاحات الأخطاء:

إخلاء المسؤولية

إشعار أمني مهم

توفّر هذه الإضافة تشفير AES-256 وميزات التمويه للمساعدة في حماية بيانات اعتماد Patreon API الخاصة بك. ومع ذلك، أنت المسؤول بالكامل عن أمان بيانات اعتمادك وعن أي عواقب قد تنتج عن كشفها.

ميزات الأمان المقدّمة

  • تشفير AES-256: لحماية Client Secret
  • تمويه XOR: لتمويه Client ID
  • اشتقاق مفاتيح متعدد الطبقات: مفاتيح تشفير خاصة بكل منصة
  • حماية من العبث: تحقق أساسي من السلامة
  • سجل تدقيق أمني: أدوات للمراقبة والتصحيح

مسؤولياتك

  • التخزين الآمن: لا ترفع PatreonConfig إلى نظام إدارة الإصدارات أبدًا
  • الاستخدام الصحيح: اتبع كل إرشادات الأمان في هذا التوثيق
  • التحديث المنتظم: حافظ على تحديث بيانات الاعتماد وغيّرها دوريًا
  • أمان البيئة: تأكد من أن بيئتي التطوير والإنتاج آمنتان
  • التحكم في الوصول: قيّد الوصول إلى ملفات بيانات الاعتماد ومخرجات البناء

إخلاء من المسؤولية

لا تتحمل DRYREL HUB أي مسؤولية عن أي أضرار مباشرة أو غير مباشرة أو عرضية أو خاصة أو تبعية أو عقابية، بما في ذلك على سبيل المثال لا الحصر:

  • الخسائر المالية: خسارة الإيرادات أو توقف الأعمال أو الأضرار المالية
  • الاختراقات الأمنية: الوصول غير المصرّح به إلى حسابك أو بياناتك على Patreon
  • إساءة استخدام API: إساءة استخدام بيانات اعتمادك من أطراف ثالثة
  • كشف البيانات: تسرّب معلومات حساسة
  • انقطاع الخدمة: توقّف الخدمة أو عدم توفرها
  • العواقب القانونية: أي مشكلات قانونية ناتجة عن كشف بيانات الاعتماد

استخدم هذه الإضافة على مسؤوليتك الخاصة. لا تُقدَّم أي ضمانات.

🔧 API V2: مشكلات أنواع الحسابات وحلولها

⚠️ مشكلات معروفة مع أنواع الحسابات المختلفة

عند الاختبار بأنواع مختلفة من حسابات Patreon (مبدع أو مستخدم عادي) قد تواجه المشكلات التالية:

1. البريد الإلكتروني لا يُجلب

  • المشكلة: حقل البريد يعود فارغًا للمستخدمين العاديين
  • السبب: قيود صلاحيات OAuth
  • الحل: صلاحيات OAuth الموسّعة تشمل الآن identity[email]

2. صورة الملف الشخصي لا تُجلب

  • المشكلة: رابط صورة الملف الشخصي فارغ
  • السبب: اختلافات في ربط حقول API
  • الحل: يُستخدم thumb_url تلقائيًا إذا كان image_url فارغًا

3. معلومات مستوى/حالة غير صحيحة

  • المشكلة: يظهر المستخدمون العاديون بمستوى «creator»
  • السبب: عدم اتساق ردود API بين أنواع الحسابات
  • الحل: تسجيل وتحقق محسّنان (انظر تحذيرات الـ console)
  • المشكلة: روابط YouTube وTwitter وFacebook فارغة
  • السبب: وصول محدود إلى حقول API للمستخدمين العاديين
  • الحل: طلبات حقول موسّعة في استدعاءات API

🔍 معلومات التصحيح

تتضمن الإضافة الآن تسجيل تصحيح شاملًا. راجع Console في Unity لترى:

  • 🔧 === USER DATA DEBUG === - تحليل كامل لبيانات المستخدم
  • 🔧 Email not available - تحذيرات قيود الصلاحيات
  • 🔧 Normal user has tier_title - حالات عدم اتساق نوع الحساب

📋 قائمة فحص الاختبار

عند الاختبار بأنواع حسابات مختلفة:

  1. اختبار حساب مبدع:
    • ✅ يجب جلب البريد الإلكتروني
    • ✅ يجب جلب صورة الملف الشخصي
    • ✅ يجب أن تكون معلومات المستوى صحيحة
    • ✅ قد تتوفر روابط التواصل
  2. اختبار حساب مستخدم عادي:
    • ⚠️ قد لا يتوفر البريد الإلكتروني (حسب الصلاحية)
    • ✅ يجب جلب صورة الملف الشخصي (مع بديل)
    • ⚠️ قد تكون معلومات المستوى خاطئة (تُسجَّل كتحذير)
    • ⚠️ قد لا تتوفر روابط التواصل

🛠️ صلاحيات OAuth موسّعة

تطلب الإضافة الآن صلاحيات موسّعة:

identity identity[email] identity.memberships campaigns

يتيح ذلك وصولًا أفضل إلى بيانات المستخدم عبر أنواع الحسابات المختلفة.

🔧 التحقق من بيانات API وإصلاحها

ملاحظة مهمة: تتضمن الإضافة تحققًا من البيانات على جهة العميل وإصلاحات لحالات عدم الاتساق المعروفة في Patreon API V2. هذا ضروري لأن:

  1. مشكلات بيانات API: يُرجع Patreon API V2 أحيانًا بيانات خاطئة للمستخدمين العاديين (مثل إظهار مستوى «Creator» لمستخدم عادي)
  2. تناقض البيانات: قد يُرجع API قيمًا متعارضة (مثلًا patron_status: "not_patron" لكن is_patron: true)
  3. اختلاط أنواع الحسابات: قد تختلط بيانات المستخدم والمبدع أحيانًا في ردود API
  4. مشكلات حالة المتابعة: الحقل is_follower غير موثوق وقد يُرجع false حتى عندما يتابع المستخدم

ما تفعله الإضافة:

  • ✅ تتحقق من كل بيانات المستخدم القادمة من API
  • ✅ تصلح حالات عدم الاتساق المعروفة تلقائيًا
  • ✅ تسجّل مشكلات API للتصحيح
  • ✅ توفّر قيمًا بديلة عند الحاجة
  • ✅ تحذّر من الحقول غير الموثوقة مثل is_follower

سجلات console التي يجب متابعتها:

  • 🔧 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 إضافية لنقاط campaigns/pledges
  • المرجع: راجع Patreon API Guide لطرق اكتشاف المتابعين الصحيحة

يضمن هذا النهج بيانات مستخدم موثوقة رغم عدم اتساق API.


شكرًا لك!

شكرًا لاستخدامك Patreon Authenticator for Unity. نأمل أن تساعدك هذه الإضافة على صنع تجارب رائعة لداعميك على Patreon!