ENEnglish
RUРусский
ZH中文
ESEspañol
PTPortuguês
TRTürkçe
ARالعربية
FAفارسی
FRFrançais
UKУкраїнська
IDBahasa Indonesia
HIहिन्दी
ENEnglish
RUРусский
ZH中文
ESEspañol
PTPortuguês
TRTürkçe
ARالعربية
FAفارسی
FRFrançais
UKУкраїнська
IDBahasa Indonesia
HIहिन्दी

اشتباهات توسعه برنامه‌های مینی تلگرام (TMA) و چگونگی اجتناب از آن‌ها

با رایج‌ترین اشتباهات در توسعه برنامه‌های مینی تلگرام (TMA) آشنا شوید و نحوه جلوگیری از آن‌ها، از مسائل UX و عملکرد تا مشکلات امنیتی و خطاهای API تلگرام را یاد بگیرید.
AdsGram banner showing common Telegram Mini App development mistakes, including ignoring the Telegram SDK and heavy initial loading, alongside a broken mini app screen and a mobile-first layout marked as the correct approach.

خلاصه

  • بیشتر اشتباهات توسعه برنامه‌های مینی تلگرام ناشی از این است که برنامه مینی به‌عنوان یک وب‌سایت عادی در نظر گرفته می‌شود، نه به عنوان یک WebView که در پنج کلاینت مختلف تلگرام اجرا می‌شود.
  • مهم‌ترین اصلاح بررسی initData در سرور شما و رد کردن بارهای قدیمی از طریق auth_date; initDataUnsafeهرگز نباید برای مجوز اعتماد کرد.
  • اشکالات طراحی معمولاً به 100vh و مناطق ایمن گمشده بازمی‌گردند، نه به چارچوب‌های CSS.
  • API ربات 10.2 (14 ژوئیه 2026) متدهای Mini App را که از یک منبع غیر از دامنه خود Mini App فراخوانی می‌شود، مسدود می‌کند، بنابراین تنظیمات مبتنی بر iframe و چند دامنه شکسته می‌شود مگر اینکه جریان بازطراحی شود.
  • اشکالات درآمدزایی به همان اندازه اشکالات کد هزینه‌بر هستند: تبلیغاتی که قبل از اولین لحظه ارزش قرار می‌گیرند، debug: true که به تولید ارسال شده و منطق پاداش تنها مشتری همگی درآمد را کاهش می‌دهند یا تقلب را دعوت می‌کنند.

این مقاله به بررسی اشتباهاتی می‌پردازد که بیشتر در Mini Apps تولیدی ظاهر می‌شوند — مجوز، نمایاب، ذخیره‌سازی، نسخه‌بندی، پارامترهای راه‌اندازی و درآمدزایی — و راه‌حل‌های دقیق برای هر کدام را ارائه می‌دهد، با نام‌های متد دقیق و نسخه‌های API ربات مربوطه. در انتها یک جدول تشخیص و یک چک‌لیست پیش از انتشار وجود دارد که می‌توانید قبل از هر استقراری اجرا کنید.

چرا اشتباهات توسعه Mini App تلگرام اتفاق می‌افتد

یک Mini App درون یک اپلیکیشن اجرا می‌شود که شما کنترل آن را ندارید. این موضوع سه محدودیت ایجاد می‌کند و تقریباً هر باگی که در زیر ذکر شده است از یکی از آن‌ها ناشی می‌شود.

  • مشتری یک مرورگر نیست.WebView تلگرام در iOS رفتار متفاوتی با Android دارد و هر دو با تلگرام دسکتاپ متفاوت هستند. ذخیره‌سازی، مدیریت کیبورد و حرکات جایی هستند که بیشترین تفاوت را دارند.
  • هر مشتری از نسخه API متفاوتی پشتیبانی می‌کند.کاربری که از نسخه قدیمی تلگرام استفاده می‌کند، متدی که شما فراخوانی کردید را ندارد و هیچ polyfill وجود ندارد.
  • تلگرام مالک رابط کاربری اطراف شماست.سربرگ، نوار پایینی، حرکت به سمت بسته شدن و فضای ایمن متعلق به تلگرام هستند، بنابراین طراحی شما باید دور آن‌ها کار کند.

