مهدی درویشی
مهدی درویشی
خواندن ۶ دقیقه·۳ سال پیش

درباره کوییزاپ: اپلیکیشن اوپن سورس اندروید

تو پست قبلی درباره تجربه نوشتن اولین برنامه به عنوان برنامه‌نویس تو شرکت نوشتم که خروجی اون برنامه‌ی کوییزاپ بود، تو این نوشته از خود کوییزاپ می‌گم تا اگه کسی خواست کدش رو متوجه شه، استفاده کنه یا با apiهای فرمالو آشنا بشه برای توسعه برنامه‌ی خودش راحت‌تر باشه.

پروژه کوییزآپ یه بازی اسم و فامیل برای پلتفرم اندرویده که بیسش توسط apiهای فرمالو با زبان کاتلین تو محیط توسعه اندروید استودیو نوشته شده. تو بازی دو نقش داریم که وقتی وارد اپ می‌شیم می‌تونیم در نقش هاست (سازنده‌ی بازی) یا در نقش پلیر (کننده‌ی بازی) باشیم.

بازی به عنوان هاست

برای هاست بودن نیازه که یک حساب کاربری تو اپلیکیشن (توسط icas فرمالو) بسازید و تا توکنی برای کار با apiها بگیرید، در مرحله‌ی بعد فرم‌هایی که تگ گیم دارن رو دریافت می‌کنید که فرم اسم و فامیل هم قبلن در فرمالو ساخته شده و در تمپلیت‌ها موجوده و تگ گیم داره.

بعد از کلیک روی فرم مورد نظر (که این‌جا فرم اسم و فامیل هست که تگ گیم داره) یه کپی از اون فرم در اکانت فرمالوی شما گرفته می‌شه و در مرحله بعد شما می‌تونید اسم فرم (title) و توضیحات فرم (description) اون رو وارد کنید که این‌جا باید بگید بازی قراره با چه حرفی شروع بشه و بعد گزینه‌ی play رو بزنید. بعد از طی کردن این مراحل فرمی اسم و فامیلی که در حساب کاربری شما کپی گرفته شده با اسم و توضیحاتی که وارد کردید ادیت می‌شه. در مرحله‌ی بالا به عنوان هاست اسم‌تون هم دریافت می‌شه.

بعد از ساخت اکانت، کپی گرفتن از فرم، ادیت فرم به شما کد 6 رقمی‌ای داده می‌شه که بهش می‌گیم کد لایو. این کد توسط فرمالو لایو ایجاد شده تا به پلیرها داده شه و بتونن فرمی که تو حساب شما هست رو ببینن و سابمیت کنن. شما می‌تونید کد رو به دوستاتون بدید تا از بخش پلیر وارد بازی بشن.

بعد از تبدیل فرم به لایو فرم، شما به عنوان پلیر می‌تونید خودتون یه بار فرم‌تون رو پر کنید و ارسال کنید، یعنی خود هاست هم نقش پلیر رو داره که علاوه بر پلیر، دسترسی‌های بیش‌تری به بازی داره. تو این مرحله شما دوتا گزینه دارید: فرم‌تون رو ارسال کنید، بازی رو به اتمام برسونید که وقتی اولین فردی که بازی رو تموم کرد و استپ گفت شما ۵ ثانیه به بقیه بازیکن‌ها فرصت می‌دید و بعد فرم خودتون رو ارسال می‌کنید و در نهایت روی گزینه‌ی پایان بازی تاچ می‌کنید. با زدن پایان بازی، فرم شما غیرفعال می‌شه این یعنی هر کس بعد از پایان بازی جوابی برای فرم ارسال کنه، پیغام شما «بازی تموم شده و شما دیر ارسال کردید» بهش نشون داده می‌شه (ارسال جواب برای فرم‌هایی که غیرفعال شدن در فرمالو ممکن نیست و ارور ۴۰۴ رو دریافت خواهید کرد).

بعد از پایان بازی شما وارد صفحه‌ی جواب‌ها می‌شید، از اون‌جایی که قبل از پایان بازی همه‌ی بازیکن‌ها باید جواب‌شون رو ارسال می‌کردن شما در صفحه‌ی جواب به جواب همه‌ی بازیکن‌ها دسترسی دارید و می‌تونید به همراه اسم‌شون ببینید. دو فیلد هم در فرم داریم که اگه به عنوان هاست وارد شید می‌تونید ببینید (فیلد‌های admin only) اون فیلد‌ها status و point هستند و به ازای هر بازیکن شما به عنوان هاست می‌تونید اون‌ها رو تغییر بدید و بعد جواب‌شون رو به سرور بفرستید (ادیت کنید). و بعد از وارد کردن امتیازها شما می‌تونید به بازیکن‌ها بگید که تو صفحه رو رفرش کنن تا امتیاز و وضعیت‌شون رو ببینن. این‌جا بازی خاتمه پیدا می‌کنه و شما می‌تونید شروع دوباره رو بزنید تا به عنوان هاست دوباره بازی جدید رو طبق فرآیند بالا (جز لاگین/رجیستر) طی کنید.

بازی به عنوان پلیر

در نقش پلیر شما اول از همه وارد صفحه‌ای می‌شید که درخواست کد لایو رو داره ازتون، تا توسط کد لایو به فرم مورد نظر بدون توکن دسترسی داشته باشید (دقت کنید که تمامی مراحل پلیر بدون نیاز به لاگین/رجیستر و عدم نیاز به توکنه). بعد از وارد کردن کد لایو اگه کد منقضی نشده باشه وارد مرحله‌ی بعد که وارد کردن اسم باشه می‌شید.

