LaunchDarkly: چیست، پرچم‌های عملکردی و نحوه کار

نویسنده: IT Sectr منتشر شده: 2026-04-13 زمان مطالعه: 8 دقیقه

LaunchDarkly یک پلتفرم مدیریت پرچم‌های عملکردی است که به توسعه‌دهندگان برنامه‌های موبایل امکان می‌دهد بدون استقرار مجدد، قابلیت‌ها را فعال و غیرفعال کنند. به گزارش LaunchDarkly، 2024، بیش از 4000 شرکت از این سرویس برای انتشار ایمن ویژگی‌های جدید، تست A/B و استقرار مرحله‌ای در زمان واقعی استفاده می‌کنند.

نکات مهم

  • LaunchDarkly — پلتفرم مدیریت پرچم‌های عملکردی برای استقرار ایمن و تست قابلیت‌های جدید
  • Feature flag — کلیدی که دسترسی به ویژگی را بدون تغییر کد برنامه مدیریت می‌کند
  • SDK وضعیت پرچم‌ها را در زمان واقعی از طریق اتصال SSE با سرور همگام‌سازی می‌کند
  • استقرار مرحله‌ای ویژگی را برای درصد انتخاب‌شده کاربران با امکان بازگشت فوری فعال می‌کند
  • تست A/B بر روی پرچم‌های multivariate با توزیع خودکار ترافیک در بین گزینه‌ها ساخته شده است

LaunchDarkly چیست؟

LaunchDarkly یک پلتفرم مدیریت پرچم‌های عملکردی است که در سال 2014 توسط شرکت Catamorphic Corp تأسیس شد. وظیفه اصلی سرویس این است که به تیم‌های توسعه امکان دهد ویژگی‌های برنامه را در زمان واقعی بدون استقرار کد جدید فعال، غیرفعال و پیکربندی کنند.

برخلاف رویکرد سنتی که انتشار قابلیت جدید نیاز به انتشار نسخه در فروشگاه برنامه دارد، LaunchDarkly امکان تغییر رفتار از راه دور را فراهم می‌کند. برای توسعه موبایل این بسیار مهم است — بررسی در App Store و Google Play از چند ساعت تا چند روز طول می‌کشد، در حالی که یک پرچم در چند ثانیه تغییر می‌کند.

پلتفرم LaunchDarkly چگونه کار می‌کند

معماری LaunchDarkly بر سه مؤلفه ساخته شده است: سرور پرچم، SDKهای مشتری و پنل مدیریت. سرور پیکربندی پرچم‌ها، قوانین فعال‌سازی و بخش‌های کاربران را ذخیره می‌کند. SDK یک اتصال SSE دائمی با سرور برای دریافت به‌روزرسانی‌ها در زمان واقعی حفظ می‌کند.

هنگام تغییر پرچم در پنل، سرور به‌روزرسانی را به همه SDKهای متصل ارسال می‌کند. تأخیر 200–500 میلی‌ثانیه است. در صورت قطع اتصال، SDK از آخرین وضعیت کش شده تا زمان بازیابی کانال استفاده می‌کند. این تضمین می‌کند که برنامه با تنظیمات به‌روز در لحظه قطع ارتباط به کار خود ادامه دهد.

پنل مدیریت LaunchDarkly یک رابط بصری برای ایجاد و مدیریت پرچم‌ها فراهم می‌کند. پنل نشان می‌دهد وضعیت فعلی هر پرچم، تاریخچه تغییرات با حسابرسی از اینکه چه کسی و چه زمانی پیکربندی را تغییر داده و همچنین معیارهای استفاده. برای هر محیط می‌توان قوانین جداگانه تنظیم کرد — یک پرچم در staging می‌تواند 100% فعال و در production 5% فعال باشد.

مفاهیم کلیدی LaunchDarkly

Feature flag یک کلید نام‌گذاری شده با قوانین و اهداف است. پرچم‌ها می‌توانند از نوع boolean، multivariate و JSON باشند. Rules شرایط فعال‌سازی را تعیین می‌کنند: به عنوان مثال «فعال برای 10% کاربران Android 12 از آلمان». Segments کاربران را بر اساس نسخه OS، منطقه، مدل دستگاه و ویژگی‌های دلخواه گروه‌بندی می‌کند.

