<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://developer.tapsell.ir/fa/blog</id>
    <title>Tapsell Blog</title>
    <updated>2026-06-09T10:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://developer.tapsell.ir/fa/blog"/>
    <subtitle>Tapsell Blog</subtitle>
    <icon>https://developer.tapsell.ir/fa/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Taproll — پخش‌کننده سریع‌تر تبلیغات برای اندروید]]></title>
        <id>https://developer.tapsell.ir/fa/blog/introducing-taproll</id>
        <link href="https://developer.tapsell.ir/fa/blog/introducing-taproll"/>
        <updated>2026-06-09T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[Taproll یک کتابخانه اندرویدی برای نمایش تبلیغات ویدیویی VAST و VMAP با استفاده از Viewهای native است. این کتابخانه جایگزینی برای Google IMA SDK محسوب می‌شود که بدون نیاز به اینترنت طراحی شده و در زمان قطعی نت هم به پخش تبلیغات ادامه می‌دهد.]]></summary>
        <content type="html"><![CDATA[<p><strong>Taproll</strong> یک کتابخانه اندرویدی برای نمایش تبلیغات ویدیویی VAST و VMAP با استفاده از Viewهای native است. این کتابخانه جایگزینی برای <a href="https://developers.google.com/interactive-media-ads">Google IMA SDK</a> محسوب می‌شود که بدون نیاز به اینترنت طراحی شده و در زمان قطعی نت هم به پخش تبلیغات ادامه می‌دهد.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="چرا-taproll">چرا Taproll؟<a href="https://developer.tapsell.ir/fa/blog/introducing-taproll#%DA%86%D8%B1%D8%A7-taproll" class="hash-link" aria-label="لینک مستقیم به چرا Taproll؟" title="لینک مستقیم به چرا Taproll؟">​</a></h2>
<p><a href="https://developers.google.com/interactive-media-ads">Google IMA SDK</a> انتخاب پیش‌فرض برای پخش تبلیغات VAST/VMAP در اندروید است، اما یک ضعف اساسی دارد: برای دریافت و نمایش تبلیغات به اتصال مداوم اینترنت نیاز دارد. در زمان قطعی اینترنت — که در ایران بارها تجربه شده — پخش تبلیغات مبتنی بر IMA کاملاً از کار می‌افتد. علاوه بر این، IMA برای شرایط شبکه ایران طراحی نشده، <a href="https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/localization">پشتیبانی پیش‌فرض از زبان فارسی ندارد</a>، و کنترل محدودی روی رابط کاربری تبلیغات می‌دهد. Taproll برای حل تمام این مشکلات ساخته شده.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="بدون-نیاز-به-اینترنت">بدون نیاز به اینترنت<a href="https://developer.tapsell.ir/fa/blog/introducing-taproll#%D8%A8%D8%AF%D9%88%D9%86-%D9%86%DB%8C%D8%A7%D8%B2-%D8%A8%D9%87-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%86%D8%AA" class="hash-link" aria-label="لینک مستقیم به بدون نیاز به اینترنت" title="لینک مستقیم به بدون نیاز به اینترنت">​</a></h3>
<p>Taproll برای نمایش تبلیغات نیازی به اینترنت ندارد. IMA با قطع شدن اتصال از کار می‌افتد — Taproll درآمد تبلیغاتی شما را بدون توجه به وضعیت شبکه حفظ می‌کند.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="عملکرد-بالا">عملکرد بالا<a href="https://developer.tapsell.ir/fa/blog/introducing-taproll#%D8%B9%D9%85%D9%84%DA%A9%D8%B1%D8%AF-%D8%A8%D8%A7%D9%84%D8%A7" class="hash-link" aria-label="لینک مستقیم به عملکرد بالا" title="لینک مستقیم به عملکرد بالا">​</a></h3>
<p>Taproll مبتنی بر حداقل امکانات، سبک‌سازی، حجم کم، بیلد سریع‌تر و تداخل نسخه کمتر است. نتایج بنچمارک نشان می‌دهد که شروع به کار و نمایش اولین فریم تبلیغ pre-roll حدود <strong>۱.۹ برابر سریع‌تر</strong> از IMA است — تقریباً <strong>۱.۴ ثانیه در مقابل ۲.۶۵ ثانیه</strong> در شرایط یکسان.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="کنترل-ساده-رابط-کاربری">کنترل ساده رابط کاربری<a href="https://developer.tapsell.ir/fa/blog/introducing-taproll#%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D8%B3%D8%A7%D8%AF%D9%87-%D8%B1%D8%A7%D8%A8%D8%B7-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%DB%8C" class="hash-link" aria-label="لینک مستقیم به کنترل ساده رابط کاربری" title="لینک مستقیم به کنترل ساده رابط کاربری">​</a></h3>
<p>می‌توانید ظاهر تبلیغات را از طریق یک فایل XML با <code>XmlOverlayAdapter</code> شخصی‌سازی کنید، یا با پیاده‌سازی اینترفیس <code>AdOverlay</code> کنترل بیشتری روی دکمه رد کردن، تایمر شمارش معکوس و نمای هدر داشته باشید. المان‌های رابط کاربری با ویجت‌های استاندارد اندروید (<code>TextView</code> یا کلاس‌های مشتق از آن) ساخته می‌شوند — نه Viewهای سفارشی مبهم.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="وابستگی-سبک">وابستگی سبک<a href="https://developer.tapsell.ir/fa/blog/introducing-taproll#%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C-%D8%B3%D8%A8%DA%A9" class="hash-link" aria-label="لینک مستقیم به وابستگی سبک" title="لینک مستقیم به وابستگی سبک">​</a></h3>
<p>تنها وابستگی Taproll، ExoPlayer (Media3) است. بدون Google IMA SDK، بدون Google Play Services — یک کتابخانه سبک که حجم کمی به بیلد شما اضافه می‌کند.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="توسعه-فعال">توسعه فعال<a href="https://developer.tapsell.ir/fa/blog/introducing-taproll#%D8%AA%D9%88%D8%B3%D8%B9%D9%87-%D9%81%D8%B9%D8%A7%D9%84" class="hash-link" aria-label="لینک مستقیم به توسعه فعال" title="لینک مستقیم به توسعه فعال">​</a></h3>
<p>Taproll فعالانه توسعه داده می‌شود و مدام به‌روزرسانی می‌شود. نیاز به ویژگی جدید دارید یا باگی پیدا کرده‌اید؟ <a href="https://github.com/tapsellorg/Discussion/">یک بحث باز کنید</a> — تیم توسعه بازخوردهای کاربران را بررسی و اولویت‌بندی می‌کند.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="نحوه-یکپارچهسازی">نحوه یکپارچه‌سازی<a href="https://developer.tapsell.ir/fa/blog/introducing-taproll#%D9%86%D8%AD%D9%88%D9%87-%DB%8C%DA%A9%D9%BE%D8%A7%D8%B1%DA%86%D9%87%D8%B3%D8%A7%D8%B2%DB%8C" class="hash-link" aria-label="لینک مستقیم به نحوه یکپارچه‌سازی" title="لینک مستقیم به نحوه یکپارچه‌سازی">​</a></h2>
<p>Taproll از طریق <code>TaprollAdLoader</code> با ExoPlayer یکپارچه می‌شود که اینترفیس <code>AdsLoader</code> مربوط به Media3 را پیاده‌سازی می‌کند. با متصل کردن آن از طریق <code>DefaultMediaSourceFactory.setLocalAdInsertionComponents()</code>، تبلیغات به صورت خودکار در نقاط cue پخش می‌شوند بدون آنکه نیاز به کد اضافه برای مدیریت تبلیغات باشد.</p>
<div class="language-kotlin codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-kotlin codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// راه‌اندازی ExoPlayer — تنظیمات حداقلی</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> adsLoader </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> TaprollAdLoader</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Builder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">context</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setAdEventListener</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> adEvent </span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/* مدیریت رویداد */</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setAdErrorListener</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> adError </span><span class="token operator" style="color:#393A34">-&gt;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">/* مدیریت خطا */</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">build</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">val</span><span class="token plain"> player </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> ExoPlayer</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">Builder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">context</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setMediaSourceFactory</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">DefaultMediaSourceFactory</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">context</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">setLocalAdInsertionComponents</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> adsLoader </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> playerView</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">build</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="کپی به کلیپ‌بورد" title="کپی" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="شروع-به-کار">شروع به کار<a href="https://developer.tapsell.ir/fa/blog/introducing-taproll#%D8%B4%D8%B1%D9%88%D8%B9-%D8%A8%D9%87-%DA%A9%D8%A7%D8%B1" class="hash-link" aria-label="لینک مستقیم به شروع به کار" title="لینک مستقیم به شروع به کار">​</a></h2>
<p>Taproll بخشی از <strong><a href="https://developer.tapsell.ir/fa/docs/sdk">Tapsell Mediation SDK</a></strong> است و کاملاً با آن یکپارچه است. <a href="https://developer.tapsell.ir/fa/docs/sdk/platforms/android/adnetworks/tapsellLegacy">اداپتر legacy</a> یکپارچه‌سازی با Taproll را به پروژه خود اضافه کنید:</p>
<div class="language-groovy codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-groovy codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// build.gradle</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">dependencies </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    implementation </span><span class="token string" style="color:#e3116c">'ir.tapsell.mediation.adapter:legacy-taproll:$tapsellVersion'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="کپی به کلیپ‌بورد" title="کپی" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>برای راهنمای کامل راه‌اندازی و جزئیات یکپارچه‌سازی با ExoPlayer، به <a href="https://developer.tapsell.ir/fa/docs/sdk/platforms/android/ad-formats/preroll#play-with-taproll">مستندات Taproll</a> و <a href="https://github.com/tapsellorg/TapsellMediation-AndroidSample">اپلیکیشن نمونه</a> سر بزنید.</p>]]></content>
        <author>
            <name>Farhad Beigirad</name>
            <uri>https://github.com/beigirad</uri>
        </author>
        <author>
            <name>Morteza Nedaei</name>
            <uri>https://github.com/mortezanedaei</uri>
        </author>
        <category label="taproll" term="taproll"/>
        <category label="instream-ads" term="instream-ads"/>
        <category label="pre-roll" term="pre-roll"/>
        <category label="Tapsell" term="Tapsell"/>
        <category label="Android" term="Android"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[معرفی مخزن تپسل برای توسعه‌دهندگان اندروید]]></title>
        <id>https://developer.tapsell.ir/fa/blog/tapsell-android-maven</id>
        <link href="https://developer.tapsell.ir/fa/blog/tapsell-android-maven"/>
        <updated>2026-03-31T10:00:00.000Z</updated>
        <summary type="html"><![CDATA[ما Maven تپسل را معرفی کرده‌ایم — یک مخزن Maven اختصاصی و میرور بسته‌ها که روی maven.tapsell.ir میزبانی می‌شود — تا توسعه‌دهندگان اندروید بتوانند SDK های تپسل و تمام وابستگی‌های آن‌ها را به شکلی سریع و پایدار دریافت کنند، بدون اینکه با محدودیت نرخ یا مشکلات اتصال به مخازن خارجی مواجه شوند.]]></summary>
        <content type="html"><![CDATA[<p>ما <strong>Maven تپسل</strong> را معرفی کرده‌ایم — یک مخزن Maven اختصاصی و میرور بسته‌ها که روی <code>maven.tapsell.ir</code> میزبانی می‌شود — تا توسعه‌دهندگان اندروید بتوانند SDK های تپسل و تمام وابستگی‌های آن‌ها را به شکلی سریع و پایدار دریافت کنند، بدون اینکه با محدودیت نرخ یا مشکلات اتصال به مخازن خارجی مواجه شوند.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="چرا-maven-تپسل">چرا Maven تپسل؟<a href="https://developer.tapsell.ir/fa/blog/tapsell-android-maven#%DA%86%D8%B1%D8%A7-maven-%D8%AA%D9%BE%D8%B3%D9%84" class="hash-link" aria-label="لینک مستقیم به چرا Maven تپسل؟" title="لینک مستقیم به چرا Maven تپسل؟">​</a></h2>
<p>بسته‌های تپسل به تعدادی کتابخانه‌ی شخص ثالث وابسته هستند. دریافت همه‌ی آن‌ها از منابع خارجی پراکنده می‌تواند کند یا غیرقابل اعتماد باشد، به‌خصوص در محیط‌هایی با محدودیت شبکه. با میرور کردن همه چیز از طریق <code>maven.tapsell.ir</code>، مزایای زیر را به دست می‌آورید:</p>
<ul>
<li><strong>منبع واحد</strong> — SDK های تپسل و وابستگی‌هایشان از یک مکان ارائه می‌شوند.</li>
<li><strong>دانلود سریع‌تر</strong> — سرورها برای توسعه‌دهندگان منطقه بهینه‌سازی شده‌اند.</li>
<li><strong>قابلیت اطمینان بالاتر</strong> — دیگر خبری از خطاهای موقتی در زمان اختلال اینترنت نیست.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="افزودن-مخزن">افزودن مخزن<a href="https://developer.tapsell.ir/fa/blog/tapsell-android-maven#%D8%A7%D9%81%D8%B2%D9%88%D8%AF%D9%86-%D9%85%D8%AE%D8%B2%D9%86" class="hash-link" aria-label="لینک مستقیم به افزودن مخزن" title="لینک مستقیم به افزودن مخزن">​</a></h2>
<p>بسته به پیکربندی Gradle پروژه‌تان، آدرس Maven تپسل را به یکی از روش‌های زیر اضافه کنید:</p>
<div class="tabs-container tabList__CuJ"><ul role="tablist" aria-orientation="horizontal" class="tabs"><li role="tab" tabindex="0" aria-selected="true" class="tabs__item tabItem_LNqP tabs__item--active">settings.gradle (توصیه‌شده)</li><li role="tab" tabindex="-1" aria-selected="false" class="tabs__item tabItem_LNqP">build.gradle (قدیمی)</li></ul><div role="tabpanel" class="tabItem_Ymn6 margin-top--md"><div class="language-groovy codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-groovy codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// settings.gradle</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">dependencyResolutionManagement </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    repositoriesMode</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">set</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">RepositoriesMode</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">FAIL_ON_PROJECT_REPOS</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    repositories </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// مخزن تپسل</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        maven </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> url </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">uri</span><span class="token punctuation" style="color:#393A34">(</span><span class="token interpolation-string string" style="color:#e3116c">"https://maven.tapsell.ir"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">google</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token function" style="color:#d73a49">mavenCentral</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="کپی به کلیپ‌بورد" title="کپی" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div></div></div>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Kotlin DSL</div><div class="admonitionContent_BuS1"><p>اگر پروژه‌ی شما از Kotlin DSL (فایل‌های <code>.kts</code>) استفاده می‌کند، عبارت <code>uri("...")</code> در هر دو حالت Groovy و Kotlin DSL یکسان است.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="گامهای-بعدی">گام‌های بعدی<a href="https://developer.tapsell.ir/fa/blog/tapsell-android-maven#%DA%AF%D8%A7%D9%85%D9%87%D8%A7%DB%8C-%D8%A8%D8%B9%D8%AF%DB%8C" class="hash-link" aria-label="لینک مستقیم به گام‌های بعدی" title="لینک مستقیم به گام‌های بعدی">​</a></h2>
<p>پس از افزودن مخزن، راهنمای کامل راه‌اندازی SDK اندروید را دنبال کنید تا وابستگی تپسل را به ماژول اپلیکیشن خود اضافه کرده و SDK را مقداردهی اولیه کنید:</p>
<p><a href="https://developer.tapsell.ir/fa/docs/sdk/platforms/android/quick-start/#set-up-your-app">شروع سریع اندروید — راه‌اندازی اپلیکیشن</a></p>]]></content>
        <author>
            <name>Morteza Nedaei</name>
            <uri>https://github.com/mortezanedaei</uri>
        </author>
        <author>
            <name>Farhad Beigirad</name>
            <uri>https://github.com/beigirad</uri>
        </author>
        <category label="Tapsell" term="Tapsell"/>
        <category label="Android" term="Android"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[تمرین با هم فکر کردن]]></title>
        <id>https://developer.tapsell.ir/fa/blog/psd-intro</id>
        <link href="https://developer.tapsell.ir/fa/blog/psd-intro"/>
        <updated>2025-06-07T18:00:00.000Z</updated>
        <summary type="html"><![CDATA[تا مدت‌ها فکر می‌کردم یادگیری یعنی تنهاییِ عمیقِ غرق‌شدن در کتاب‌ها.]]></summary>
        <content type="html"><![CDATA[<p>تا مدت‌ها فکر می‌کردم یادگیری یعنی تنهاییِ عمیقِ غرق‌شدن در کتاب‌ها.
ولی از جایی به بعد، فهمیدم بعضی از مهم‌ترین سؤال‌های فنی رو فقط توی گفت‌وگو با بقیه می‌شه دید و پروروند.
از وقتی به تپسل پیوستم، یکی از چیزهایی که توی تیم برای من پررنگ بود، علاقه‌مندی جمعی به یاد گرفتن، بهبود و به اشتراک گذاشتن آموخته‌ها بود.
اون هم نه صرفاً در قالب ارائه‌های رسمی، بلکه در فضایی خودمونی و همراه با تعامل.
این شد که دوباره یاد دغدغه‌هایی افتادم که شاید مدتی پشت ددلاین‌ها گم شده بودن:
مثل اینکه کیفیت یه تصمیم طراحی چقدر می‌تونه مسیر یه پروژه رو عوض کنه، یا اصلاً «کد خوب» یعنی چی وقتی قراره توی یه تیم نوشته و نگه‌داری بشه؟
این شد که یکی از شب‌های خنک و دلچسب اردیبهشت که انسان رو برای زندگی بیشتر به وجد می‌آره، توی تاپیک <code>Knowledge Sharing</code> تیم، دو تا کتاب رو پیشنهاد دادم:</p>
<!-- -->
<div class="row"><div class="col col--6"><h3 class="text--center">Cryptography Engineering: Design Principles and Practical Applications</h3><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAYAAABGbhwYAAAACXBIWXMAAAsTAAALEwEAmpwYAAABkElEQVR4nBXB0U8ScQDA8d8/Wi9mbVFBOFCahZMoccuX1oOPzkypSQZ2s0MxI+AA4UBAOTnCIDwKuc4GFrr4tj4fMZcqsVKosV1rslg8YSl7jFRpcj684r/LvyNGIxD2D0Wur2cZ38hij6g8i+WYiaRYy2oc9iy0rkXDGiDGpQK+WBm3tM8jKcNEJMu8rODaSPMiU6F02uLw9AxxS8owuZVjQlK4/TbNwkeV5/EktlAG22YB6VgnWq0jxoK7BKKfWEzFGYuouHaK+DeT2NYTTEYPWMtr7Bw1EPdCezjlPLPxHM6oyv33CtNyHkcoyULigJclHev3JSIQjnJjReLaqz0cqzFm38jceS1zc1nm6fY+S0qRhtFGOKc8OGf8eHwB7nq8uL0+7N7HTD2ZZ9o/h+PBQ1xuN+Jrt8NWoUpOb5GoVDFMk6BSIpg/Iq23COermL9MhDW84HO9TblzzreehdHvs6yUiehtVOMnkmYwuBoizD99drUTyoZF83uPerfDakolXK6hNH/wrvSFs4sB/wA6JGCOH1qOyAAAAABJRU5ErkJggg==&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="482" height="522"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/fa/assets/ideal-img/book_philosophy_of_software_design.d580c8a.482.png" srcset="/fa/assets/ideal-img/book_philosophy_of_software_design.d580c8a.482.png 482w" width="482" height="522"></noscript></div></div><div class="col col--6"><h3 class="text--center">Philosophy of Software Design</h3><div style="background-size:cover;background-repeat:no-repeat;position:relative;background-image:url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAANCAYAAACQN/8FAAAACXBIWXMAAAsTAAALEwEAmpwYAAABwUlEQVR4nBXK308SAQDA8XsMuDu4O+4H9yPgEATyIPEHJDcRUIeIZVS0tFK0LatNUxvrIcea+tJLrc36c7+tz/NHkKQUsuQhSy6i5BCJ2IixNLFIhti9LFI0hxIvIkhiirjsEY2k8P2HvN5/x+jFmMODDxyNT/l48pXO2j6CJDnEojZi1CEIQqbTG75cfmN69YPzs2tub36z93KCYKfyVINHWGaJbKZBszEirB/TDj8TNs5Yb09oNS8QdD3H5sYOi7UOht7AMZ6Q846oFM9Zrk6pV76zVLlCMIwCnc6A7f6IcnEX33tDbe6CcOGabv0XvZW/9Jp3CK4bsLY6oN0aEpRHzPqH1OcntJZu6dZ/shXesb36B0FTCyTVEra5iG1t4FqPmbm/Ryn3niB/SqVwSbUwQVASBXStjGMuY5ktdK2Laz7F9w7IZ44pZE8o+p/+xxmUeB4jWUPXV1ASIZa+jZd6RsZ5he+9ZSY9RlCVHK5dwbUX0NQaifgiSWUDS9vBMXbxzCGuOUQwzVkG/eesd4aoaoAszqEkmiTjmxjKAFPbwVT7CHIiTdqrkE7Po6gPECNFZHEJTWpjKT2MRA9V7vAP9bfPSVAWoI4AAAAASUVORK5CYII=&quot;)"><svg style="width:100%;height:auto;max-width:100%;margin-bottom:-4px" width="415" height="522"></svg><noscript><img style="width:100%;height:auto;max-width:100%;margin-bottom:-4px;position:absolute;top:0;left:0" src="/fa/assets/ideal-img/book_cryptography_engineering.13f8069.415.png" srcset="/fa/assets/ideal-img/book_cryptography_engineering.13f8069.415.png 415w" width="415" height="522"></noscript></div></div></div>
<p></p>
<p>خوشبختانه پیشنهاد با استقبال خوبی مواجه شد، و مشخص شد این دغدغه، نه فقط یک دغدغه‌ی شخصی، که یک دغدغه‌ی تیمیه. با مشورت بچه‌های تیم، تصمیم گرفتیم مطالعه‌ی کتاب دوم رو شروع کنیم.
قرار شد هر هفته بخشی از کتاب رو بخونیم و یک جلسه‌ی هفتگی داشته باشیم برای بحث و گفت‌وگو درباره‌ی اون بخش.</p>
<p>اما چرا این کتاب رو انتخاب کردیم؟ چند دلیل داشتیم:</p>
<p><strong>۱. ساختن یک روتین سبک و منظم برای مطالعه:</strong> شاید این روتین بتونه کمک کنه از دام کمال‌گرایی نجات پیدا کنیم؛ اینکه برای به اشتراک‌گذاری یا یادگیری، لازم نیست همیشه موضوع خیلی پیچیده یا عجیبی مطرح بشه.</p>
<p><strong>۲. زبان ساده و روان کتاب:</strong> باعث می‌شد هم خوندنش آسون‌تر باشه، هم گفت‌وگو راجع بهش.</p>
<p><strong>۳. تمرکز بر مسائل بنیادی ولی مهم:</strong> کتاب ابزار یا تکنیک خاصی یاد نمی‌ده، ولی یک دید خوبی می‌ده که می‌تونه در تصمیم‌های کوچک فنی تأثیرگذار باشه. مثلاً اینکه اگر بشه یه قطعه کد رو به دو روش نوشت، کدوم روش احتمالاً پایدارتر، خواناتر یا قابل‌نگهداری‌تره؟</p>
<p><strong>۴. نبود جزییات فنی پیچیده:</strong> خوندنش زمان زیادی نمی‌برد و همین باعث می‌شه برای شروع یک حلقه‌ی مطالعه جمعی گزینه‌ی خوبی باشه. اگر تجربه‌ی خوبی بود، می‌تونیم در ادامه سراغ موضوعات عمیق‌تر هم بریم.</p>
<p><strong>۵. نزدیکی مثال‌های کتاب به زبان‌های جاوا و سی:</strong> که باعث می‌شه مثال‌ها ملموس‌تر باشن، چون بخش زیادی از کدهای ما هم به جاوا و کاتلین نوشته شدن.</p>
<p><strong>۶. هم‌زمانی با نیاز تیم به بازبینی کد:</strong> با توجه به عمر پروژه و روندهای اخیر، برخی تسک‌ها مربوط به بازنگری در بخش‌هایی از کد بودن. این کتاب می‌تونست دید بهتری برای انجام این بازبینی‌ها بهمون بده.</p>
<p>امیدواریم این تجربه‌ی جمعی، فارغ از نتیجه‌ی نهایی، بتونه برامون شروعی باشه برای بیشتر فکر کردن به طراحی نرم‌افزار، بهتر دیدن کدهایی که می‌نویسیم، و شنیدن صداهای مختلف در مورد مسائل فنی روزمره‌ای که شاید تا حالا از کنارشون بی‌تفاوت رد می‌شدیم.</p>
<p>تیم ما مشتاقه که بخش‌هایی از نتیجه‌ی این جلسات رو در بلاگ شرکت منتشر کنه، شاید نه فقط برای مستندسازی مسیرمون، بلکه برای به اشتراک گذاشتن چیزهایی که فکر می‌کنیم برای دیگر تیم‌ها هم مفید یا الهام‌بخش باشن.</p>]]></content>
        <author>
            <name>Sajede Talebi</name>
        </author>
        <category label="Tapsell" term="Tapsell"/>
        <category label="Knowledge Sharing" term="Knowledge Sharing"/>
    </entry>
</feed>