ليكسكوان: تطبيق محلي قابل للتخصيص لموقع Discourse الخاص بك

مرحبًا بالجميع،

أردت أن أتدخل بسرعة هنا لأذكر أنني قمت للتو بفتح مصدر مشروع يسمى Lexicon مع بعض زملائي.

إنه تطبيق محمول أصلي جاهز وقابل للتخصيص مبني على واجهة برمجة تطبيقات Discourse. بنيناه لمساعدة المشاريع المحمولة الأصلية الأخرى على دمج ميزات المناقشة والرسائل بسرعة.

كان بناء هذا المشروع ممتعًا للغاية، ويرجع ذلك أساسًا إلى كل العمل الشاق الذي قام به فريق Discourse الأساسي والمجتمع على مدار السنوات.

تتوفر لقطات شاشة في المقدمة.

يمكن للأشخاص المهتمين بالجانب التقني الاطلاع على دليل البدء السريع لدينا، والذي سيمكنك من تصفح موقع Discourse هذا أثناء تجربة التطبيق!

لا تترددوا في التواصل معنا إذا كانت لديكم أي أسئلة أو تعليقات أو ملاحظات.

شكرًا لكم،
ريان

ملاحظة: لم أكن متأكدًا من الفئة الأفضل لنشر هذا المنشور. لا تترددوا في إعادة التعيين إذا كانت هناك فئة أفضل.

58 إعجابًا

نقدر حقًا التوثيق الواضح، خاصةً المتعلق بالهندسة المعمارية. لا يمكننا الانتظار لاستكشافه محليًا!

إشعارات الدفع | :cross_mark::hammer: قيد التطوير

هل هناك جدول زمني لذلك؟

8 إعجابات

هذا رائع يا @RyanKF! في أي اتجاه يجب على المطورين الجدد المساعدة أولاً؟ لدي بعض الخبرة في تطبيقات الهاتف المحمول باستخدام React.

3 إعجابات

هذا رائع جدًا. يبدو أنه مرخص بموجب رخصة MIT؟

إعجاب واحد (1)

أوه، هل من المفترض أن يكون هذا تطبيقًا أصليًا لـ Discourse مثل Fig؟ إذا كان الأمر كذلك، فأنا معجب جدًا به! :grinning:

4 إعجابات

يبدو أن Fig رائعة! يبدو أنهم نجحوا حقًا في تقديم تجربة أصلية لنظام iOS لمنصة Discourse.

بعض الفروقات التي ألاحظها…

دعم الأجهزة اللوحية

يتمتع Fig بدعم ممتاز للأجهزة اللوحية. لم نتناول هذا الجانب بعد.

تطبيق لموقع واحد

على غرار تطبيق Discourse المحمول، اعتمد Fig نهج “مدير الموقع”، مما يسمح لك بإضافة مواقع Discourse متعددة يمكنك تصفحها. بينما يركز Lexicon أكثر على إنتاج تطبيق فردي، قد يكون مخصصًا لعلامة تجارية، لموقع Discourse معين.

Lexicon نفسه ليس تطبيقًا

بالإضافة إلى ذلك، يُعد Lexicon أكثر من كونه “قالب تطبيق” يمكنك أخذه، وتخصيصه، ونشره بنفسك في متجر التطبيقات أو متجر Play. بينما يوفر Fig تطبيقًا منشورًا بالفعل.

العرض المتميز

يوفر Fig عرضًا متميزًا لبعض الميزات. أما Lexicon فلا يقدم أي عروض متميزة.

النقطة الوحيدة التي قد تدخل فيها الأموال هي إذا لم يكن لديك شخص آخر لمساعدتك في دمج أو تخصيص أو نشر Lexicon. في هذه الحالة، سنكون سعداء لمناقشة كيفية التعاون معنا.

مع ذلك، أعرف أن العديد من مستخدمي هذا الموقع هم من ذوي الخلفيات التقنية أو شبه التقنية، لذا أتمنى أن تكون الوثائق مفصلة بما يكفي لتوجيه الكثيرين خلال هذه العملية دون الحاجة إلى مدخلات إضافية.

التقنيات ودعم الأجهزة

أنا أتخيل هنا، لكن يبدو أن Fig بنوا تطبيقهم باستخدام لغة Swift، مما يعني أنه أصلي تمامًا، وهو أمر رائع.

أما نحن فقد بنينا Lexicon باستخدام React Native، أي باستخدام JavaScript (ومن الطبيعي أن لا يكون الجميع من محبي هذا النهج).

إحدى فوائد استخدامنا لـ React Native هي أننا نحصل تلقائيًا على تطبيقات قابلة للنشر لنظامي Android وiOS جاهزة من البداية، كما أن لدينا نسبة عالية من إعادة استخدام الكود.