هر پرچم دارای محیط‌هایی است: development، staging و production. این امکان آزمایش یک ویژگی جدید در یک محیط ایزوله قبل از فعال‌سازی برای کاربران واقعی را فراهم می‌کند. قوانین محیط‌ها به طور مستقل پیکربندی می‌شوند — یک پرچم می‌تواند در staging فعال و در production غیرفعال باشد.

SDK و ادغام با برنامه‌های موبایل

LaunchDarkly SDKهای بومی برای Android، iOS، React Native و Flutter ارائه می‌دهد. هر SDK به حداقل پیکربندی نیاز دارد: کلید SDK و شناسه کاربر. کتابخانه به طور خودکار اتصال، کش و مدیریت خطاها را انجام می‌دهد.

راه‌اندازی Android SDK

برای اتصال، یک نمونه LDClient در Application.onCreate ایجاد می‌شود. مشتری پیکربندی را با کلید موبایل و زمینه کاربر دریافت می‌کند. پس از راه‌اندازی، برنامه در هر جایی از کد با روش boolVariation تغییرات پرچم را فراخوانی می‌کند.

kotlin
class MyApplication : Application() {
    private lateinit var ldClient: LDClient

    override fun onCreate() {
        super.onCreate()
        val config = LDConfig.Builder("mobile-key-abc123")
            .build()
        val user = LDUser.Builder("user-unique-id")
            .build()
        ldClient = LDClient.init(this, config, user)
    }
}

خواندن و اشتراک تغییرات پرچم

پس از راه‌اندازی، بررسی پرچم با یک روش انجام می‌شود. BoolVariation مقدار را مطابق با قوانین پرچم برمی‌گرداند. اگر SDK نتواند پیکربندی را دریافت کند، از مقدار پیش‌فرض استفاده می‌شود. روش boolVariationDetail همچنین دلیل پذیرش این مقدار توسط پرچم را برمی‌گرداند.

kotlin
val ldClient = LDClient.get()
val showNewFeature = ldClient.boolVariation(
    "new-checkout-flow",
    false
)
if (showNewFeature) {
    showNewCheckoutScreen()
} else {
    showLegacyCheckoutScreen()
}

تست A/B و استقرار مرحله‌ای از طریق LaunchDarkly

تست A/B در LaunchDarkly از طریق پرچم‌های multivariate پیاده‌سازی می‌شود. به هر گزینه درصدی از ترافیک اختصاص داده می‌شود — مثلاً 50% کاربران صفحه قدیمی (گزینه A) و 50% صفحه جدید (گزینه B) را می‌بینند. پلتفرم کاربر را ثبت کرده و تضمین می‌کند که همیشه در یک گروه قرار می‌گیرد.

استقرار مرحله‌ای درصد کاربرانی که به ویژگی دسترسی دارند را به تدریج افزایش می‌دهد. برنامه معمول: 1% — روز اول، 5% — روز دوم، 25% — روز سوم، 100% — بعد از یک هفته. در صورت کشف خطا، پرچم فوراً برای همه غیرفعال می‌شود. LaunchDarkly با Amplitude، Mixpanel و Google Analytics برای ردیابی معیارهای هر تغییر ادغام می‌شود.

معیارها و آزمایش‌ها

پلتفرم یک سیستم آزمایش داخلی ارائه می‌دهد که به طور خودکار اهمیت آماری تفاوت‌های بین گزینه‌ها را محاسبه می‌کند. معیارهای موجود: تبدیل، retention، تعداد جلسات، خطاها و رویدادهای سفارشی. نتایج در پنل با تجسم فواصل اطمینان نمایش داده می‌شوند. آزمایش‌ها را می‌توان هم روی ترافیک production و هم روی بخش‌های جداگانه کاربران اجرا کرد.

