بلاگ

چند نکته‌ی امنیتی برای اپلیکیشن‌های پی‌اچ‌پی

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

روتِ وبِ خود را به فایل index و assetها محدود کنید!

در پی‌اچ‌پی مدرن، فایل index.php که دروازه‌ی ورود به اپلیکیشن شماست را به علاوه‌ی فایل‌های asset در روت قرار می‌دهید؛ فایل index.php پکیج‌های Composer را لود می‌کند و پس از آن به اجرای کدهای شما برای رسیدن به نتیجه‌ی مورد نظر می‌پردازد. فایل‌های config و مواردی از این قبیل نباید در این قسمت وجود داشته باشند و تنها فایل‌های ایستا (static) را در این محل قرار دهید.

مترجم: ساختار پروژه‌ی لاراولی به همین شکل است؛ فایل index.php در public قرار دارد و پکیج‌ها و اپلیکیشنی که توسعه‌دهنده نوشته، همگی از دایرکتوری پیش از public لود می‌شوند.

نمایش خطاها را غیر فعال کنید!

در php.ini می‌توان با display_errors، پی‌اچ‌پی را وادار کرد تا خطاهایی که در حین اجرا رخ می‌دهند را نمایش دهد. خطاهای نشان‌داده‌شده می‌توانند حاوی اطلاعات محرمانه و کوئری‌های دیتابیس باشند که دیدن آنها توسط کاربران می‌تواند خطرناک باشد و امنیت وب‌سایت را تهدید کند، پس در حالت production باید غیر فعال باشند.

در فایل php.ini، به تنظیم این قابلیت به صورت زیر بپردازید:

display_errors = Off 
display_startup_errors = Off

اما خطاها را از کجا بفهمیم؟ می‌توانید به شکل زیر عمل کنید:

log_errors = 1
error_log = /var/log/php-error.log

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

مترجم: در فریم‌ورک لاراول، گزینه‌ی APP_DEBUG در فایل env. مسئول این بخش است و اگر فعال باشد، کدهای شما هم قابل رؤیت هستند!

از password_hash استفاده کنید!

هرگز کلمات عبور کاربران را همانطور که هستند، در دیتابیس ذخیره نکنید و در بعضی مقالات هم توصیه کرده‌اند که از md5 یا hash استفاده کنید، که این‌ها هم نباید استفاده شوند! در پی‌اچ‌پی از تابع password_hash برای هش‌کردن کلمات عبور استفاده می‌کنیم:

تابع password_hash یک رشته و یک الگوریتم (که PASSWORD_DEFAULT بهترین گزینه است) را می‌گیرد و کلمه‌ی عبور هش‌شده را برمی‌گرداند که بعداً در هنگام ورود کاربر، با فانکشن password_verify به بررسی و تطبیق آن می‌پردازیم و آن هم یک مقدار بولی (True یا False) را برمی‌گرداند و به این صورت از درستی کلمه‌ی عبوری که کاربر برای یک نام کاربری وارد کرده است، مطلع می‌شوید.

تمام ارتباطات را رمزگذاری کنید!

در اپلیکیشن پی‌اچ‌پی شما، ارتباطاتی با دیگر سرویس‌ها وجود دارد که می‌بایست رمزگذاری شود. وقتی از curl یا soap استفاده می‌کنید، https را فراموش نکنید تا از رمزگذاری اطلاعات رد و بدل شده مطمئن باشید. همچنین اگر از FTP استفاده می‌کنید، از یک فرم مطمئن مانند FTPS یا SFTP استفاده کنید.

از فریم‌ورک‌های قالب استفاده کنید!

همانطور که می‌دانید، کدهای PHP می‌توانند کدهای HTML را در درون خود داشته باشند، اما در حالت پیشفرض به بررسی خروجی‌ها نمی‌پردازد. اگر یکی از خروجی‌ها حاوی یک کد مخرب جاوااسکریپت باشد، در صفحه اجرا می‌شود و این می‌تواند امنیت کاربران و حتی مدیران را به خطر بیندازد! راه حل، استفاده از یک موتور قالب مانند Twig است که به طور خودکار به بررسی و پاکسازی خروجی‌ها می‌پردازد و دیگر فراموشی شما، حادثه‌ساز نخواهد شد!