خواندن مستندات رسمی Mini Apps تلگرامیک بار کافی نیست — تاریخچه تغییرات Bot APIجایی است که تغییرات اساسی قرار می‌گیرد و در سال 2026 چندین بار جابجا شده است.

اشتباهات امنیتی و داده‌های اولیه

رایج‌ترین خطای امنیتی این است که داده‌هایی که از طرف کلاینت می‌آید را به عنوان مدرکی برای هویت در نظر بگیرید. Telegram یک بارنامه امضا شده به شما می‌دهد؛ تأیید بر عهده شماست.

1. اعتماد به initDataUnsafe بدون بررسی امضا

initDataبارنامه خام و امضا شده‌ای است که Telegram به یک Mini App ارسال می‌کند؛ initDataUnsafeهمان داده‌ای است که برای راحتی از قبل تجزیه شده است. کلمه Unsafe در نام یک هشدار است، نه یک برچسب. مستندات Telegram به وضوح بیان می‌کند که داده‌ها باید قبل از استفاده در سرور ربات تأیید شوند.

چگونه از آن جلوگیری کنیم:خالص را ارسال کنیدinitDataرشته را به سمت backend خود ارسال کنید و آن را آنجا تأیید کنید. رشته داده-برگشتی را از تمام جفت‌های کلید-مقدار به جز hashساخته و به ترتیب الفبایی مرتب کنید و با خط‌های جدید پیوند دهید؛ یک کلید مخفی با HMAC-SHA256(bot_token, "WebAppData")تعیین کنید؛ محاسبه کنید HMAC-SHA256(data_check_string, secret_key)؛ مقایسه کنید با hashدر زمان ثابت. هرگز توکن ربات را به کلاینت ارسال نکنید و هرگز یک شناسه کاربری که به عنوان پارامتر درخواست ساده می‌رسد را قبول نکنید.

اگر شخص ثالثی نیاز دارد که یک راه‌اندازی را بدون نگه‌داشتن توکن ربات شما تأیید کند، از مسیر امضای Ed25519 استفاده کنید که درمرجع داده‌های اولیه اپلیکیشن‌های کوچک تلگرامشرح داده شده است. یکی از دام‌های رایج در پیاده‌سازی در اینجا: امضا به صورت base64url-encoded بدون پدینگ است، بنابراین چندین زبان نیاز دارند که شما= کاراکترها را قبل از رمزگشایی بازیابی کنید.

2. عدم بررسی سن auth_date

یک امضای معتبر ثابت می‌کند که بار(payload) از تلگرام آمده است، نه اینکه یک لحظه پیش رسیده باشد. بدون بررسی انقضا، یک رشتهinitData ضبط شده به طور نامحدود کار می‌کند.

چگونه از آن جلوگیری کنیم: هر بار Payloadی را که auth_date آن بیشتر از یک بازه مشخص باشد — ۲۴ ساعت یک پیش‌فرض رایج است و بازه‌های کوتاه‌تر برای اپلیکیشن‌هایی که پول یا ارز درون‌برنامه‌ای جابه‌جا می‌کنند مناسب است. Payload تأیید شده را یک بار برای توکن نشست خود مبادله کنید و هر درخواست بعدی را با آن توکن احراز هویت کنید.

۳. نگهداری توکن‌های نشست در localStorage

localStorage در WebView تلگرام قابل اعتماد نیست. کارشناسانی که درباره Mini Apps تولیدی می‌نویسند گزارش می‌دهند که در iOS و برخی از نسخه‌های دسکتاپ لینوکس ممکن است اصلاً حفظ نشود، بنابراین یک راه‌اندازی مجدد می‌تواند آن را پاک کند و نشست را با خود ببرد.

چگونه از آن جلوگیری کنیم: بر اساس هدف، به جای عادت، ذخیره‌سازی را انتخاب کنید.

ذخیره‌سازی

جایی که داده‌ها زندگی می‌کنند

مناسب برای

محدودیت‌ها

localStorage

WebView، به ازای هر مشتری

وضعیت UI موقت

ممکن است در iOS و برخی نسخه‌های دسکتاپ پاک شود

CloudStorage (Bot API 6.9+)