ادغام LaunchDarkly با پلتفرم‌های تحلیلی یک مزیت دیگر است. داده‌های پرچم‌ها به طور خودکار به Amplitude، Mixpanel، Google Analytics یا خط لوله داده شخصی از طریق Data Export API ارسال می‌شوند. این امکان ایجاد گزارش‌هایی درباره تأثیر هر ویژگی بر معیارهای کلیدی برنامه را فراهم می‌کند. LaunchDarkly همچنین از webhookها برای اطلاع‌رسانی به سیستم‌های خارجی درباره تغییر وضعیت پرچم‌ها پشتیبانی می‌کند.

نمونه ادغام LaunchDarkly SDK در Android

بیایید چرخه کامل را بررسی کنیم: افزودن وابستگی، راه‌اندازی و بررسی پرچم برای تله‌متری خرابی‌ها. ویژگی باید فقط برای تست‌کنندگان فعال باشد، نه برای کاربران واقعی. LaunchDarkly SDK برای Android از طریق Maven Central در دسترس است. نسخه 5.x از Kotlin Coroutines و Jetpack Compose برای دریافت واکنشی به‌روزرسانی‌های پرچم پشتیبانی می‌کند.

برای برنامه‌های iOS، LaunchDarkly پشتیبانی از Swift Package Manager و CocoaPods را ارائه می‌دهد. Swift SDK از async/await برای راه‌اندازی ناهمگام و Combine framework برای اشتراک تغییرات استفاده می‌کند. هر دو SDK (Android و iOS) از همگام‌سازی پس‌زمینه و کش در حافظه محلی برای کار در حالت آفلاین پشتیبانی می‌کنند.

وابستگی در build.gradle

groovy
// app/build.gradle
dependencies {
    implementation "com.launchdarkly:launchdarkly-android-sdk:5.2.0"
}

بررسی پرچم در CrashReporter

در کلاس CrashReporter پرچم crash-reporting-enabled را بررسی می‌کنیم. اگر پرچم فعال است برای کاربر فعلی — ارسال گزارش‌های خرابی را شروع می‌کنیم. SDK به طور خودکار وضعیت جدید را هنگام تغییر در سرور دریافت می‌کند، اما برای راه‌اندازی یک بررسی یکباره کافی است.

kotlin
class CrashReporter {
    fun init() {
        val client = LDClient.get()
        if (client.boolVariation("crash-reporting-enabled", false)) {
            Crashlytics.start()
        }
    }
}

سناریوهای معمول و ضدالگوها

سناریوهای موفق: مدیریت جریان پرداخت با غیرفعال‌سازی فوری در صورت خرابی ارائه‌دهنده، استقرار مرحله‌ای تغییرات UI با نظارت بر معیارها، شخصی‌سازی محتوا بر اساس بخش‌ها. طبق وبلاگ رسمی LaunchDarkly، تیم‌ها زمان بازیابی پس از خطاها را از ساعت به دقیقه کاهش می‌دهند.

ضدالگوها: استفاده از پرچم‌ها برای منطق شرطی دائمی (پرچم‌ها موقتی هستند)، ذخیره اسرار در ویژگی‌های پرچم، ایجاد قوانین همپوشان. توصیه: پس از اتمام استقرار، پرچم را از کد حذف کنید — این کار از بدهی فنی و پیچیدگی پایگاه کد جلوگیری می‌کند. یک اشتباه رایج دیگر استفاده از پرچم‌ها به عنوان کلیدهای طولانی‌مدت است که پس از تثبیت ویژگی هرگز از کد حذف نمی‌شوند.

استراتژی صحیح مدیریت پرچم‌ها شامل برنامه حذف برای هر پرچم جدید است. LaunchDarkly ارائه می‌دهد ابزارهای داخلی برای تشخیص پرچم‌های استفاده‌نشده — اگر SDK بیش از 30 روز مقدار پرچم را بررسی نکرده باشد، پرچم استفاده‌نشده در نظر گرفته می‌شود. چنین پرچم‌هایی در پنل علامت‌گذاری می‌شوند و می‌توان آن‌ها را با خیال راحت از کد حذف کرد.

چه زمانی باید از LaunchDarkly صرف نظر کرد