مترجم: لاراول از موتور قالبی به نام Blade استفاده می‌کند و دیگر نیازی به استفاده از Twig و موتورهای قالب دیگر نخواهید داشت. کد زیر نشان می‌دهد که چگونه عمل پاکسازی خروجی را انجام دهیم دهیم و چطور گاهی از آن چشم‌پوشی کنیم:

{{ $title }}

{!! $title !!}

پیشنهاد می‌کنم که پست با htmlspecialchars انجام دهید و ندهید! را هم مطالعه کنید.


آنچه خواندید، ترجمه‌ای از مقاله‌ی زیر بود:

https://dev.to/restoreddev/security-tips-for-a-php-application-4e9a

نوشته چند نکته‌ی امنیتی برای اپلیکیشن‌های پی‌اچ‌پی اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

اخراج کارکنان آمازون به خاطر فروش اطلاعات محرمانه مشتریان

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

نوشته اخراج کارکنان آمازون به خاطر فروش اطلاعات محرمانه مشتریان اولین بار در دیجیاتو پدیدار شد.

گردآوری توسط ایده طلایی

من؟!چرا؟

همه ی ما آدما تو زندگیمون با یه سری مشکلات دست و پنجه نرم کردیم و دست و پنجه نرم می کنیم و دست و پنجه نرم خواهیم کرد!!!

همه ی ما می دونیم که روبرو شدن با مشکلات امری اجتناب ناپذیره همون طور که خود خدا هم در قرآن فرموده اند که :«لَقَدْ خَلَقْنَا الْإِنْسانَ فی‏ کَبَدٍ» «همانا ما انسان را در رنج و زحمت آفریدیم».

اما واکنش و طرز برخورد مردم در برابر مشکلات پیش آمده ممکنه یه تفاوت هایی داشته باشه.

افرادی هستند که با تمام وجود برای غلبه کردن به این مشکلات می جنگند و دست آخر هم موفق به شکست دادن مسائل پیش رو میشوند.در مقابل این دسته از افراد کسایی هم هستن(مثل بنده!)که به محض اینکه مشکلی گریبان گیر اونها میشه فورا رو به آسمون میکنن و میگن خدایا! این همه آدم تو این دنیاست. آخه چرا من؟

داستان ادیسون این مخترع بزرگ به خوبی می‌تواند این قانون زندگی را بیان کند:

وقتی او به خاطر فهم اندک از دروس , از مدرسه اخراج می‌شود و دوران نوجوانی را با کارهایی چون فروختن ساندویچ و آب نبات در کنار ریل قطار و یا سبزی فروشی می گذراند, و بعد از مدت کمی شنوایی خود را از دست می‌دهد اما با وجود این اتفاقات که می‌تواند هر کسی را به طور کلی از زندگی ناامید کند نه تنها ناامید نمیشود بلکه سعی و تلاش خود را روز به روز زیادتر میکند و میتواند نام خود را به عنوان یکی از بزرگترین مخترعین جهان ثبت کند.

ادیسون میتونست بعد از اخراج شدن از مدرسه و دچار شدن به مسائلی مثل بی پولی و ناشنوایی که میتونن دلایل کافی برای ناامیدی و دست روی دست گذاشتن باشن،دستهاشو رو به آسمون دراز کنه و با ملالت تمام بگه خدایا!چرا من؟

یکی دیگه از کسایی که در زندگی خود موفقیت‌های زیادی را بدست آورد استیو جابز است که چند ماهی بیشتر نیست که از مرگ او می‌گذرد, شخصیتی که در طول زندگانی خود با کوه مشکلات دست و پنجه نرم کرد, او در سخنرانی معروف خود در دانشگاه آکسفورد در مورد مشکلات و سختی‌های خود این گونه می‌گوید:

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

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

و سرانجام وی تمامی موفقیت‌ها ی خود را مدیون مشکلات و سختی‌ها و استقامتی که در قبال آنها داشت می‌داند.

وقتی ما علت وجودی سختی‌ها و مشکلات را در زندگی بررسی می‌کنیم , متوجه می‌شویم که زندگی تا حد زیادی برای ما شیرین و لذت بخش می‌شود, وقتی درک کنیم اوضاع از چه قرار است و قانون زندگی چه طور اجرا می‌شود, در حقیقت یک گام به جلو می‌داریم و سختی‌ها و مشکلات را با جان و دل می‌خریم و پذیرای آنها هستیم .

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

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