فضای ابری تلگرام، به ازای هر کاربر و هر ربات

تنظیماتی که کاربر را در سرتاسر دستگاه‌ها دنبال می‌کند

۱۰۰۲۴ مورد برای هر کاربر، کلیدها ۱–۱۲۸ کاراکتر، مقادیر تا ۴۰۹۶ کاراکتر

DeviceStorage (Bot API 9.0+)

دستگاه، دائمی

کش و تنظیمات مربوط به دستگاه

بین دستگاه‌ها همگام‌سازی نشده است

SecureStorage (Bot API 9.0+)

دستگاه، منطقه امن

مقادیر محلی حساس

همگام‌سازی نشده؛ دسترسی بستگی به نسخه کلاینت دارد

پشتیبان شما

سرور شما

نشست‌ها، موجودی‌ها، حقوق

نیاز به تأیید شده initData

هر چیزی که تعیین می‌کند کاربر چه چیزهایی را مال خود دارد یا چه درآمدی کسب می‌کند باید روی سرور شما باشد.

4. فراخوانی متدهای Mini App از دامنه‌ای متفاوت

این یکی جدید است و برنامه‌های کاری را از بین برد. Bot API 10.2 که در 14 ژوئیه 2026 منتشر شد، امنیت Mini App را با ممنوعیت استفاده از متدهای Mini App از مبداهای مختلف از دامنه اصلی Mini App تقویت کرد.

چطور از آن اجتناب کنیم: هر صفحه‌ای که Telegram.WebApp را فراخوانی می‌کند، در دامنه‌ای ثبت شده برای Mini App حفظ کنید. اگر بخشی از جریان شما بر روی یک ارائه‌دهنده پرداخت، صفحه‌ی یک شریک یا یک iframe جاسازی شده قرار دارد، فراخوانی‌های API تلگرام را به منبع خود برگردانده و نتایج را از طریق backend خود بین زمینه‌ها منتقل کنید. قبل از اینکه فرض کنید هنوز کار می‌کند، کامل جریان را بر روی یک کلاینت به‌روز آزمایش کنید.

اشتباهات طراحی و نمای دید

اشکالات نمای دید، قابل مشاهده‌ترین دسته هستند — یک CTA قطع شده بلافاصله جلب توجه می‌کند — و بیشترین قابلیت پیشگیری را دارند.

1. استفاده از 100vh به جای ارتفاع نمای تلگرام

در موبایل، یک Mini App به‌عنوان یک ورق پایین باز می‌شود که کاربر می‌تواند آن را بکشاند.100vh به یک نمای مرورگر اشاره دارد که با ناحیه‌ی قابل مشاهده مطابقت ندارد، بنابراین محتوا زیر خط یا زیر UI خود تلگرام قرار می‌گیرد.

چگونه از آن پرهیز کنیم: تماس expand() در شروع، سپس اندازه‌ی چیدمان خود را از viewportHeight و viewportStableHeight تنظیم کنید. از viewportStableHeight برای هر چیزی که نباید پرش کند استفاده کنید — این مقدار حالت‌های انتقالی را در طول انیمیشن‌های کشیدن و صفحه کلید نادیده می‌گیرد، در حالی که viewportHeight به‌طور مداوم به‌روزرسانی می‌شود. به رویداد تغییر viewport مشترک شوید و فقط در مقادیر پایدار دوباره‌سازی کنید.

2. نادیده گرفتن حاشیه‌های منطقه ایمن

نسخه 8.0 Bot API دو شیء حاشیه‌ای متمایز معرفی کرد و مخلوط کردن آن‌ها رایج است.safeAreaInset مناطق سیستمی مانند برش و نشان‌گر خانه را توصیف می‌کند.contentSafeAreaInset فضایی را توصیف می‌کند که توسط عناصر رابط کاربری تلگرام اشغال شده است.

چگونه از آن جلوگیری کنید: هر دو را بکار ببرید. حاشیه‌های سیستمی از برش‌های سخت‌افزاری محافظت می‌کنند؛ حاشیه‌های محتوا سرصفحه شما را از سرصفحه تلگرام دور نگه می‌دارند. در حالت تمام‌صفحه — اضافه شده در همان انتشار Mini Apps 2.0 — اینserts مهم‌تر هستند، نه کمتر، چون Telegram دیگر آن فضا را برای شما رزرو نمی‌کند.