تو این مرحله شما اسم‌تون رو وارد می‌کنید و در جایی از برنامه نگهداری می‌شه که همراه فرم ارسال بشه، فیلد اسم بازیکن تو فرم به عنوان فیلد مخفی (hidden field) در نظر گرفته و در طی پر کردن فرم اسم و فامیل توسط پلیر از اون در خواست نمی‌شه تا تمرکزش روی بازی باشه.

بعد از اون شما به فرم اسم و فامیل دسترسی دارید و در بالا صفحه می‌تونید ببینید که بازی با چه حرفی شروع می‌شه و در مابقی صفحه لیستی از فیلدها نمایش داده می‌شه که می‌تونید جواب‌ها رو پر کنید و ارسال کنید. بعد از پر کردن فیلدها اولین نفری که تمام فیلدها رو طبق حرف شروع بازی پر کرد به هاست اطلاع می‌ده تا به همه خبر بده که جواب‌شون رو ارسال کنن. اگه اون نفر شما بودید زودتر از همه فرم رو ارسال می‌کنید و بعد اطلاع می‌دید تا مابقی هم ارسال کنن تا فرم ۵ ثانیه‌ی دیگه توسط هاست غیرفعال نشده.

بعد از ارسال فرم شما وارد صفحه‌ی جواب‌ها می‌شید (درست مثل هاست با این تفاوت که امکان ادیت فیلد وضعیت و امتیاز رو ندارید) و لیست تمام پاسخ‌های همه‌ی بازیکن‌ها به علاوه هاست رو دارید تا با بقیه بازیکن‌ها جواب‌هاتون رو مقایسه کنید. دوتا دکمه در این صفحه وجود داره که اولی اپدیت جواب‌هاست تا بعد از بررسی جواب‌ها و تغییر فیلد امتیاز و استاتوس توسط هاست بتونید اپدیت کنید و مقدار اون دو فیلد هم ببینید و گزینه‌ی بعدی هم شروع دوباره‌ست تا یه بازی جدید با کد جدید داشته باشید.

نکته‌ای که مطرحه شما به تمام جواب‌های ارسال شده به یک فرم دسترسی دارید شاید از نظر امنیتی زیر سوال بره اما این امکان توسط ویژگی فرم لایو پیاده شده و از ویژگی لایو برای پرسش و پاسخ زنده، نظرسنجی زنده و مابقی موارد استفاده می‌شه و ویژگی لایوِ فرم‌هایی که اطلاعات مهمی در اون‌ها ارسال می‌شن رو نباید فعال کنید و کدش رو به بقیه بدید.

توضیحات فنی پروژه

توضیحات بخش ماژول

بیس پروژه بر اساس پروژه‌ی اوپن سورس قبلی شرکت یعنی فلش کارته که به صورت ماژولار نوشته شده بود که در ماژول feature قرار داره، پروژه کوییزآپ در ماژول game توسعه داده شده که از ماژول‌های data و common استفاده می‌کنه (هر دو ماژول feature و game بدون وابستگی به هم از data استفاده می‌کنند)

ماژول auth هم فرآیند authentication کاربر توسط icas فرمالو رو هندل می‌کنه که برای بخش گیم توسعه داده شده، در موارد دیگر شما به عنوان توسعه دهنده/سازمان اگه خواستید می‌تونید همزمان هم بازی داشته باشید (game) و هم بخش آموزش (feature)

معماری پروژه

معماری پروژه سعی شده بر اساس MVVM پیاده شده باشه و ارتباط بین لایه‌ی model و view برنامه توسط viewModel انجام می‌شه که برای این کار از observerهای لایو دیتا و برای هندل کردن پردازش‌های همزمان از کروتین استفاده شده.

بخش مدل در ماژول data وجود داره. و در پکیج feature ماژول game ما view و viewModel رو داریم.

سینگل اکتیویتی و ارتباط بین فرگمنت‌ها

این اپلیکیشن در بخش کوییزاپ تنها یک اکتیویتی برای نمایش فرگمنت‌ها با ویوی Fragment Container View داره و برای ارتباط بین فرگمنت‌ها از Navigation component گوگل استفاده شده.

لایبراری‌های استفاده شده

  • Koin DI: برای تزریق وابستگی
  • Coroutines: برای پردازش‌های سنگین و همزمان
  • Retrofit, Gson converter, logging: برای اتصال به سرور
  • Navigation fragment, lifecycle viewmodel: برای ارتباط بین فرگمنت‌ها، مدیریت لایف سایکل



این برنامه به صورت اوپن سورس در گیت‌هاب منتشر شده و می‌تونید سورس کدهای برنامه رو ببینید و با نحوه کار و پیاده سازی apiهای فرمالو آشنا شید.

لینک دیزاین اون در دربیل و لینک دانلود تو مایکت هست و آموزش نحوه بازی رو هم می‌تونید در آپارات ببینید.


لینک گیت‌هاب پروژه:

https://github.com/formaloo/quiz-app-android

لینک دانلود برنامه:

https://myket.ir/app/com.formaloo.quizapp

لینک دربیل پروژه:

https://dribbble.com/shots/17043972-SCategories-game-android-application
فرمالواوپن سورساندرویدبرنامه نویسیبرنامه نویسی اندروید
دولوپر جونیور اندروید و طراح رابط کاربری در فرمالو، عضو تیم تکنولوژی تداکس تهران، علاقه‌مند به خیلی چیزا. mahdidrv.ir
شاید از این پست‌ها خوشتان بیاید