خیلی تلاش کردم که مفهوم این مطلب رنگ و بوی شعاری به خودش نگیره ولی فکر کنم که موفق نشدم!!!😂😂😂

دوست دارم آخر این مطلب داستانی رو بنویسم که رو خودم خیلی تاثیر گذاشت و انشاالله رو شما هم تاثیر خودش رو می ذاره.

بهترین و افسانه ای ترین تنیسور جهان آرتور اش هنگامی که برای جراحی قلب خود در بیمارستان بود.

با سهل انگاری پرستاران با تزریق خون آلوده به بیماری ایدز مبتلا شد.

طرفداران آرتور از سر تا سر جهان نامه هایی محبت آمیز برایش فرستادند.

یکی از دوستداران وی در نامه خویش نوشته بود: چرا خدا تو را برای ابتلا به چنین بیماری خطرناکی انتخاب کرده؟

آرتور اش در پاسخ این نامه چنین نوشت : در سر تا سر دنیا

بیش از پنجاه میلیون کودک به انجام بازی تنیس علاقه مند شده و شروع به آموزش می کنند.

حدود پنج میلیون از آن ها بازی را به خوبی فرا می گیرند.

از آن میان قریب پانصد هزار نفر تنیس حرفه ای را می آموزند.

و شاید پنجاه هزار نفر در مسابقات شرکت می کنند.

پنج هزار نفر به مسابقات تخصصی تر راه می یابند.

پنجاه نفر اجازه شرکت در مسابقات بین المللی ویمبلدون را می یابند.

چهار نفر به مسابقات نیمه نهایی راه می یابند.

و دو نفر به مسابقات نهایی

وقتی که من جام جهانی تنیس را در دست هایم می فشردم هرگز نپرسیدم که خدایا چرا من؟

و امروز وقتی که از این بیماری لاعلاج درد می کشم باز هم اجازه ندارم که از خدا بپرسم: چرا من؟

منابع: سایت بیتوته

https://www.beytoote.com/religious/sundries/high-god.html?m=1

قرآن کریم (سوره بلد آیه۳)

نوشته من؟!چرا؟ اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

Custom Snack Bar | سفارشی سازی اسنک بار

سلام دوستان
امیدوارم با این همه اتفاقات حال دل همتون خوب و غمتون کم باشه !21/11/1398
نمیخوام زیاد وقتتون رو با مقدمه و این حرفا بگیرم چون هم وقت طلاست هم اینکه شما نمیخونید 🙂


اسنک بار چیست ؟ | What is SnackBar

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


اسنک بار ساده !

قدم اول : فایل build.gradle پروژتون رو باز کنید و کد زیر رو بهش اضافه کنید .

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support:design:23.0.1'
}

قدم دوم : کد زیر Snackbar ای میسازه که فقط یک متن رو نمایش میده .

Snackbar snackbar = Snackbar.make(rootView, "This is our Snackbar Sample !!", Snackbar.LENGTH_LONG);
snackbar.show();

تابع make سه پارامتر به عنوان ورودی میگیره :
پارامتر اول : view مادر (لایوت نمایش دهنده اسنک بار) که قراره توی اون Snackbar رو نمایش بدیم
پارامتر دوم : متنی هست که میخوایم نمایش بدیم
سومین پارامتر : مدت زمانی هست که قراره snackbar به کاربرانمون نشون داده بشه :
LENGTH_LONG : مدت زمان زیاد
LENGTH_SHORT : مدت زمان کوتاه
LENGTH_INDEFINITE : تا زمانی که به وسیله کشیدن از صفحه خارج نشه ، نشون داده خواهد شد .

نکته : در مستندات گوگل توصیه شده که برای view اصلی (مادر) که قراره snackbar در اون نمایش داده بشه و به عنوان پارامتر اول به تابع make ارسال بشه از CoordinatorLayoutاستفاده کنید ، تا تمام قابلیت‌های پیش فرض snackbar مثل کشیدن برای از بین بردن ( swipe dissmiss ) و خارج شدن اتوماتیک از کنار صفحه قابل استفاده باشه