3. فعال نگه داشتن سوایپ‌های عمودی در بازی‌ها

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

چگونه از این موضوع جلوگیری کنیم: تماس با disableVerticalSwipes() (Bot API 7.7+) در صفحه‌هایی با ژست‌های سفارشی و دوباره فعال کردن آن در جایی که اسکرول استاندارد انتظار می‌رود. این را با enableClosingConfirmation() (Bot API 6.2+) در هر صفحه‌ای که ورودی نادیده شده است همراه کنید.

۴. ساخت یک دکمه بازگشت سفارشی

پیکان بازگشت شما با ناوبری Telegram و دکمه بازگشت سخت‌افزاری اندروید رقابت می‌کند. کاربران دو کنترل بازگشت دریافت می‌کنند که رفتار متفاوتی دارند.

چگونه از آن جلوگیری کنیم: استفاده کنید از BackButton (Bot API 6.1+)، آن را به روتر خود متصل کرده و به‌هنگام تغییر مسیرها نمایش یا پنهانش کنید. یک پشته ناوبری داشته باشید، نه دو تا.

اشتباهات عملکردی روی دستگاه‌های واقعی

بیشتر ترافیک Mini App از گوشی‌های میان‌رده و اقتصادی اندروید می‌آید. جلسه با یک ضربه در یک چت آغاز می‌شود، پس کاربران انتظار دارند که به سرعت یک پیام باز شود.

  • یک بسته سنگین اولیه. مسیرها را تقسیم کنید، هر چیزی که برای صفحه اول لازم نیست را به تعویق بیندازید و بار اولیه را به عنوان معیار اصلی عملکرد در نظر بگیرید.
  • بستگی به SSR دارد.API های Telegram به window نیاز دارند، بنابراین رندر سمت سرور نمی‌تواند به آن‌ها دسترسی داشته باشد. پروژه‌های Next.js این مشکل را در اولین تماس Telegram در داخل یک کامپوننت سرور تجربه می‌کنند؛ منطق وابسته به Telegram را در کامپوننت‌های کلاینت نگه دارید و تا آماده شدن SDK یک اسکلت نمایش دهید.
  • دستگاه‌های دارای بودجه انیمیشن نمی‌توانند رندر کنند. انیمیشن‌های پیچیده به طور قابل توجهی در سخت‌افزار پایین‌رده در داخل یک WebView افت می‌کنند. فقط transform و opacity را انیمیت کنید و در هنگام ظهور افت فریم، اثرات را کاهش دهید.
  • هیچ وضعیت بارگذاری وجود ندارد.Telegram به توسعه‌دهندگان این امکان را می‌دهد که صفحه بارگذاری Mini App را سفارشی‌سازی کنند؛ یک نقاشی اولیه که به جای فضای خالی یک اسکلت را نمایش می‌دهد به طور قابل توجهی خروج‌های زودهنگام را کاهش می‌دهد.

اشتباهات نسخه و پلتفرم

صدا زدن یک متد که ساخت Telegram کاربر آن را پشتیبانی نمی‌کند به طور خاموش شکست می‌خورد یا خطا ایجاد می‌کند و هر دو نتیجه به عنوان یک اپلیکیشن شکسته به نظر می‌رسند. حل این مشکل یک حداقل نسخه به علاوه‌ی کنترل صریح است.

چگونه از آن جلوگیری کنیم: حداقل نسخه‌ای که اپلیکیشن شما از Bot API پشتیبانی می‌کند را تعیین کنید، همه چیز بالای آن حد را با isVersionAtLeast() (Bot API 6.1+) کنترل کنید و یک نسخه کارا برای هر ویژگی کنترل شده ارائه دهید.

ویژگی

متد / فیلد

Bot API

Fallback اگر در دسترس نیست

ناوبری به عقب

BackButton

6.1

دکمه هدر درون اپلیکیشن

تأیید بستن

enableClosingConfirmation()

6.2

ذخیره خودکار پیش‌نویس‌ها

تنظیمات ابری

CloudStorage

6.9

تنظیمات سمت سرور