معظم الفروقات بين Android وiOS في قاعدة الكود لدينا تتعلق بتفاصيل المظهر والشعور، مثل زر الإجراء العائم (Floating Action Button) على Android بدلاً من زر في الرأس على iOS.

11 إعجابًا

إنه رخصة MIT. وفي جميع التفاصيل الأخرى للإعلان عن هذا، كنت قد نسيت إضافة ملف رخصة (LICENSE) إلى المستودع - شكراً لك على لفت انتباهي إلى ذلك!

6 إعجابات

وأنت رائع لأنك تريد بالفعل المساهمة @4ong!

الواجهة الأمامية

في جانب الواجهة الأمامية، هناك مجال أود تحسينه وهو دعمنا للميزات المضمنة في المحتوى الخام للموضوع.

إلى جانب معالجة محتوى Markdown العادي للموضوع، يمكننا أيضًا دعم عدة ميزات يوفرها الترميز المخصص لـ Discourse.

وكما قد تكون على دراية بالفعل، يدعم Discourse صيغة مخصصة لميزات مثل الاقتباسات، والتبديلات، والتواريخ، وحتى الاستطلاعات.

في نهج شائع إلى حد ما، قمنا بتخصيص دعم أولي لبعض الميزات الأساسية مثل تضمين الأكواد، ثم أضفنا كتلة “<الميزة> غير مدعومة في الوقت الحالي” للميزات التي لم يتم تنفيذها بعد.

أود حقًا القضاء تمامًا على كتل “غير مدعومة” هذه من تطبيقنا. سيكون دعم الاستطلاعات والتبديلات رائعًا بشكل خاص.

أيضًا، نظرًا لأن Lexicon يعمل على المحتوى الخام للموضوع، فإننا نتجاوز دعم OneBox. لذا، كحد أدنى، سيكون من الجيد وجود دعم أساسي لمعاينات الروابط.

الواجهة الخلفية

إحدى الميزات التي أتحمس لدعمها في النهاية هي الروابط العميقة من رسائل البريد الإلكتروني. هذه على الأرجح ليست ميزة تافهة التنفيذ، وقد تتطلب بناء إضافة لـ Discourse بلغة Ruby.

بشكل أساسي، سيسمح ذلك للمستخدمين بالنقر فوق رابط إلى موضوع في رسالة بريد إلكتروني من Discourse، وفتح التطبيق (إذا كان مثبتًا) مباشرةً إلى ذلك الموضوع المحدد عبر رابط عميق عبر Discourse.

وإذا لم يكن التطبيق مثبتًا، أو إذا لم يكن المستخدم على جهاز محمول، فسيتم توجيهه إلى الموقع كما هو معتاد.

إذا كان أي شخص يرغب في العمل على هذه المهمة، يرجى التواصل معي. سيكون ذلك ضخمًا إذا تم عملها.


تعديل: راجع أيضًا صفحة الميزات المدعومة في Discourse في توثيقنا لمعرفة الميزات التي لم يتم دعمها بعد، ولا تتردد في العمل على أي منها (باستثناء إشعارات الدفع، فنحن نعمل عليها بالفعل).

7 إعجابات

بشكل متفائل، خلال الأسابيع القليلة القادمة هنا — لا يمكنني تقديم ضمانات قاطعة بعد.

لقد تجاوزنا بالفعل مرحلة إثبات المفهوم، لكن لا يزال لدينا بعض الحواف الخشنة التي تحتاج إلى تنعيم.

وسيتطلب دعم هذه الميزة تثبيت إضافة Discourse الخاصة بنا على موقعك.

ولتقديم بعض التفاصيل، قمنا ببناء تطبيق Lexicon للهواتف المحمولة باستخدام Expo، وهي مجموعة مذهلة من أدوات البناء والخدمات لتطبيقات React Native — وهي تتضمن دعمًا للإشعارات الدفعية (Push Notifications).

ومع ذلك، لم نتمكن من العثور على أي إضافات Discourse موجودة تتكامل مع خدمة الإشعارات الدفعية الخاصة بـ Expo، لذا اضطررنا في النهاية إلى بناء واحدة. لحسن الحظ، فإن التكامل مفتوح المصدر الموجود مع OneSignal مشابه جدًا لما نحتاجه، مما سمح لنا باستخدام مشروعهم كنقطة انطلاق. (نشكر pmusaraj على ذلك :folded_hands:).

وبالإضافة إلى نشر الإضافة وتكاملها مع تطبيق الهاتف المحمول، سنرغب بالطبع في تحديث التوثيق أيضًا. لأن Lexicon يتيح لك نشر تطبيقك الخاص، فإن الأمر يتجاوز مجرد إعداد الإشعارات الدفعية لتطبيق واحد على متاجر App أو Play.