Action Button :
خب حالا فرض کنید به وسیله snackbarمیخوایم از کاربرامون یک تاییدیه بگیریم.

Snackbar snackbar = Snackbar.make(coordinatorLayout, "Message is deleted", Snackbar.LENGTH_LONG).setAction("UNDO", new View.Listener() {
@Override
public void (View view) {
Snackbar snackbar1 = Snackbar.make(coordinatorLayout, "Message is restored!", Snackbar.LENGTH_SHORT);
snackbar1.show();
}
});

snackbar.show();

توی بالا با استفاده از تابع setAction یک عملیات رو برای snackbar مون تعریف میکنیم تابع setAction دوتا ورودی میگیره ، اولی اسمی هست که میخوایم برای عملیاتمون نمایش بدیم و دومی یک Listener .

Simple Snack Bar


سفارشی سازی

خب وقتی مراحل بالا رو برید متوجه میشید که اسنک بارتون خیلی سادست و اصلا شبیه اون چیزی که توی توییتر و یا جیمیل ( یا جاهای دیگه ) نیست

Custom Snack Bar ( Twitter )

مثلا رنگ دلخواهتون نیست و یا گوشه هاش خمیده نیست ( corner radius ) یا کاملا چسبیده به اطراف…
برای این کار یه کلاس میسازم به اسم SnackBarHelper :

public class SnackBarHelper {

      public static void configSnackbar(Context context, Snackbar snack) {
      
      }
     
}

برای این کلاس یک کانستراکتور میسازم که بتونم Context و SnackBar رو بگیرم و روشون تغییرات رو اعمال کنم
قدم اول برای اضافه کردن Elevation به اسنک بارم میتونم توی کانستراکتورم این خط کد رو اعمال کنم :

public class SnackBarHelper {

       public static void configSnackbar(Context context, Snackbar snack) {
      ViewCompat.setElevation(snack.getView(), 6f);
      }
      
}

که دوتا پارامتر میگیره :
اول : ویو اسنک بار ما
دوم : مقدار Elevation

در ادامه میخوام چند تابع ( به نظرم من پرکاربرد ترینشون ) رو براتون بگم که تو این کلاس شما میتونید بعدا هرچی خواستین اضافه کنید :

تابع اول ( راست چین کردن | Set To Rtl )

این تابع برای فارسی زبان ها بیشتر کاربرد داره وقتی اسنک بار میسازید مسیج داخلش چپ چینه و برای فیکس کردن این موضوع از تابع زیر استفاده میکنیم:

private static void setToRtl(Snackbar snackbar) {
         ViewCompat.setLayoutDirection(snackbar.getView(), 
        ViewCompat.LAYOUT_DIRECTION_RTL);
 }

تابع دوم ( فاصله دادن از اطراف | Set Margin )

وقتی اسنک بار میسازید کلا چسبیده به اطراف و هیچ فاصله ای ( margin ) نداره برای فاصله دادن از اطراف از تابع زیر استفاده میکنیم :

private static void addMargins(Snackbar snack) {
         ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) 
         snack.getView().getLayoutParams();
         params.setMargins(12, 12, 12, Function.snackMargin);  // میتونید مقدار مارجین ها رو به مقدار دلخواه تغییر بدید
         snack.getView().setLayoutParams(params);
}

اون پارامتری که من نوشتم Function.snackMargin یه متغییریه که با تابعی که نوشتم و در اخر توضیح میدم متوجه میشه که کیبورد باز شده یا نه چون اسنک پشت کیبورد میره و معلوم نمیشه و ارتفاع کیبورد رو میگیره و به عنوان مارجین پایین بهش ست میشه .

تابع سوم ( Set Drawable )

توی این تابع شما میتونید هر drawable بهش بدید تا کاستومایز شما بشه
این Drawable منه :



     
     

و این هم تابع :

private static void setDrawable (Context context, Snackbar snackbar) {
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    snackbar.getView().setBackground(context.getDrawable(R.drawable.contianer_snackbar));
    }
    
}

تابع چهارم ( تغییر فونت | Set Type Face)