کنترل سوایپ

disableVerticalSwipes()

7.7

مناطق کشیدن را محدود کنید

تمام صفحه

requestFullscreen()

8.0

حالت گسترش یافته

منطقه امن

safeAreaInset, contentSafeAreaInset

8.0

پد ثابت

پایداری محلی

DeviceStorage, SecureStorage

9.0

جلسه سرور

انتخاب چت

requestChat()

9.6

لینک به اشتراک گذاری

تست فقط در وب تلگرام بیشتر این مشکلات را پنهان می‌کند. نسخه کاندیدای انتشار را در iOS، Android و حداقل یک کلاینت دسکتاپ اجرا کنید. برای اشکال‌زنی در دستگاه، Chrome DevTools اندروید و Safari Web Inspector iOS را پوشش می‌دهند؛ زمانی که هیچ‌کدام در دسترس نیست، کنسولی درون برنامه مانند Eruda خطاهای زمان اجرا را بدون نیاز به کابل نشان می‌دهد.

Mini Apps یک پارامتر شروع واحد دریافت می‌کنند، startapp و تیم‌ها اغلب یک سیستم لینک عمیق طراحی می‌کنند که فرض می‌کند بیشتر است.

چطور از این موضوع جلوگیری کنیم: چندین مقدار را در یک startapp رشته با یک جداکننده که شما کنترل می‌کنید رمزگذاری کنید — ref__campaign__level یک الگوی رایج است — و پس از اعتبارسنجی، آن را در سمت کاربر تجزیه کنید. پارامتر را از initDataقبل از تخصیص یک ارجاع یا اعطای یک پاداش، بر روی سرور این کار را انجام دهید، زیرا یک پارامتر راه‌اندازی به تنهایی آسان است که جعل شود. مدیریت لینک عمیق که این مرحله را رد می‌کند، یک منبع متداول تقلب ارجاعات در Telegram Mini Apps است.

اشتباهات ادغام تبلیغات

ادغام تبلیغات جایی است که کد قوی اغلب با تصمیمات ضعیف محصول ملاقات می‌کند. این خطاها اپلیکیشن را خراب نمی‌کنند — بلکه eCPM را کاهش داده، جوایز را مختل می‌کنند یا در بررسی مناسب نمی‌شوند. اگر در حال انتخاب یک رویکرد هستید، معرفی ما به Telegram Mini Apps و فرصت‌های درآمدزاییقبل از اینکه کد ادغام را بنویسید، فرمت‌های موجود را پوشش می‌دهد.

1. نمایش تبلیغ خیلی زود

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

چگونه از آن جلوگیری کنیم:لحظات را نقشه‌برداری کنید که کاربر چیزی را کامل کرده است — یک سطح، یک کار، یک ادعای — و تبلیغات را در آن مرزها قرار دهید. فرمت‌های پاداش‌دهی بهترین عملکرد را دارند زمانی که پاداش چیزی باشد که کاربر قبلاً می‌خواهد: یک زندگی اضافه، یک سرعت بخشیدن، یک مانده اضافی.

2. روشن نگه‌داشتن حالت اشکال‌زدایی در تولید

SDK AdsGram یک debug flag را قبول می‌کند که تبلیغات آزمایشی را نشان می‌دهد و لاگ‌ها را چاپ می‌کند. مستندات AdsGram به صراحت می‌گویند که باید حذف شود یا به false برای انتشار تنظیم شود. نمایش‌های آزمایشی هیچ آماری تولید نمی‌کنند و تماس‌های پاداش را تحریک نمی‌کنند، بنابراین یک debug: true باعث می‌شود که اپلیکیشنی بسازید که خوب به نظر برسد اما هیچ درآمدی نداشته باشد.

3. فراخوانی init() در هر بار نمایش تبلیغ

window.Adsgram.init({ blockId }) یک AdController. مستندات AdsGram اشاره می‌کند که راه‌اندازی یکبار در هر blockId اتفاق می‌افتد و تماس‌های مکرر همان نمونه کنترلر را بازمی‌گرداند.

چگونه از این کار جلوگیری کنیم: یکبار کنترلر را در شروع برنامه ایجاد کنید، ارجاع را نگه دارید و در هر بار قرارگیری show() را فراخوانی کنید. یک ادغام معمولی پاداش‌دهنده به شکل زیر است:

<script src="https://sad.adsgram.ai/js/sad.min.js"></script>

const AdController = window.Adsgram.init({ blockId: "your-block-id" });

AdController.show()
.then(() => {
// تبلیغ تا انتها دیده شد — از سرور خود بخواهید که پاداش را اعطا کند
})
.catch((result) => {
// تبلیغ ناموفق بود یا زودتر بسته شد — چیزی اعطا نکنید
console.warn(result);
});

4. عدم مدیریت خطاهای show()

show() وقتی تبلیغ قابل پخش نیست یا کاربر زودتر خارج می‌شود، رد می‌کند. یک ادغام بدون هیچ catch() یا پاداش‌هایی را که نباید اعطا کنید یا کاربر را در حالت بارگذاری نگه می‌دارد.

چگونه از آن جلوگیری کنیم: مسیر رد را به‌صورت صریح مدیریت کنید و به رویدادهای SDK مشترک شوید — onStart، onSkip، onReward، onComplete، onError، onBannerNotFound، onNonStopShow، onTooLongSession. onBannerNotFound در زمان راه‌اندازی، باید به این توجه کنید: معمولاً به این معناست که ظرفیت برای آن جغرافیا یا بلاک پایین است و نه اینکه کد اشتباه است. همیشه یک مسیر غیر تبلیغاتی به جایزه یا صفحه بعدی داشته باشید تا یک تبلیغ گم‌شده هرگز به بن‌بست تبدیل نشود.

5. اعطای جایزه فقط در سمت کاربر

اگر جایزه توسط کد کاربر نوشته شده باشد، می‌تواند دوباره پخش شود. این همان نوع خطا است که به initDataUnsafe اعتماد می‌کند.

چگونه می‌توان از آن جلوگیری کرد: از طریق بک‌اند خود جوایز را اعطا کنید. AdsGram همچنین یک پست‌بک سرور به سرور برای ناشران بزرگ‌تر ارائه می‌دهد: برنامه‌هایی با بیش از 50,000 کاربر میانگین روزانه می‌توانند یک URL جایزه پیکربندی کنند و AdsGram یک درخواست GET حاوی telegramIdبعد از پاداش سمت کاربر. نقطه پایانی باید درخواست HTTPS GET را در پورت 443 بپذیرد و شامل یک [userId]جای‌گذاری، به عنوان مثال https://example.com/reward?userid=[userId]. پست‌ بک در حالت اشکال‌زدایی فعال نمی‌شود.

6. قرار دادن تبلیغات در جایی که کاربران نمی‌توانند آنها را ببینند

قوانین قرارگیری در مورد دید، نه طراحی هستند. در پلتفرم AdsGram، یک تکرار بعد از دو ثانیه مشاهده مداوم با بلوکی که حداقل 50% قابل مشاهده است، شمارش می‌شود.

چگونه از آن جلوگیری کنیم:هرگز یک بلوک تبلیغاتی را در داخل یک ظرف جمع‌شده، خارج از صفحه یا با ارتفاع صفر نرسانید، بلوک‌ها را در همان ناحیه صفحه انباشته نکنید و در حالی که Mini App به حداقل رسیده، نمایش را فعال نکنید. AdsGram اجازه می‌دهد تا 10 بلوک تبلیغات در هر برنامه وجود داشته باشد که این مقدار کافی است تا قرارگیری‌ها را بر اساس زمینه جدا کنید — یکی برای اتمام سطح، یکی برای پاداش روزانه، یکی برای دیوار وظایف — به جای اینکه یک بلوک را در همه جا فعال کنید.

AdsGram

در ۳ مرحله کسب درآمد کنید

  1. 01اتصال
  2. 02تبلیغات را قرار دهید
  3. 03پرداخت دریافت کنید
اکنون درآمدزایی کنید

اشتباهات در راه‌اندازی و نظارت