برای پروژه‌های کوچک با یک تیم، LaunchDarkly ممکن است بیش از حد باشد — یک conditional ساده در کد یا Firebase Remote Config کافی است. پلتفرم را انتخاب کنید زمانی که بخش‌بندی پیچیده، حسابرسی تغییرات، آزمایش‌های A/B یا مدیریت چندتیمی پرچم‌ها مورد نیاز است. برای استارتاپ‌ها و پروژه‌های MVP، LaunchDarkly یک طرح رایگان Starter با محدودیت در تعداد پرچم‌ها و MAU ارائه می‌دهد.

سازگاری LaunchDarkly با ابزارهای موجود یک معیار مهم انتخاب است. پلتفرم ادغام می‌شود با Jira، Slack، PagerDuty، Datadog و سایر سرویس‌ها از طریق webhookها و API. تیم‌هایی که قبلاً از این ابزارها استفاده می‌کنند، بدون زیرساخت اضافی برای نظارت و اعلان‌ها در هنگام تغییر وضعیت پرچم‌ها، یکپارچگی یکپارچه دریافت می‌کنند. LaunchDarkly همچنین از ارائه‌دهنده Terraform برای مدیریت پرچم‌ها به عنوان کد (Flags as Code) پشتیبانی می‌کند — این امکان ذخیره پیکربندی پرچم در Git و انجام code review قبل از اعمال را فراهم می‌کند.

سوالات متداول

هزینه LaunchDarkly چقدر است؟

LaunchDarkly یک طرح Freemium با محدودیت در تعداد پرچم‌ها و MAU ارائه می‌دهد. طرح‌های تجاری برای تیم‌ها از 150 دلار در ماه شروع می‌شود و شامل پرچم‌های نامحدود، حسابرسی تغییرات و ادغام با Jira و Slack است.

چه SDKهای موبایلی توسط LaunchDarkly پشتیبانی می‌شوند؟

پلتفرم از بیش از 40 SDK پشتیبانی می‌کند، از جمله Android بومی (Kotlin/Java)، iOS (Swift/Objective-C)، React Native و Flutter. همه SDKهای موبایل از طریق Streaming API با ذخیره در حافظه محلی کار می‌کنند.

آیا می‌توان از LaunchDarkly برای تست A/B استفاده کرد؟

بله، LaunchDarkly دارای سیستم آزمایش داخلی با پرچم‌های multivariate، توزیع ترافیک و محاسبه خودکار اهمیت آماری است. ادغام با Amplitude، Mixpanel و Google Analytics پشتیبانی می‌شود.

SDK در صورت عدم وجود اینترنت چگونه کار می‌کند؟

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

LaunchDarkly چه تفاوتی با Firebase Remote Config دارد؟

LaunchDarkly تست A/B، پرچم‌های چند متغیره، بخش‌بندی پیچیده، حسابرسی تغییرات و SDK برای زبان‌های سرور را ارائه می‌دهد. Firebase Remote Config ساده‌تر و رایگان است، اما از آزمایش‌های چندمتغیره و حسابرسی دقیق پشتیبانی نمی‌کند.

خلاصه

  • LaunchDarkly — پلتفرم مدیریت پرچم‌های عملکردی برای استقرار ایمن قابلیت‌های جدید در برنامه‌های موبایل
  • Feature flag از انواع boolean، multivariate و JSON با قوانین فعال‌سازی بر اساس بخش‌های کاربران پشتیبانی می‌کند
  • SDK برای Android، iOS، React Native و Flutter پرچم‌ها را از طریق اتصال SSE در زمان واقعی همگام‌سازی می‌کنند
  • استقرار مرحله‌ای خطرات را کاهش می‌دهد — پرچم در صورت تشخیص مشکل بدون بازگردانی نسخه فوراً غیرفعال می‌شود
  • تست A/B بر روی پرچم‌های multivariate با توزیع خودکار و گزارش آماری ساخته شده است
  • بخش‌بندی بر اساس نسخه OS، منطقه، مدل دستگاه و ویژگی‌ها امکان تنظیم دقیق فعال‌سازی را فراهم می‌کند
  • توصیه می‌شود پرچم‌های استفاده‌شده را برای جلوگیری از انباشت منطق شرطی از کد حذف کنید

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید