Jiss Tech
أيقونة تطبيق كلامنا

دراسة حالة · تواصل اجتماعي على iOS

بناء منصة اجتماعية للمحادثات الصوتية المباشرة

كلامنا تطبيق للمحادثات الصوتية الجماعية من تطوير جيس تك: غرف مباشرة ولقاءات عفوية ومراسلات خاصة ومتابعات ومجتمعات تتشكل حول الحديث التلقائي. إنه منتجنا الخاص، صممناه وهندسناه وأطلقناه على Apple App Store بالكامل داخل فريقنا.

متاح على App Storeغرف صوتية جماعيةمجتمعات ورسائل خاصة

تحدي العمل أو المنتج

الصوت المباشر من أصعب أنواع تطبيقات المستهلكين.

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

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

نبذة عن المنتج

غرف صوتية لتواصل حقيقي.

غرف صوتية مباشرة

يستطيع أي شخص فتح غرفة والحديث. يجب أن يبدو الصوت فوريًا؛ فالمحادثة الصوتية المباشرة لا تتسامح مع التأخير كما يفعل النص.

لقاءات تنضم إليها فورًا

محادثات عفوية بدل المكالمات المجدولة: شاهد غرفة مباشرة، وانضم إليها، وغادر متى شئت. يجب أن تتحدث حالة الحضور في كل مكان فورًا.

المتابعات والمجتمعات

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

مراسلات خاصة

رسائل مباشرة إلى جانب الصوت الحي، لتستمر المحادثات بعد إغلاق الغرفة.

صورة ترويجية لتطبيق كلامنا توضح إنشاء مساحة صوتية
صورة ترويجية لتطبيق كلامنا تعرض غرفة صوتية جماعية مباشرة
صورة ترويجية لتطبيق كلامنا تعرض لقاءات يمكن الانضمام إليها فورًا
صورة ترويجية لتطبيق كلامنا تعرض جلسة جماعية يستضيفها أحد المستخدمين

البنية التقنية المتحقق منها

منتج اجتماعي مقسم عبر طبقات التطبيق والوقت الفعلي والوسائط.

يستخدم الإصدار المنشور من ProjectX تطبيقات Flutter وواجهة إدارة مبنية على React 17 تتصل بخادم TypeScript/Express. يوفر GraphQL العقد الأساسي للتطبيق، وينقل WebSockets أحداث الغرف والحضور، ويتولى LiveKit الوسائط الصوتية بدلًا من تمرير الصوت عبر واجهة API الخاصة بالتطبيق.

جارٍ عرض البنية التقنية المتحقق منها…

التقنيات

التقنيات المستخدمة، دون حشو السيرة الذاتية.

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

الهاتف المحمول

FlutterDartRiverpodالعميل GraphQLWebSocketsLiveKit

الإدارة

React 17TypeScriptApollo ClientGraphQL codegenLiveKit

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

Node.jsTypeScriptExpressGraphQLWebSocketsAdminJS

البيانات والأحداث

PostgreSQLRedisNATSصندوق صادر ضمن المعاملة

الوسائط والتسليم

LiveKitFirebase Cloud MessagingTelnyxKlipy

ضوابط التطبيق

HelmetCORSMorganZodJWTDocker Compose

القيود

المتطلبات التي كان على النظام الالتزام بها

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

الحل

القرارات الهندسية التي تلبي هذه القيود

  • استخدم GraphQL لعقد العميل الأساسي وWebSockets لأحداث الغرفة والدردشة والميكروفون والحضور.
  • احتفظ بـ PostgreSQL كحالة دائمة، وRedis كبنية أساسية سريعة الزوال، ونشر الأحداث خلف ناقل قادر على استخدام NATS.
  • إصدار بيانات اعتماد الوسائط والتكامل من مسارات أدوات يتحكم فيها الخادم، بدلًا من تضمين صلاحيات الوصول المرتفعة في تطبيقات العميل.
  • التعامل مع الإشراف على المحتوى والحظر والبلاغات ورموز الأجهزة وسجلات الشراء بوصفها مجالات أساسية في الواجهة الخلفية.

التحديات الهندسية

فصل الوسائط عن حالة التطبيق

يحمل LiveKit جلسات صوتية بينما يتعامل GraphQL وWebSockets مع بيانات التطبيقات الدائمة وأحداث الغرفة سريعة التغير.

اجعل تسليم الحدث قابلاً للاسترداد

يسجل صندوق صادر مدعوم بـ PostgreSQL حالة الأحداث ويعيد محاولة نشرها عبر NATS، مع برنامج تشغيل داخل الذاكرة يتيح تشغيلًا محليًا أبسط.

توحيد مجال منتج واسع

تشترك الملفات الشخصية والمتابعات والغرف والرسائل والموجزات والتقارير والهدايا والمشتريات والألعاب في عقد خلفي واحد بدلاً من أن تصبح صوامع ميزات معزولة.

تكامل الأنظمة

أنظمة خارجية ذات وظائف محددة

  • LiveKit لوسائط غرفة الصوت ورموز المشاركين.
  • Firebase Cloud Messaging لإرسال الإشعارات الفورية إلى الأجهزة.
  • Telnyx لتسليم OTP عبر الرسائل القصيرة.
  • التحقق من الرموز المميزة لـ Google وApple وFacebook لتسجيل الدخول عبر مواقع التواصل الاجتماعي.
  • وحدة تخزين كائنات متوافقة مع Cloudflare R2 مع سلوك احتياطي خلفي/محلي.
  • بحث Klipy GIF ونقاط النهاية للتحقق من الشراء من Apple/Google.

الموثوقية والأمن

الضوابط الظاهرة في الشيفرة المصدرية

  • يحفظ صندوق الصادر ضمن المعاملة حالة إعادة محاولة الأحداث إلى جانب بيانات التطبيق الدائمة.
  • يمكن لناقل الأحداث استخدام NATS أو برنامج تشغيل محلي داخل الذاكرة دون تغيير الأجزاء التي تستدعيه في نطاق التطبيق.
  • تتضمن شيفرة الخادم Helmet وإعدادات CORS والتحقق باستخدام Zod وفحوص JWT وضوابط الحظر والبلاغات والإشراف على المحتوى.
  • توضح وحدات التخزين والإشعارات سلوك التعطيل أو البديل صراحةً عند غياب إعدادات مزود الخدمة.

النتيجة

ما يوضحه التنفيذ الذي تم التحقق منه

وصل Kalamna إلى Apple App Store بوصفه منتجًا اجتماعيًا صوتيًا يعمل فعليًا. ويُظهر تنفيذ ProjectX المتحقق منه تطوير تطبيق هاتف وتسليمه من البداية إلى النهاية، مع خادم اجتماعي آني وبنية للصوت وأدوات إدارة وإشراف وإشعارات وتكاملات هوية وعمليات شراء عبر المتجر، كلها في منتج واحد.

الدروس المستفادة

  • يعمل الصوت في الوقت الفعلي بشكل أفضل عندما يكون لنقل الوسائط وحالة التطبيق مسؤوليات منفصلة وصريحة.
  • تزداد فائدة ناقل الأحداث عندما تُحفَظ حالة إعادة المحاولة حفظًا دائمًا قبل خروج الحدث من حدود معاملة قاعدة البيانات.
  • تحتاج المنتجات الاجتماعية المعقدة إلى تصميم أدوات الإشراف على المحتوى والبلاغات والتشغيل بالتوازي مع الميزات التي يستخدمها الجمهور.

ما الذي يثبته هذا

نستطيع إيصال المنتج من الفكرة إلى App Store.

يمثل كلامنا الرحلة كاملة: الفكرة والتصميم والهندسة اللحظية والنظام الخلفي والإطلاق على App Store والتشغيل، وينفذها الفريق الصغير نفسه الذي يعمل على مشروعات العملاء. عندما نبني تطبيق هاتف أو تطبيق ويب لك، نستند إلى خبرة لا تأتي إلا من إطلاق منتجاتنا وتشغيلها بأنفسنا.

هل تبني منتجًا اجتماعيًا أو يعمل لحظيًا؟

الصوت والحضور والبيانات المباشرة والمجتمعات: أطلقناها بمستوى العناية الذي تتطلبه تطبيقات المستهلكين. أخبرنا بما تفكر فيه.