معمولا ما از فونت های خاص خودمون توی اپلیکیشن ها استفاده میکنیم خب اسنک بارمون هم که نمیشه فونت پیشفرض داشته باشه , برای اعمال فونت خاص خودمون از تابع زیر استفاده کنید :

private static void setTypeFace(Context context, Snackbar snackbar) {
    TextView tv = 
    (snackbar.getView()).findViewById(com.google.android.material.R.id.snackbar_text);
    TextView snackbarActionTextView = 
    snackbar.getView().findViewById(com.google.android.material.R.id.snackbar_action );
    Typeface font = 
    Typeface.createFromAsset(context.getAssets(),"fonts/IranSansRegular.ttf");
    Typeface bold =Typeface.createFromAsset(context.getAssets(), 
    "fonts/IranSansMedium.ttf");
    tv.setTypeface(font);
   snackbarActionTextView.setTypeface(bold);
   }

تابع پنجم ( تغییر رنگ دکمه اسنک بار )

وقتی برای اسنک بار دکمه میزارید بهتره که رنگشو عوض کنید تا کاربر متوجه بشه این فقط تکست نیست و یک عملی انجام میده :

private static void changeActionTextColor(Snackbar snackbar , Context context) {
     snackbar.setActionTextColor(context.getResources().getColor(R.color.colorWhite))
}

کد نهایی :

و همه تابع ها رو توی کانستراکتور صدا میزنیم :

public class SnackBarHelper {

public static void configSnackbar(Context context, Snackbar snack) {
        addMargins(snack);
        setRoundBordersBg(context, snack);
        setTypeFace(context, snack);
        setToRtl(snack);
        ViewCompat.setElevation(snack.getView(), 6f);
        changeActionTextColor(snack , context);
}
private static void setToRtl(Snackbar snackbar) {
       ViewCompat.setLayoutDirection(snackbar.getView(), 
        ViewCompat.LAYOUT_DIRECTION_RTL);
}

private static void changeActionTextColor(Snackbar snackbar , Context context) {      snackbar.setActionTextColor(context.getResources().getColor(R.color.colorWhite))
 }
 
 private static void addMargins(Snackbar snack) {
        ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) 
        snack.getView().getLayoutParams();
        params.setMargins(12, 12, 12, Funcations.SnackMargin);
        snack.getView().setLayoutParams(params);
}

private static void setRoundBordersBg(Context context, Snackbar snackbar) {
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {     
 snackbar.getView().setBackground(context.getDrawable(R.drawable.contianer_snackbar));
        }
  }
  
  private static void setTypeFace(Context context, Snackbar snackbar) {
        TextView tv =(snackbar.getView()).findViewById(com.google.android.material.R.id.snackbar_text);
        TextView snackbarActionTextView = snackbar.getView().findViewById(com.google.android.material.R.id.snackbar_action );
        Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/IranSansRegular.ttf");
        Typeface bold = Typeface.createFromAsset(context.getAssets(), "fonts/IranSansMedium.ttf");
         tv.setTypeface(font);
         snackbarActionTextView.setTypeface(bold);
         }
 }

My Final Snack Bar

تابع Keyboard Listener

از این تابع که یکمی بالاتر ازش حرف زدم برای باز بودن یا نبودن کیبورد استفاده میکنم که بتونم مقدار ارتفاعشو به عنوان مارجین پایین ست کنم به اسنک بارم :

public static boolean isKeyboardHidden = false;
public static int SnackMargin = 12;

public static void keyBoardListener(final Activity activity) {
        final View activityRootView = activity.findViewById(android.R.id.content);
        activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new 
        ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
                Rect rect = new Rect();
                activityRootView.getWindowVisibleDisplayFrame(rect);
                int heightRoot = activityRootView.getRootView().getHeight();
                int heightDiff = heightRoot - rect.bottom;
                
                if (heightDiff > dpToPx(activity, 200)) {
                
                     if (!isKeyboardHidden) {
                          isKeyboardHidden = true;
                          SnackMargin = heightDiff + 15;
                        }
                        
                 } else if (heightDiff < dpToPx(activity, 200)) {
                         if (isKeyboardHidden) {
                          isKeyboardHidden = false;
                          SnackMargin = 12;
                       }
                 }
           }
            });
    }