بیشتر رد درخواست‌ها به این دلیل است که اپلیکیشن ناتمام است، نه به این دلیل که قانونی را نقض می‌کند. در پلتفرم AdsGram، یک Mini App باید در دسترس باشد و به درستی در طول فرآیند ارزیابی کار کند، که معمولاً در طول هفته در عرض ۴ تا ۶ ساعت و در آخر هفته‌ها در عرض ۶ تا ۱۰ ساعت به اتمام می‌رسد.

خطاهای رایج در مرحله راه‌اندازی:

  • ارسال یک نسخه که پشت دیوار ورود یا فهرست سفید است، به طوری که ارزیابان یک صفحه خطا را مشاهده کنند.
  • جریان‌های معیوب فقط در یک پلتفرم، اغلب به دلیل مدیریت صفحه کلید iOS یا طراحی دسکتاپ.
  • انتظارات پرداخت بدون خواندن قوانین مشخص شده است: AdsGram به طور پیش‌فرض در شبکه TON با USDT پرداخت می‌کند، با امکان انتقال‌های USDT TRC20 و فیات، حداقل برداشت ۱۰۰ دلار و پردازش در عرض ۲۴ ساعت در روزهای هفته و تا ۴۸ ساعت در آخر هفته‌ها.
  • عدم وجود آنالیز بر روی قیف تبلیغاتی، که مشخص می‌کند پر کردن کم از یک جایگزینی معیوب چه تفاوتی دارد. اگر قبل از ادغام شبکه‌ها را مقایسه می‌کنید، مقایسه AdsGram و Monetag آنچه باید اندازه‌گیری کنید را مشخص می‌کند.

جدول علائم و علت‌ها

علامت

علت احتمالاً

چه چیزی باید بررسی شود

صفحه خالی فقط در iOS

localStorageپاک شده، جلسه از دست رفته

جلسه را به backend منتقل کنید؛ جریان init را بررسی کنید

"نمی‌توان پارامترهای راه‌اندازی را بازیابی کرد"

اپلیکیشن خارج از Telegram باز شد

بررسی محیط به همراه محیط شبیه‌سازی برای توسعه محلی

دکمه زیر برش پنهان شده است

مناطق امن به کار گرفته نشدند

safeAreaInset, contentSafeAreaInset

چیدمان در زمان باز شدن کیبورد به هم می‌ریزد

اندازه از viewportHeight

به viewportStableHeight

برنامه در حین کشیدن بسته می‌شود

ضربه‌های عمودی فعال شده

disableVerticalSwipes()

روش در برخی دستگاه‌ها خطا می‌دهد

مشتری زیر حداقل نسخه

isVersionAtLeast() به اضافه fallback

API تلگرام پس از یک به‌روزرسانی متوقف شد

تماس از یک منبع غیر اصلی انجام شد

محدودیت منبع Bot API 10.2

تبلیغات نمایش داده می‌شوند اما آمار صفر باقی می‌ماند

حالت اشکال‌زدایی در تولید

debug: false

نرخ دیده شدن به طور قابل توجهی پایین‌تر از نمایش‌ها

مسدود شده یا زیر میزان قابل مشاهده بودن

نمایش مداوم ۲ ثانیه‌ای، ۵۰٪ دیده شدن

جوایز اعطا شده بدون مشاهده تبلیغ

منطق پاداش مشتری‌محور

انتقال به پشت صحنه، افزودن URL پاداش S2S