لذلك، سنرغب في التأكد من توجيه مستخدمي المشروع بشكل صحيح خلال عملية الإعداد لضمان عملها بسلاسة.

7 إعجابات

شكرًا لكم جميعًا على جميع التعليقات. أخبروني إذا كانت لديكم أي أسئلة أخرى.

بالمناسبة، نسيت أن أذكر أن لدينا أيضًا منشورًا على ProductHunt اليوم يسير بشكل جيد. إذا أردتم إظهار الدعم، فلا تترددوا في التحقق منه!

https://www.producthunt.com/posts/lexicon-2

إعجاب واحد (1)

أهلاً، حسناً. شكراً للتوضيح! يبدو أن

إعجاب واحد (1)

مثير جدًا!

بعض التعليقات/الأسئلة:

  1. غير واضح ما إذا كان DiscourseConnect مدعومًا؛ قد يكون من الجيد إضافة ذلك إلى صفحة الميزات المدعومة.

  2. هناك العديد من الخيارات المتاحة لطرق تثبيت Prose، سواء في البرنامج التعليمي أو في الوثائق. أعتقد أن هذه المواد يمكن تنظيمها بشكل أفضل. لقد وجدت نفسي غير واضح حول كيفية عمل إعداد SSL إذا كنت أحاول القيام بالأشياء بأبسط طريقة ممكنة باستخدام صورة Docker الخاصة بكم.

  3. أحب تجربته، لكن لا توجد طريقة واضحة للقيام بذلك. إذا جعلتم تطبيقًا متاحًا لـ Meta، يمكننا ذلك :slight_smile:

  4. إشعارات الدفع والربط العميق كما ذكرتم هما بالتأكيد ميزات مهمة في رأيي.

  5. نظرًا لتعقيدات التحديثات، ونشر التطبيقات، وProse، إلخ، فإن ذهني يتجه بسرعة إلى الاهتمام بخدمة مستضافة/مدعومة جاهزة مدفوعة تتولى أنتم فيها كل هذا. قد يكون من الجيد أن تقدموا مثل هذه الخدمة. أنا فضولي بشأن كيفية أن يكون التسعير.

5 إعجابات

إلى جانب دعم الأجهزة اللوحية، أليس كذلك؟ :wink:

إعجاب واحد (1)

هذا عمل ممتاز

4 إعجابات

هل لدى ليكسيكون مجتمع ديسكورد خاص به؟ إن موقع GitHub جيد، لكن لا يمكنك حقًا مناقشة ليكسيكون هناك بالطريقة المناسبة.

5 إعجابات

مرحبًا، يبدو أن هناك مشكلة عند تحميل التطبيق لمنشور يحتوي على أحرف غير إنجليزية (مثل الأحرف الصينية 中文). أظن أن هذا قد يكون مرتبطًا بميزة أسماء يونيكود في منصة ديسكوس (Unicode usernames and group names)، وقد فتحتُ قضية لتسجيل تفاصيل سجل الأخطاء في مستودع غيت هاب:

إعجاب واحد (1)

أحسنت! هل قمت بدمج أي حلول للتعديل الآلي حتى الآن؟ أحب أن أقلل من الإساءة والرسائل غير المرغوب فيها التي أراها في بعض المنتديات.

لقد حاولت تكوين تطبيق Lexicon المحمول باتباع البرنامج التعليمي المتاح على Lexicon. بعد إكمال جميع الخطوات وتشغيل التطبيق المحمول لحالة Discourse مجانية (https://meta.discourse.org/)، تظهر لي هذه الأخطاء على الهاتف وسجل الطرفية على التوالي.

خطأ الطرفية:

لا توجد أي من هذه الملفات:

\generated\server\globalTypes(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg)

src\generated\server\globalTypes\index(.native|.android.js|.native.js|.js|.android.json|.native.json|.json|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.svg|.native.svg|.svg)
 5 | import { DEFAULT_CHANNEL } from '../constants';
  6 | import { Text } from '../core-ui';
>  7 | import { TopicsSortEnum } from '../generated/server/globalTypes';
    |                                 ^
   8 | import {
  9 |   anchorToMarkdown,
 10 |   errorHandler,
إعجابَين (2)

بعد إعداد المشروع، تظهر الأخطاء التالية بشكل متكرر:


لقد قمت بتوفير http:// في متغير MOBILE_HOST_PRONE، ومع ذلك يظهر خطأ عند تشغيل التطبيق على الهاتف.

إعجاب واحد (1)

أيضًا، خطأ آخر هو:
تعذر بدء تشغيل تطبيقك: لا يوجد تطبيق مسجل.

إعجاب واحد (1)