این تابع رو تو onCreate هر اکیتیوتی که قرار توش اسنک بار رو استفاده کنم صدا میزنم و بعد از متغییر snackMargin استفاده میکنم تا مارجین پایین رو ست کنم و اسنک بیاد بالای کیبورد
و در نهایت برای اعمال تغییرات روی اسنک بارم از کد زیر استفاده میکنم :

Snackbar snack = Snackbar.make(
       activity.findViewById(android.R.id.content),
       message,
       Snackbar.LENGTH_LONG
 );
 SnackBarHelper.configSnackbar(activity, snack);
 snack.show();

امیداورم که تونسته باشم دانش کوچیکم رو به شما دوستان انتقال داده باشم 3>
اگه جایی اشتباهی کردم یا گنگ بوده هم معذرت میخوام و هم من در خدمت شما هستم !

نوشته Custom Snack Bar | سفارشی سازی اسنک بار اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

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

کاربران ایرانی گوشی‌های سامسونگ روز گذشته یک اخطار در خصوص توقف سرویس فروشی در «گلکسی استور» دریافت کرده‌اند. این شرکت به کاربران ایرانی اعلام کرده است که از تاریخ ۲۵ فوریه (۶ اسفند) پشتیبانی از کارت‌های بانکی عضو شبکه شتاب به …

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

گردآوری توسط ایده طلایی

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

کمپانی هلندی فیلیپس از دو کمپانی فیت بیت و گارمین به دلیل نقض پتنت به نها‌دهای قانون‌گذاری فدرال شکایت کرده است. این کمپانی مدعی شده که دو شرکت تولید ‌کننده محصولات پایش سلامتی، به دارایی‌های معنوی آن احترام نگذاشته‌اند. کمیسیون بین‌المللی …

نوشته فیلیپس دو شرکت فیت بیت و گارمین را به دادگاه می‌کشاند اولین بار در دیجیاتو پدیدار شد.

گردآوری توسط ایده طلایی

یک سال زندان برای کار با موبایل؛ لایحه جنجالی استفاده نوجوانان از گوشی را ممنوع می‌کند

سنای آمریکا ماه گذشته سن مجاز خرید سیگار را به ۲۱ سال افزایش داد و حالا در سنای یکی از ایالت های این کشور لایحه مشابهی برای استفاده از موبایل ارائه شده است. سناتور «جان راجرز»، از حزب دموکرات لایحه ای …

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

گردآوری توسط ایده طلایی

نقص فنی در کیس هوشمند آیفون؛ اپل فراخوان تعویض رایگان داد

اپل روز جمعه اعلام کرد باتری کیس هوشمند خود که مابین دی تا آبان سال گذشته میلادی (ژانویه تا اکتبر) به فروش رفته را به صورت رایگان تعویض می‌کند. این برنامه تعویض شامل کیس‌های هوشمند گوشی‌های آیفون XS، XS MAX …

نوشته نقص فنی در کیس هوشمند آیفون؛ اپل فراخوان تعویض رایگان داد اولین بار در دیجیاتو پدیدار شد.

گردآوری توسط ایده طلایی

ستاد کل نیروهای مسلح: هواپیما بر اثر خطای انسانی مورد اصابت قرار گرفت

۳ روز بعد از سقوط هواپیمای تهران اوکراین در صبح روز چهارشنبه ۱۸ دی ماه، در نهایت ستاد کل نیروهای مسلح صبح امروز با انتشار بیانیه‌ای رسمی اعلام کرد که سقوط هواپیما ناشی از «خطای انسانی غیرعمد» و مورد «اصابت» …

نوشته ستاد کل نیروهای مسلح: هواپیما بر اثر خطای انسانی مورد اصابت قرار گرفت اولین بار در دیجیاتو پدیدار شد.

گردآوری توسط ایده طلایی

احتمال استرداد مدیر مالی هواوی به آمریکا بالا گرفت

دادستان های فدرال کانادا اعلام کردند منگ وانژو نه به خاطر دور زدن تحریم های آمریکا علیه ایران ، بلکه به خاطر کلاهبرداری در کانادا بازداشت شده و امکان استرداد وی به ایالات متحده وجود دارد. منگ وانژو، مدیر مالی …

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

گردآوری توسط ایده طلایی