رفع این مشکلات قبل از راه‌اندازی هزینه کمتری از ردیابی آن‌ها از طریق تیکت‌های پشتیبانی دارد و این چیزی است که یک Mini App که به‌خوبی کار می‌کند را از یکی که کاربران را نگه می‌دارد و درآمدزایی می‌کند متمایز می‌سازد. زمانی که پایه فنی پایدار باشد، Monetization اپلیکیشن‌های کوچک تلگرامتبدیل به یک کار پیکربندی به جای یک عملیات نجات — و اطلاعات عمیق‌تر در مورد فرمت‌ها و تقاضا در نمای کلی ما از پتانسیل درآمدزایی و تبلیغات Telegram Mini Apps.

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

  1. چرا Telegram Mini App من باز نمی‌شود؟
    علت‌های رایج شامل یک init ناموفق، یک خطای بدون مدیریت قبل از اولین رندر، یا از دست رفتن جلسه با ذخیره‌سازی کلاینت است. بررسی کنید که URL اپ در دسترس باشد روی HTTPS، اینکه SDK قبل از هر تماس با API تلگرام آماده باشد، و اینکه هیچ کدی به localStorageبستگی نداشته باشد که بعد از راه‌اندازی مجدد باقی بماند. اگر در اندروید باز می‌شود اما در iOS نه، همان نسخه را با Safari Web Inspector آزمایش کنید.
  2. چطور می‌توانم یک Telegram Mini App را در مرورگر باز و آزمایش کنم؟
    خارج از تلگرام هیچ پارامتر راه‌اندازی وجود ندارد، بنابراین SDK گزارش می‌دهد که نمی‌تواند آنها را بازیابی کند. برای کار محلی، یک بررسی محیطی انجام دهید و محیط تلگرام را شبیه‌سازی کنید تا اپ در یک مرورگر عادی رندر شود. سرور توسعه خود را از طریق یک تونل مانند VS Code dev tunnel یا ngrok در دسترس قرار دهید، آن URL HTTPS را در BotFather تنظیم کنید و اپ را از ربات باز کنید.
  3. چگونه می‌توانم داده‌های اولیه را در یک Telegram Mini App تأیید کنم؟
    داده‌های خام initData را به سرور خود ارسال کنید. رشته داده‌سنجی را از تمام جفت‌های کلید–مقدار به جز hash بسازید، آن‌ها را به ترتیب حروف الفبا مرتب کنید و با خط جدید عضو کنید، و سپس یک راز با HMAC-SHA256(bot_token, "WebAppData") استخراج کنید، HMAC-SHA256(data_check_string, secret) را محاسبه کنید و آن را با hash. بارگذاری‌هایی را که auth_date خارج از زمان مجاز شماست رد کنید، سپس توکن جلسه خود را صادر کنید.
  4. چگونه می‌توانم یک Mini App تلگرام را در iOS و Android اشکال‌زدایی کنم؟
    از Chrome DevTools با اشکال‌زدایی از راه دور USB برای Android و Safari Web Inspector برای iOS استفاده کنید. وقتی هیچ‌یک در دسترس نیست — از تلفن یک تستر، یک ساخت روی دستگاه کسی دیگر — یک کنسول درون‌برنامه‌ای مانند Eruda را جاسازی کنید تا خطاهای زمان اجرا بدون نیاز به کابل قابل مشاهده باشند. هر باگی را بر روی یک کلاینت واقعی تلگرام بازتولید کنید، زیرا تلگرام وب بیشتر رفتارهای خاص WebView را پنهان می‌کند.
  5. آیا می‌توانم از localStorage در Mini App تلگرام استفاده کنم؟
    در داخل WebView تلگرام، localStorage ممکن است در iOS و برخی از نسخه‌های دسکتاپ پایدار نماند، بنابراین یک راه‌اندازی مجدد می‌تواند آن را پاک کند. از CloudStorage برای تنظیمات کاربری که باید با حساب کاربری همراه باشد، DeviceStorage یا SecureStorage از Bot API 9.0 برای نگهداری محلی، و backend خودتان برای نشست‌ها، موجودی‌ها و هرگونه حق دسترسی.
  6. آیا Bot API 10.2 Mini Apps موجود را خراب می‌کند؟
    بله، Bot API 10.2 که در ۱۴ ژوئیه ۲۰۲۶ منتشر شد، استفاده از متدهای Mini App را از مبدأهایی غیر از دامنه اصلی Mini App ممنوع می‌کند. اپلیکیشن‌هایی که Telegram.WebApp متدها را از iframe جاسازی‌شده، صفحه شریک، یا دامنه ثانویه فراخوانی کنند، در کلاینت‌های بروزرسانی‌شده با شکست مواجه خواهند شد. تمام تماس‌های API تلگرام را در دامنه ثبت‌شده نگه‌دارید و داده‌ها را از طریق backend خود با طرف‌های ثالث رد و بدل کنید.
Elizaveta Bydanova
Elizaveta Bydanova
سرپرست تیم توسعه کسب و کار, AdsGram

پلتفرم خودکار همه‌جانبه برای تبلیغات مؤثر

امروز سفر تبلیغاتی خود را با ما آغاز کنید.