بارگذاری..

اخبار

29-Sep-2021 درگاه پرداخت الکترونیکی سپهر (بانک صادرات ایران) اندروید
ابزار و فناوری
درگاه پرداخت الکترونیکی سپهر (بانک صادرات ایران) اندروید

درگاه پرداخت الکترونیکی سپهر (بانک صادرات ایران) پرداخت اينترنتي نوعي پرداخت الكترونيكي است كه از طريق آن دارندگان كليه كارت‌هاي بانكي عضو شتاب مي‌توانند با استفاده از مشخصات كارت بانكي خود شامل شماره كارت، رمز دوم، تاريخ انقضاء و كد اعتبار سنجي(cvv2) نسبت به خريد از وب‌سايت‌هاي اينترنتي فروشنده كالا يا خدمات اقدام نمايند.  درگاه پرداخت اينترنتي سيستم واسط ميان فروشگاه اينترنتي و شبكه بانكي است كه تراكنش‌هاي خريد كاربران اينترنتي يا مشتريان فروشگاه پذيرنده از طريق آن به شبكه بانكي ارسال مي‌گردد. هدف از ارائه این برنامه رونق بخشيدن به فروش و معاملات صاحبان کسب و کار الکترونیکی و افزايش سرعت انجام معاملات، افزايش امنيت و كنترل در پرداخت وجه​از طریق اپلیکیشن اندرویدی است. همچنین از طریق درگاه پرداخت الکترونیکی سپهر امكان دریافت خدمات متمایزی همچون تسهيم و واريز مبالغ تراكنش‌ها به چند حساب مختلف و با درصدهاي مورد نظر متقاضي امکان پرداخت قبوض خدمات شهری(آب، برق، گاز، تلفن و ...) و خرید شارژ مستقیم سیم کارت های اعتباری اپراتورهای تلفن همراه(همراه اول، ایرانسل و رایتل) امكان ارائه خدمات ويژه نظير دسترسي به ريزتراكنش‌ها به مشتريان خاص از طريق صورتحساب ويژه بانك صادرات ايران میسر می باشد که این امکانات از طریق مراجعه به سایت شرکت پرداخت الکترونیک سپهر(بانک صادرات ایران) https://www.sepehrpay.com قابل دریافت می باشد. برای پرداخت الکترونیکی از طریق اپلیکیشن اندرویدی این امکانات مورد نیاز است: ·        داشتن حساب در بانک صادرات ايران ·        دارا بودن وب سايت آماده جهت فروش اينترنتي (‌چرخه کامل فروش) ·        اخذ نماد اعتماد الکترونيکي از طريق وب سايت www.enamad.ir ·        اخذ کد مالیاتی ·        وجودIP  معتبر (IP Valid) براي وب سايت پذيرنده ·        اخد کد ترمینال منحصر به فرد برای انجام تراکنش از مزایای این درگاه اینست که هيچ هزينه و كارمزدي از متقاضي (پذيرنده اينترنتي) دريافت نمي گردد. در این برنامه اندرویدی روش پياده‌سازي و فعال نمودن درگاه پرداخت اينترنتي بانك صادرات ايران ( شركت  psp پرداخت الکترونیک سپهر) برای شما عزیزان به رایگان آموزش داده شده است. با توجه به الزامات شاپرکی هرگونه تراکنش از طریق اپلیکیشن های اندرویدی باید از طریق Browserها انجام شده و طراحی و انجام فرایند تراکنش در webview مجاز نمی باشد. لذا پیاده سازی روش مورد نظر شاپرک از طریق Browserها  و در نهایت برگشت دادن مشتری از فرم پرداخت (داخل Browser) به برنامه اندروید مستلزم بکارگیری تکنیک Deep Link می باشد. در بیشتر موارد هدایت مشتری به درگاه پرداخت از Activity و یا  AppCompatActivityصورت میپذیرد. در این روش، برگشت دادن مشتری از فرم پرداخت (داخل Browser) به برنامه اندروید از پیچیدگی کمتری نسبت به برگشت دادن مشتری از فرم پرداخت (داخل Browser) به برنامه اندروید از طریق Fragment دارد و چون بسیاری از دوستان در خصوص برگشت دادن مشتری به برنامه اندروید و فرم Fragment دچار مشکلاتی بوده اند ، در این مثال روش دوم که از طریق Fragment می باشد استفاده شده است. برای توضیحات بیشتر و درک بهتر برنامه، فیلم آموزش و توضیح این مثال نیز طراحی شده که از طریق لینک زیر قابل دانلود است: اطلاعات موردنیاز جهت خرید اینترنتی چیست ؟ شماره کارت ( PAN ) : شماره درج شده بر روی کارت می باشد که برای هر کارت منحصر به فرد بوده و  یک شماره 16 رقمی است . رمز اینترنتی ( PIN2 ) : این عدد همان رمز دوم کارت بوده که می توان با مراجعه به خودپرداز بانک نسبت به فعال سازی و دریافت آن اقدام نمود . کد اعتبار سنجی دوم ( CVV2 ) :) (Card Verification Value کد 3 یا 4 رقمی حک شده بر رو و یا پشت کارت بانکی است که یکی از ملزومات اساسی در یک خرید اینترنتی به شمار می رود . ( گاهی برای کارت هایی که فاقد CVV2 هستند از 3 رقم آخر شماره کارت ( PAN ) استفاده می گردد . ) تاریخ انقضای کارت :تاریخی است که بر روی کارت های بانکی درج گردیده ومدت اعتبار کارت را نشان می دهد .   معاني برخي اصطلاحات مورد استفاده: پذيرنده : شخص حقيقي يا حقوقي است که با بانک قرارداد بسته است و کارتهاي آن بانک را در فروشگاه خود ميپذيرد. فروشگاه يا سايت پذيرنده : فروشگاه اينترنتي پذيرنده است که در آن محصولات و کالاهاي خود را به صورت اينترنتي عرضه مي کند. درگاه پرداخت اينترنتي : سيستم واسط مابين فروشگاه پذيرنده و شبکه بانک که کاربران اينترنتي يا مشتريان فروشگاه پذيرنده، تراکنشهاي خريد Online خود را  توسط اين سيستم به شبکه بانک ارسال نموده و خريد Online انجام مي دهند. درگاه پرداخت الکترونیک سپهر : نام درگاه پرداخت اينترنتي بانک صادرات ایران می باشد مي باشد که از طریق شرکت psp پرداخت الکترونیک سپهر متعلق به بانک صادرات ایران ارائه میگردد. (درگاه اينترنتي مركزي واريز نقدي) شبکه بانکي : شبکه سيستمهاي Online بانکي که عمليات RealTime و Online بانکي را بر عهده دارند. يکپارچگي سايت پذيرنده و درگاه پرداخت الکترونیک سپهر : اتصال سايت پذيرنده با سيستم درگاه پرداخت الکترونیک سپهر جهت استفاده ار سرويسهاي پرداخت Online بانکي. مشتري يا کاربر : شخصي است که براي خريد اينترنتي از سايت پذيرنده با استفاده از كارت بانكي خود اقدام نموده است. لینک دانلود پروژه https://github.com/kia1349/sepehr_payment_BankSaderatIran  

ادامه مطلب ..
07-Aug-2021 ساخت UI با Jetpack Compose
ابزار و فناوری
ساخت UI با Jetpack Compose

ساخت UI با Jetpack Compose برای ساخت UI در اندروید چه راه هایی هست ؟ با xml بسازید یا به صورت کد بنویسید ، راه xml مسلما بسیار راحت تره ، اما جدیدا اندروید به تقلید از Apple ابزاری به اسم Compose رو معرفی کرده که باهاش می‌تونید UI رو به صورت کد ولی خیلی راحت ایجاد کنید ، در این مقاله ما چند مثال کوچک و یک سری کلیات از قضیه رو بررسی می‌کنیم و در سری های بعدی از این سری Compose به شرح و بسط اون می‌پردازیم . Android Compose   مقدمه و شروع کار برای شروع با ملزومات پروژه آغاز می‌کنیم ، فایل gradle شما باید شامل موارد زیر باشه :   و   خب حالا چرا می‌گن بهش Compose ؟ در این ابزار ما از توابع composable (قابل ترکیب) استفاده می‌کنیم ، تو این توابع به جای اینکه از View هامون شئ بگیریم می‌آییم ویژگی هاشون رو (مثلا اگه TextView باشه متنشو) مشخص می‌کنیم و تابع مورد نظر اون View رو صدا می‌زنیم . نکته : برای استفاده از Compose (در تاریخی که این مقاله نوشته شده) باید نسخه Canary رو نصب کنید . در حین نصب این نسخه اگه به مشکل خوردید دو تا کار رو انجام بدید ، یکی JDK ورژن 11 رو نصب کنید و این JDK رو بهش بدید و مساله دیگه اینکه خودش بهتون میگه Gradle رو آپدیت کنید این توابع با انوتیشن Composable مشخص می‌شن ، برای شروع یک پروژه خالی بسازید با یک اکتیویتی ساده ، حالا می‌خوایم یک TextView بندازیم توش ، به جای اینکه از setContentView استفاده کنیم و بهش layout پاس بدیم می‌آییم از تابع setContent استفاده می‌کنیم :   حالا فرض کنید به صورت مستقیم نمی‌خوایم Text رو ایجاد کنیم بلکه با یک تابع واسطه قراره این کار رو بکنیم ، توابعی که برای ما عملیات ایجاد View رو در این ابزار انجام می‌دن با انوتیشنِ Composable مشخص می‌شن (اگه خودِ Text رو هم تعریفش رو داخل کتابخونه ببینید ، این انوتیشن رو داره) ، فرضا یک تابع می‌نویسیم که همین Hello World رو برامون چاپ کنه ، رو نمایش بده ، اما یک مساله دیگه رو هم بهش اضافه می‌کنیم ، فرض کنید نمی‌خوایم Run بگیریم تا خروجی رو ببینم و می‌خوایم یک Preview از قضیه رو کنار کد داشته باشیم ، برای این کار باید اون تابع رو با انوتیشن Preview مشخص کنیم :   و حالا کنار کدهامون این قسمت رو داریم : لایه بندی به ترتیبی که شما توابع Composable رو صدا بزنید به همون ترتیب لایه بندی تون انجام میشه ، یعنی اگه تابع B درون تابع A صدا زده بشه پس layout تابع B فرزند layout تابع A میشه ، نکته دیگه در مورد Arrange کردن View هاست ، فرضا سه Text پشت هم بنویسیم :   خروجی بسیار کثیف خواهد شد : پس باید به نوعی ترتیب قرارگیری عناصر رو هم مشخص کرد ، با استفاده از تابع Column میشه View ها رو به ترتیب از بالا به پایین چید ، کمی کد رو کامل تر کنیم ، فرض کنید قصد دارید style ای هم بهش بدید ، مثلا یک padding ، همین طور فرض کنید نمی‌خوایم همش Text باشه ، می‌آییم یک Image هم اضافه می‌‎کنیم (ورودی اون خودش تابع imageResource خواهد بود) ، برای دادن style ها باید در ورودی توابع Composable مقادیری که می‌خواهیم رو مشخص کنیم :   و خروجی : همچنین برای مقادیری مثل فونت ، سایز و ... می‌تونید به تعریف تابع مورد نظرتون رجوع کنید ، مثلا اگه تعریف تابع Text رو ببینیم : حالا فرضا می‌خوایم رنگش رو آبی کنیم و یک پدینگ به خودِ Text هم بدیم ، همین طور می‌خوایم به عکسمون یک ارتفاع ثابت بدیم و ScaleType ش رو هم تغییر بدیم :   و خروجی : یادآوری : بالاتر گفتیم که برای style دادن از modifier استفاده می‌کنیم ، پس مسائلی مثل ارتفاع ، عرض ، پدینگ و ... رو با این ابزار تغییر می‌دیم متریال دیزاین ابزار Compose از قواعد متریال دیزاین پشتیبانی می‌کنه ، فرض کنید عکس بالا رو می‌خوایم دورش رو یه radius بندازیم ، تو xml من این کار رو با CardView انجام می‌دادم ولی اینجا با modifier و تابع clip :   که خروجی ما میشه : همچنین برای style دادن به متون هم ویژگی های جالبی داره (تقریبا شاید اینجاها متوجه مزیت‌های Compose به XML بشید) :   و خروجی به شکل زیبا و راحت به این صورت میشه : نکته : header از 1 تا 6 و body مقدار 1 و 2 می‌تونه باشه خب ، تو این مقاله یک ایده کلی از قضیه گرفتید ، در مقاله‌های سری بعد از این مجموعه ابزار Compose رو با تفضیل بیشتر و جزء به جزء تر بررسی می‌کنیم .

ادامه مطلب ..
07-Aug-2021 Jetpack Compose
ابزار و فناوری
Jetpack Compose

تغییرات در توسعه اپ‌های موبایل معمولا با گرایشات و روندهای جدید همراه است چه این روندها در حوزه ایمنی و ثبات زبان باشد، و چه در بهبود عملکرد برنامه، به هرحال همیشه باید از این روندها پیروی کرد چرا که کارکرد و توسعه اپلیکیشن‌ها را بهبود می‌بخشد. Jetpack Compose در مراسم گوگل IO 2019 برای طراحی رابط کاربری (UI) معرفی شد و روز به روز در حال پیشرفت می‌باشد. در ادامه مقاله خواهیم دید که Jetpack Compose که شرکت گوگل برای توسعه اپلیکیشن‌های اندرویدی ارائه کرده است چیست. قبل از اینکه Jetpack Compose را توضیح دهیم آیا می‌دانید Jetpack چیست؟ شما می‌توانید در وب سایت ما مقاله‌ی جت پک چیست؟ را مطالعه نمایید. Android Jetpack مجموعه‌ای از مؤلفه‌های نرم افزار اندرویدی است که به ما در ساخت برنامه‌های عالی و بی عیب اندرویدی کمک می‌کند. این مؤلفه‌های نرم افزاری به موارد زیر کمک می‌کنند: باعث جلوگیری نوشتن کد‌های تکراری می‌شود. باعث ساده کردن چیز‌های پیچیده می‌شود. فهرست محتوای این مقاله Jetpack Compose چیست ؟ چرا به جت پک کامپوز نیاز داریم؟ شروع یک پروژه جدید Compose روند کارکرد Composable Declarative UI (رابط کاربری Declarative) استفاده مجدد از Compose Reusability) Compose)  حالت در State in Compose) Compose)  چیدمان‌های انعطاف پذیر (Flexible Layout) تم برای برنامه (Theming Your App) Jetpack Compose چیست ؟ به‌طور خلاصه می‌توان گفت ابزار مدرنی می‌باشد که برای ساخت رابط کاربری (Material UI) در اندروید معرفی شده است.          Jetpack Compose سهولت و مختصر بودن زبان برنامه نویسی کاتلین را با مدل برنامه نویسی reactive ترکیب می‌کند. و به صورت کاملا اعلانی است. به این معنی که رابط کاربری شما با فراخواندن دنباله‌ای از توابع که داده را به سلسه مراتبی از رابط کاربری تبدیل می‌کند، تعریف می‌شود. زمانی که داده‌های اصلی تغییر می‌کند، فریم ورک به صورت اتوماتیک با فراخوانی دوباره تابع‌ها سلسله مراتبی از view‌ها را برای شما بروزرسانی می‌کند. Android Jetpack Compose مانند سایر کتابخانه‌های JetPack در مراحل اولیه خود است. Jetpack Compose با کد کمتر، ابزاری‌های قدرتمند و Api‌های بصری کاتلین باعث ساده‌تر شدن و تسریع در پیاده سازی رابط کاربری در اندروید می‌شود. چرا به جت پک کامپوز نیاز داریم؟ به طور کلی، ما از Relative Layout  ،Linear Layout، یا Frame Layout برای ساخت Layout file‌ها استفاده می‌کنیم. اما پس از اینکه Constraint Layout  فوق العاده وارده صحنه شد، همه‌ی برنامه نویسان اندروید را مجذوب خود کرد. این خوب است، اما Constraint Layout, Relative Layout, Linear Layout, Frame Layout‌ها فقط درLayout ما قابل استفاده هستند. اگر روابط Linear Layout وجود نداشت یا ما مجبور بودیم Constraint Layout را درون فایل هایمان کد نویسی کنیم چه می‌شد؟ ما می‌توانیم کمی رو به جلو برویم و بگوییم اگر یک راه جدید برای ساخت رابط کاربری بدون Layout File‌ها داریم چطور است؟ آیا این ممکن است؟ بله هست، و این چیزی است که ما به آن Jetpack Compose می‌گوییم. مهم نیست که ما چند Layout پیشرفته مانند Relative Layout یا Constraint Layout داشته باشیم ما همیشه یک رابط کاربری ( declarative UI) در اندروید نیاز داریم. اگر چه ما چندین کتابخانه Third-party داریم، خیلی خوب است که یک Native library داشته باشیم. هم اکنون آن را در اختیار داریم، و اسم آن جت پک کامپوز می‌باشد. توجه: پیش نیاز استفاده از Jetpack Compose تجربه کار با کاتلین می‌باشد. توجه: این ویژگی در نسخه پیش نمایش ( Preview ) است و حتما برای پشتیبانی از Jetpack Compose باید از نسخه Android Studio Canary استفاده نمایید. شروع یک پروژه جدید Compose برای شروع یک پروژه جدید Android Studio Canary ، Compose را باز کنید و Start a new Android Studio project را انتخاب کنید همان‌طور که در زیر نشان داده شده است: اگر صفحه‌ی بالا نشان داده نشد به File > New > New Project مراجعه نمایید. زمانی که یک پروژه جدید ساختید Empty Compose Activity را از  قالب‌های موجود انتخاب کنید. Next را انتخاب کنید و پروژه را مثل همیشه پیکربندی کنید. اطمینان پیدا کنید که نسخه minimum Sdk حتما روی Api 21 باشد به‌دلیل اینکه حداقل Api که Compose پشتیبانی می‌کند Api 21 یا همان اندروید Lollipop است. برای کسب اطلاعات بیشتر در مورد تنظیم Compose با یک Empty Activity یا اضافه کردن آن به یک پروژه موجود، مستندات آن را مورد بررسی قرار دهید. Start New Project زمانی که قالب Empty Compose Activity را انتخاب کردید، کد‌های زیر در پروژه شما ایجاد می‌شود. این پروژه در حال حاضر پیکربندی شده است و قابل استفاده برای Compose می‌باشد: فایل ساخته شده در AndroidManifest.xml و app/build.gradle  فایل‌های وارد شده‌ی کتابخانه‌های Compose، اندروید استودیو را قادر می‌سازد که Compose بتواند با buildFeature { compose true } flag  کار کند. android { defaultConfig { ... minSdkVersion 21 } buildFeatures { // Enables Jetpack Compose for this module compose true } ... // Set both the Java and Kotlin compilers to target Java 8. compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } composeOptions { kotlinCompilerExtensionVersion "0.1.0-dev09" } } یک اپلیکیشن Compose  از توابع Composable ساخته شده، توابع منظم با Annotation) @Composable) مشخص شده است، که می‌تواند سایر تابع‌های Composable  را فراخوانی کند. یک تابع تمام چیزی هست که شما برای ساخت رابط کاربری جدید نیاز دارید. Annotation (حاشیه نویسی) به Compose می‌گوید که برای بروزرسانی و حفظ رابط کاربری خود در طول زمان، پشتیبانی ویژه‌ای را برای توابع فراهم می‌کند. توابع Composable را می‌توان فقط از دیگر توابع Composable فراخوانی کرد. Compose به ما این امکان را می‌دهد تا ساختار کد‌های خود را به قطعه‌های کوچک تبدیل کنیم. اغلب مواقع به Composable Functions، به طور کوتاه Composables می‌گوییم. برای استفاده از آخرین نسخه از Compose، فایل app/build.gradle را باز کنید. کتابخانه‌های  Compose را بروزرسانی کنید: dependencies { // You also need to include the following Compose toolkit dependencies. implementation 'androidx.ui:ui-framework:0.1.0-dev10' implementation 'androidx.ui:ui-tooling:0.1.0-dev10' implementation 'androidx.ui:ui-layout:0.1.0-dev10' implementation 'androidx.ui:ui-material:0.1.0-dev10' ... } MainActivity.kt  را باز کنید، کد‌ها را بررسی و کار را شروع کنید: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MaterialTheme { Greeting("Android") } } } } @Composable fun Greeting(name: String) { Text(text = "Hello $name!") } @Preview @Composable fun DefaultPreview() { MaterialTheme { Greeting("Android") } } روند کارکرد Composable تابع Composable یک تابع منظم است که با Composable@ حاشیه نویسی ( Annotation ) می‌شود. این عملکرد شما را قادر می‌سازد تا دیگر توابع داخلی Composable را فراخوانی کنید. می‌توانید ببنید که تابع Greeting چگونه Composable@ را حاشیه نویسی کرده است. این تابع قطعه‌ای از سلسله مراتب رابط کاربری را تولید کرده و ورودی داده شده را نمایش می‌هد. Text یک تابع Composable است که توسط کتابخانه ایجاد شده است. @Composable fun Greeting(name: String) { Text(text = "Hello $name!") } تابع Composable، یک تابع کاتلین می‌باشد که با annotation) @Composable)  نشانه گذاری شده است، در مثال بالا می‌بینید. با Composable ،Activity همچنان نقطه ورود یک برنامه اندرویدی است. در پروژه ما، زمانی که کاربر برنامه را باز می‌کند MainActivity راه اندازی می‌شود. ( همان‌طور که در فایل AndroidManifest.xml مشخص شده است). ما از setContent  برای تعریف طرح خود استفاده می‌کنیم اما به جای استفاده از یک فایل XML، توابع Composable را درون آن قرار می‌دهیم. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MaterialTheme { Greeting("Android") } } } } MaterialTheme روشی برای استایل دادن به توابع Composable است، در بخش Theming your app برنامه اطلاعات بیشتری در این مورد خواهیم دید. برای دیدن نحوه نمایش متن روی صفحه، می‌توانید برنامه را در یک شبیه ساز یا دستگاه اجرا کنید. یا از پیش نمایش Android Studio استفاده کنید. برای استفاده از پیش نمایش Android Studio، شما فقط باید توابع  Composable را بدون پارامتر با annotation) @Preview) علامت گذاری کنید و پروژه خود را بسازید. در حال حاضر می‌توانید یک پیش نمایش از عملکرد Composable را در فایل MainActivity.kt مشاهده کنید. می‌توانید پیش نمایش‌های مختلفی در همان فایل داشته باشید و به آنها نام بدهید. @Preview("Text preview") @Composable fun DefaultPreview() { MaterialTheme { Greeting(name = "Android") } } Composable هنگام وارد کردن کلاس‌های مربوط به Jetpack Compose در این پروژه، از کلاس‌های زیر استفاده کنید: androidx.compose.* for compiler and runtime classes androidx.ui.* for UI toolkit and libraries اگر حالت نمایش "فقط کد" انتخاب شود، پیش نمایش ظاهر نمی‌شود. برای دیدن پیش نمایش همان‌طور که در تصویر زیر مشاهده می‌کنید، روی حالت نمایش "تقسیم" ضربه بزنید: Declarative UI (رابط کاربری Declarative) برای تنظیم یک رنگ پس زمینه برای Text و بقیه صفحه، باید Surface را تعریف کنیم که شامل آن باشد: @Composable fun Greeting(name: String) { Surface(color = Color.Yellow) { Text (text = "Hello $name!") } } مؤلفه هایی که درون Surface قرار دارند، بالای آن رنگ پس زمینه کشیده می‌شوند (مگر این که توسط یک Surface دیگر مشخص شده باشد). هنگامی که آن کد را به پروژه اضافه می‌کنید، دکمه Build & Refresh را در گوشه بالا سمت راست Android Studio مشاهده خواهید کرد. برای دیدن تغییرات جدید در پیش نمایش، روی آن ضربه بزنید یا پروژه را بسازید. می توانید تغییرات جدید را در پیش نمایش مشاهده کنید: بیشتر عناصر رابط کاربری Compose مانند Text و Surface یک پارامتر modifier  اختیاری را می‌پذیرند. پارامتر modifier  به عناصر رابط کاربری می‌گوید که چیدمانش در صفحه نمایش چگونه باشد یا چطور رفتار کنند. modifier اشیاء معمولی زبان کاتلین هستند. می‌توانید آن‌ها را به متغیرها اختصاص دهید و از آن‌ها دوباره استفاده کنید. همچنین می‌توانید چندین مورد از این modifier‌ها را با عملگر (+) زنجیر کنید که در یک آرگومان واحد ادغام شده‌اند. چیدمان modifier‌ها می‌توانند نحوه اندازه گیری و تنظیم یک مؤلفه رابط کاربری را تغییر دهند. Layout‌های modifier که در Compose در دسترس هستند، به عنوان مثال شامل: ( LayoutPaddin , LayoutAlign , LayoutSize) می‌شوند. LayoutPadding در modifier مقداری از فضای اطراف عنصر را تزیین می‌کند. برای افزودن padding به متن روی صفحه، می‌توانیم modifier  را به متن خود اضافه کنیم: @Composable fun Greeting(name: String) { Surface(color = Color.Yellow) { Text(text = "Hello $name!", modifier = Modifier.padding(24.dp)) } } برای دیدن تغییرات جدید، روی دکمه Build & Refresh کلیک کنید. استفاده مجدد از Compose Reusability) Compose)  هرچه مؤلفه‌های بیشتری به رابط کاربری اضافه کنیم، سطح تو در توی بیشتری را نیز ایجاد می‌کنیم، دقیقاً مانند سایر توابع موجود که در پایگاه داده شما ایجاد شده است. اگر توابع بسیار بزرگ شوند، این می‌تواند بر خوانایی تأثیر بگذارد. با ساخت اجزای کوچک و قابل استفاده مجدد، ایجاد کتابخانه‌ای از عناصر  رابط کاربری مورد استفاده در برنامه شما آسان است. هر تابع مسئولیت یک بخش کوچک صفحه را دارد و می‌تواند به طور مستقل ویرایش شود. وقتی کد رابط کاربری خود را refactor می‌کنیم، باید تابع خود را با حاشیه نویسی Composable علامت گذاری کنیم تا به کامپایلر بگوییم که این یک تابع Composable است و این امکان را فراهم می‌کند تا دیگر توابع سازنده را فراخوانی کند. کامپایلر همچنین باعث می‌شود که این تابع از یک تابع Composable دیگر فراخوانی شود. نکته: توجه داشته باشید که حاشیه نویسی Composable  فقط برای توابعی که از رابط کاربری emit می‌شوند ضروری است. annotation‌ها می‌توانند توابع معمولی و Composable را فراخوانی کنند. اگر تابعی این شرایط را برآورده نکند، نباید با Composable حاشیه نویسی شود. توجه کنید که توابع Composable در MainActivity.kt در خارج از کلاس MainActivity هستند که به عنوان توابع سطح بالا اعلام می‌شوند. هرچه کدهای بیشتری در خارج از Activity داشته باشیم، می‌توانیم از اشتراک و استفاده مجدد بیشتری استفاده کنیم. Compose Reusability ابتدا اجازه دهید یک تابع جدید Composable در  MyApp ایجاد کنیم که حاوی منطق Compose UI مخصوص این Activity است. دوم، معقول نیست که رنگ پس زمینه برنامه در Greeting Composable قابل استفاده مجدد قرار گیرد، آن پیکربندی باید برای هر قطعه رابط کاربری در این صفحه اعمال شود، بنابراین Surface را در Greeting به توابع در MyApp جدید خود منتقل می‌کنیم: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MyApp() } } } @Composable fun MyApp() { MaterialTheme { Surface(color = Color.Yellow) { Greeting(name = "Android") } } } @Composable fun Greeting(name: String) { Text(text = "Hello $name!", modifier = Modifier.padding(24.dp)) } @Preview @Composable fun DefaultPreview() { MyApp() } ما می‌خواهیم از توابع Composable ،MyApp در Activity‌های مختلف دوباره استفاده کنیم زیرا پیکربندی سطح بالایی را تعریف می‌کند که می‌تواند در مکان‌های مختلف استفاده شود. از آنجا که Greeting در آن تعبیه شده است وضعیت فعلی توابع اجازه نمی‌دهد دوباره استفاده شود. در ادامه Container را تنظیم می‌کنیم که پیکربندی برنامه مشترک را داشته باشیم. ساختن Container Functions اگر بخواهیم Container بسازیم که تمام پیکربندی مشترک برنامه ما را داشته باشد،باید چه کاری انجام دهیم؟ برای ساختن یک Container عمومی، ما یک تابع Composable ایجاد می‌کنیم که به عنوان پارامتر تابع Composable  (که در اینجا children نامیده می‌شود) Unit را برمی‌گرداند. ما Unit را برمی‌گردانیم زیرا همان‌طور که ممکن است متوجه شده باشید، تمام توابع Composable باید Unit را برگردانند: @Composable fun MyApp(children: @Composable() () -> Unit) { MaterialTheme { Surface(color = Color.Yellow) { children() } } } هنگام استفاده از یک عملکرد Composable به عنوان یک پارامتر، مراقب پرانتز اضافی در () Composable@  باشید. از آنجا که حاشیه نویسی (Annotation) بر روی یک تابع اعمال می‌شود، به آن نیاز دارید و لازم است! fun MyApp(children: @Composable() () -> Unit) { ... } تابع ما، تمام پیکربندی مشترکی را که می‌خواهیم Container ما تهیه کند را تعریف می‌کند و سپس فرزندان منتقل شده Composable را می‌توان به کمک آن‌ها فراخوانی کرد. در این حالت، ما می‌خواهیم از MaterialTheme و یک surface  زرد استفاده کرده و سپس children () را فراخوانی کنیم. class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MyApp { Greeting("Android") } } } } @Preview("Text preview") @Composable fun DefaultPreview() { MyApp { Greeting("Android") } } این کد معادل چیزی است که در بخش قبلی داشتیم اما اکنون انعطاف پذیرتر است. انجام توابع سازگار با ظروف یک روش خوب است که باعث بهبود خوانایی می‌شود و استفاده از کد را ترغیب می‌کند. فراخوانی توابع  Composable و چندین بار استفاده از Layout ها ما اجزای رابط کاربری را در توابع Composable استخراج می‌کنیم تا بدون استفاده از کد تکراری بتوانیم از آنها دوباره استفاده کنیم. در مثال زیر می‌توانیم از دو greetings دوباره استفاده کنیم و همان توابع Composable با پارامترهای مختلف را نشان دهیم. برای قرار دادن  آیتم‌ها در یک ترتیب عمودی، ما از تابع Column Composable  ( مشابه یک LinearLayout عمودی) استفاده می‌کنیم. @Composable fun MyScreenContent() { Column { Greeting("Android") Divider(color = Color.Black) Greeting("there") } } Divider یک تابع Composable  است که یک تقسیم افقی ایجاد می‌کند. از آنجا که ما می‌خواهیم MyScreenContent همان چیزی باشد که کاربران ما هنگام باز کردن برنامه می‌بینند، ما باید بر این اساس کد MainActivity را اصلاح کنیم. همچنین، می‌توانیم کد پیش نمایش را تغییر دهیم، تا بتوانیم بدون استفاده از برنامه در دستگاه یا شبیه ساز، سریعتر در Android Studio کار را  پیش ببریم: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MyApp { MyScreenContent() } } } } @Preview("MyScreen preview") @Composable fun DefaultPreview() { MyApp { MyScreenContent() } } اگر پیش نمایش را Refresh کنیم، مواردی را می‌بینیم که به صورت عمودی قرار دارند: هنگامی که یک تابع Composable خوانده می‌شود، عناصر را به سلسله مراتب Compose UI اضافه می‌کند. برای افزودن عناصر جدید می‌توانید با استفاده از چندین قسمت از کد خود، عملکرد مشابه (با پارامترهای متفاوت) را فراخوانی کنید. Compose و کاتلین توابع Compose را می‌توان مانند سایر توابع در Kotlin دانست. این امر باعث می‌شود که UI‌های برنامه قدرتمند باشند زیرا می‌توانیم statements را اضافه کنیم تا در نحوه نمایش UI تاثیر داده شود. به عنوان مثال، می‌توانیم از حلقه for استفاده کنیم تا عناصر را به ستون MyScreenContent اضافه کنیم: @Composable fun MyScreenContent(names: List<String> = listOf("Android", "there")) { Column { for (name in names) { Greeting(name = name) Divider(color = Color.Black) } } }   حالت در State in Compose) Compose)  شما می‌توانید با Annotation (حاشیه نویسی) Model@ حالت را مدیریت نمایید. نوشتن برنامه‌ها با فراخوانی توابع Composable داده‌ها را به UI تبدیل می‌کند. اگر داده‌های شما تغییر کند، این توابع بروزرسانی شده و یک رابط کاربری جدید را ایجاد می‌کنید. ابزارهای پیشنهادی Compose با مشاهده تغییرات در داده‌های برنامه شما به طور خودکار توابع شما را بروزرسانی می‌کند. Compose همچنین بررسی می‌کند که داده‌های مورد نیاز توسط یک فرد سازنده مورد نیاز است یا نه، به طوری که فقط مؤلفه هایی را که داده‌های آن‌ها تغییر کرده است بررسی کرده و اگر در برنامه نیاز بود، دوباره می‌توانند فراخوانی شوند. Compose از یک افزونه کامپایلر Kotlin استفاده می‌کند، بنابراین وقتی داده‌های اساسی تغییر می‌کنند، توابع Composable  برای بروزرسانی سلسله مراتب رابط کاربری دوباره فراخوانی می‌شوند. نکته: Annotation (حاشیه نویسی) Model@ باعث خواهد شد که کامپایلر Compose دوباره کلاس را بازنویسی کند تا آن را قابل مشاهده و Thread-safe کند. در ادامه یک شمارنده (Counter) درست می‌کنیم که اگر کاربر چند بار روی یک دکمه کلیک کند. حالت شمارنده  که یک عدد Integer خواهد بود اضافه شود: @Model class CounterState(var count: Int = 0) State in Compose ما CounterState را با Model@ حاشیه نویسی (Annotation) کرده ایم زیرا می‌خواهیم توابع Composable که این کلاس را به عنوان یک پارامتر در نظر می‌گیرند به محض تغییر مقدار شمارش به صورت خودکار اضافه شود. @Composable fun Counter(state: CounterState) { Button(onClick = { state.count++ }) { Text("I've been clicked ${state.count} times") } } Compose انواع مختلفی از دکمه‌ها را مطابق مشخصات دکمه طراحی متریال ارائه می‌دهد: OutlinesButton ،Button و TextButton. در این مورد ما، از OutlinesButton استفاده خواهیم کرد و یک متن به عنوان محتوای دکمه خواهیم داشت که نشان می‌دهد OutlinesButton چند بار کلیک شده است. از آنجا که دکمه شمارش را می‌خواند، هرگاه تعداد شمارش تغییر کند، دکمه دوباره تجدید می‌شود و مقدار جدید شمارش را نشان می‌دهد. اکنون می‌توانیم Counter را به صفحه خود اضافه کنیم: @Composable fun MyScreenContent( names: List<String> = listOf("Android", "there"), counterState: CounterState = CounterState() ) { Column { for (name in names) { Greeting(name = name) Divider(color = Color.Black) } Divider(color = Color.Transparent, height = 32.dp) Counter(counterState) } } پیش نمایش در این بخش پاسخگو نیست، برای دیدن این که کار می‌کند، باید برنامه را در یک شبیه ساز یا یک دستگاه واقعی اجرا کنیم. اگر برنامه را اجرا کنیم، می‌بینیم که Counter چگونه حالت را حفظ می‌کند و در هر کلیک آن را افزایش می‌دهد. چیدمان‌های انعطاف پذیر (Flexible Layout) ما به طور خلاصه Column را معرفی کردیم که برای قرار دادن موارد در یک ترتیب عمودی استفاده می‌شود. به همین روش می‌توانید از Row برای قرار دادن موارد به صورت افقی استفاده کنید. Row و Column  آیتم‌ها را یکی پس از دیگری قرار می‌دهد. اگر می‌خواهید برخی از موارد انعطاف پذیر باشد تا صفحه نمایش با وزن مشخصی اشغال شود، می‌توانید از Flexible modifier استفاده کنید. (Inflexible رفتار پیش فرض است). اگر بخواهیم دکمه را در پایین صفحه قرار دهیم در حالی که محتوای دیگر در بالای صفحه قرار دارد. ما می‌توانیم این کار را با مراحل زیر انجام دهیم: @Composable fun MyScreenContent( names: List<String> = listOf("Android", "there"), counterState: CounterState = CounterState() ) { Column(modifier = Modifier.fillMaxHeight()) { Column(modifier = Modifier.weight(1f)) { for (name in names) { Greeting(name = name) Divider(color = Color.Black) } } Counter(counterState) } } مثالی دیگر با if else: @Composable fun Counter(state: CounterState) { Button( onClick = { state.count++ }, backgroundColor = if (state.count > 5) Color.Green else Color.White ) { Text("I've been clicked ${state.count} times") } } تمامی کد‌های این بخش: import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.compose.Composable import androidx.compose.Model import androidx.ui.core.Modifier import androidx.ui.core.setContent import androidx.ui.foundation.Text import androidx.ui.graphics.Color import androidx.ui.layout.Column import androidx.ui.layout.fillMaxHeight import androidx.ui.layout.padding import androidx.ui.material.Button import androidx.ui.material.Divider import androidx.ui.material.MaterialTheme import androidx.ui.material.Surface import androidx.ui.tooling.preview.Preview import androidx.ui.unit.dp @Model class CounterState(var count: Int = 0) class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MyApp { MyScreenContent() } } } } @Composable fun MyApp(children: @Composable() () -> Unit) { MaterialTheme { Surface(color = Color.Yellow) { children() } } } @Composable fun MyScreenContent( names: List<String> = listOf("Android", "there"), counterState: CounterState = CounterState() ) { Column(modifier = Modifier.fillMaxHeight()) { Column(modifier = Modifier.weight(1f)) { for (name in names) { Greeting(name = name) Divider(color = Color.Black) } } Counter(counterState) } } @Composable fun Greeting(name: String) { Text(text = "Hello $name!", modifier = Modifier.padding(24.dp)) } @Composable fun Counter(state: CounterState) { Button( onClick = { state.count++ }, backgroundColor = if (state.count > 5) Color.Green else Color.White ) { Text("I've been clicked ${state.count} times") } } @Preview("MyScreen preview") @Composable fun DefaultPreview() { MyApp { MyScreenContent() } } تم برای برنامه (Theming Your App) ما در مثال‌های قبلی هیچ نوع طرحی یا استایلی را تعریف نکردیم. چگونه می‌توانیم به برنامه خود طرح (Theme) بدهیم؟ Theme بخشی از سلسله مراتبی از اجزاء به عنوان سایر تابع‌های Composable است. (MaterialTheme نمونه ای از این مورد است) MaterialTheme یک تابع Composable است که منعکس کننده اصول یک ظاهر طراحی شده از مشخصات طراحی Material است. در رابط کاربری ساده اصلی، ما می‌توانیم از MaterialTheme به شرح زیر استفاده کنیم: class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MaterialTheme { Greeting(name = "Android") } } } } از آنجا که Material Theme، یک لایه  بر روی Greeting است، Greeting با ویژگی‌های تعریف شده یک Theme طراحی شده است. ما می‌توانیم خصوصیات MaterialTheme را بازیابی کنیم و از آن‌ها برای تعریف استایل Text به این روش استفاده کنیم: @Composable fun Greeting(name: String) { Text ( text = "Hello $name!", modifier = Modifier.padding(24.dp), style = MaterialTheme.typography.h1 ) } متن ترکیب شده در مثال بالا سه آرگومان، یک String ،modifier و یک TextStyle را تنظیم می‌کند. می‌توانید TextStyle خود را ایجاد کنید، یا می‌توانید با استفاده از MaterialTheme.typography یک استایل تعریف شده از موضوع را بازیابی کنید. این MaterialTheme.typography به شما امکان دسترسی به استایل‌های متن تعریف شده، مانند h1 ،body1 یا subtitle1 را می‌دهد. در این مثال ما از h1  استفاده می‌کنیم. هر زمان که یک رنگ یا استایل متنی می‌خواهید، از یک تابع Composable از MaterialTheme.colors یا MaterialTheme.typography استفاده کنید. به عنوان مثال پیش نمایش را با این کد Refresh کنید: @Preview("Text preview") @Composable fun DefaultPreview() { MaterialTheme { Greeting("Android") } } حال تصویر زیر را مشاهده می‌کنید: ایجاد طرح برای برنامه بیایید یک طرح (Theme) برای برنامه خود ایجاد کنیم. یک فایل جدید با نام MyAppTheme.kt ایجاد کنید. از آنجا که ممکن است بخواهیم از MyAppTheme خود در مکان‌های مختلف برنامه (همه‌ی Activity ها) استفاده کنیم، یک تابع قابل استفاده مجدد ایجاد خواهیم کرد. import androidx.compose.Composable @Composable fun MyAppTheme(children: @Composable() () -> Unit) { // TODO } MaterialTheme پیکربندی رنگ‌ها و تایپوگرافی را در اختیار دارد. ما فقط در این مرحله رنگ‌ها را تغییر می‌دهیم تا به طراحی مورد نظر خود برسیم. import androidx.compose.Composable import androidx.ui.graphics.Color import androidx.ui.material.MaterialTheme import androidx.ui.material.lightColorPalette val green = Color(0xFF1EB980) private val themeColors = lightColorPalette( primary = green, surface = Color.DarkGray, onSurface = green ) @Composable fun MyAppTheme(children: @Composable() () -> Unit) { MaterialTheme(colors = themeColors) { children() } } شما می‌توانید از رنگ موجود دیگری نیز استفاده کنید. import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.compose.Composable import androidx.ui.core.Modifier import androidx.ui.core.setContent import androidx.ui.foundation.Text import androidx.ui.layout.padding import androidx.ui.material.MaterialTheme import androidx.ui.material.Surface import androidx.ui.tooling.preview.Preview import androidx.ui.unit.dp class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MyAppTheme { Surface { Greeting("Android") } } } } } @Composable fun Greeting2(name: String) { Text ( text = "Hello $name!", modifier = Modifier.padding(24.dp), style = MaterialTheme.typography.h1 ) } @Preview("Text preview") @Composable fun DefaultPreview() { MyAppTheme { Surface { Greeting("Android") } } } اگر پیش نمایش را Refresh کنید، شکل زیر را مشاهده خواهید کرد: جمع‌بندی: در این مقاله بعضی از آخرین تغییرات دنیای طراحی رابط کاربری اندروید (Jetpack Compose) را تجربه کردید. اما این فقط گوشه کوچکی از سطح وسیع تغییرات پیش روی جت پک کامپوز بود. ما باید منتظر نسخه پایدار این کتابخانه باشیم. این کتابخانه دنیای جدیدی از طراحی رابط کاربری را برای ما به ارمغان می‌آورد و به ما این امکان را می‌دهد تا سرعت توسعه برنامه هایمان را بالا ببریم و از امکانات جدید و بروز استفاده کنیم، اگر سوال یا تجربه ای در استفاده از Jetpack Compose دارید خوشحال می‌شویم که با ما به اشتراک بگذاریم.

ادامه مطلب ..
24-Sep-2019 ابزار و فناوری
ابزار و فناوری
ابزار و فناوری

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry&rsquo;s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

ادامه مطلب ..
24-Sep-2019 هفته مد
کسب و کار
هفته مد

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry&rsquo;s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

ادامه مطلب ..
24-Sep-2019 چرا این برنامه را برای پروژه خود انتخاب می کنید؟
ابزار و فناوری
چرا این برنامه را برای پروژه خود انتخاب می کنید؟

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry&rsquo;s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

ادامه مطلب ..
24-Sep-2019 بورس سهام
کسب و کار
بورس سهام

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry&rsquo;s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

ادامه مطلب ..
18-Sep-2019 فناوری اطلاعات جهانی
ابزار و فناوری
فناوری اطلاعات جهانی

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry’s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

ادامه مطلب ..
18-Sep-2019 تجارت جهانی
کسب و کار
تجارت جهانی

تجارت بین الملل آنچه در این مطلب خواهید خواند مبادله آزاد، عادلانه و متقابل کالا و خدمات بین دو کشور تحت عنوان تجارت بین الملل یاد می شود. این امر شامل صادرات و واردات کالاهایی است که هدف آن تأمین نیاز خاص، تأمین خواسته های موجود یا عملکرد متناسب با سبد اقتصادی یک کشور است. نیاز به انجام تجارت جهانی در درجه اول از توزیع ناهموار منابع طبیعی ناشی می‌شود. این امر منجر به تقسیم کار، توسعه دانش فنی و کاهش هزینه‌های مقایسه‌ای می شود، بنابراین برخی از کشورها برای تولید کالاها یا خدمات خاص از شرایط مناسب‌تری برخوردار می‌شوند. جریان روان تجارت بین الملل تضمین می کند که اقتصاد جهانی علی رغم اختلافات سیاسی، اجتماعی و فرهنگی همچنان به رشد خود ادامه دهد. در چند دهه گذشته، سناریوی تجارت بین الملل دامنه خود را با جهش و گسترش افزایش داده است. این رقم از 611.81 میلیارد دلار ناچیز در سال 1950 به رقم فوق العاده 19453 میلیارد دلار در سال 2018 رسیده بود! به همین دلیل است، برای هر کسی که مایل به فعالیت در زمینه تجارت بین المللی باشد، کسب درک دقیق از انواع اساسی تجارت جهانی بسیار مهم می شود. همچنان با شرکت سپاهان همراه ارائه دهنده خدمات ترخیص کالا ، واردات کالا از چین ، واردات کالا از دبی و حمل بار هوایی و حمل دریایی کالا همراه باشید. تجارت بین المللی چگونه کار می کند؟ تجارت بین الملل باعث ایجاد اقتصاد جهانی می شود که در آن عرضه و تقاضا و بنابراین قیمت ها هم تحت تأثیر وقایع جهانی قرار می گیرند. به عنوان مثال، تغییر سیاسی در آسیا می تواند منجر به افزایش هزینه نیروی کار شود و از این طریق هزینه های تولید برای یک شرکت کفش ورزشی آمریکایی مستقر در مالزی افزایش یابد ، که در نتیجه منجر به افزایش قیمت شارژ در بازار محلی شما می شود. از طرف دیگر، کاهش در هزینه کار باعث می شود که شما مجبور به پرداخت هزینه کمتری برای کفش های جدید خود شوید.   افزایش کارایی معاملات در سطح جهانی تجارت جهانی به کشورهای ثروتمند این امکان را می دهد تا از منابع خود – اعم از نیروی کار، فناوری یا سرمایه – با استفاده مؤثرتر کنند. از آنجا که کشورها دارای دارایی و منابع طبیعی مختلف (زمین، نیروی کار، سرمایه و فناوری) هستند، برخی از کشورها ممکن است همان کالاها را با کارآیی بیشتری تولید کنند و بنابراین آن را ارزان تر از سایر کشورها می فروشند. اگر یک کشور نتواند کالایی مؤثر تولید کند، می تواند با تجارت با کشور دیگری که می تواند، آن را به دست آورد. این امر به عنوان تخصص در تجارت بین المللی شناخته می شود. تجارت آزاد در مقابل حمایت گرایی مانند تمام تئوری‌ها، نظرات مخالف نیز وجود دارد. تجارت بین الملل دو دیدگاه متضاد در مورد سطح کنترل اعمال شده بر تجارت دارد: تجارت آزاد و حمایت. تجارت آزاد ساده تر از دو نظریه است: یک رویکرد laissez-fa، بدون محدودیت در تجارت. ایده اصلی این است که عوامل عرضه و تقاضا، که در مقیاس جهانی کار می کنند، اطمینان حاصل می کنند که تولید به طور مؤثر اتفاق می افتد. بنابراین، برای حفاظت یا ترقی تجارت و رشد، هیچ کاری نباید انجام شود، زیرا نیروهای بازار این کار را بطور خودکار انجام می دهند. در مقابل، حمایت گرایی معتقد است که تنظیم تجارت بین المللی برای اطمینان از عملکرد صحیح بازارها مهم است. طرفداران این نظریه معتقدند که ناکارآمدی بازار ممکن است مزایای تجارت بین المللی را مختل کند و هدف آنها هدایت بازار بر این اساس است. حمایت از گرایش به اشکال مختلف وجود دارد، اما متداول ترین آنها تعرفه یارانه و سهمیه است. این استراتژی ها سعی در اصلاح هرگونه ناکارآمدی در بازار بین المللی دارند. از آنجایی که این فرصت را برای تخصص و همچنین استفاده بیشتر از منابع باز می کند، تجارت بین المللی این توانایی را دارد که ظرفیت یک کشور را در تولید و دستیابی به کالاها به حداکثر برساند. با این وجود مخالفان تجارت آزاد جهانی اظهار داشتند كه تجارت بین الملل هنوز هم می تواند كشورهای در حال توسعه را به خطر بیاندازد. آنچه مسلم است این است که اقتصاد جهانی در حال تغییر و تحول مداوم است و هرچه توسعه یابد، مشارکت کنندگان آن نیز باید توسعه داشته باشند. انواع تجارت بین الملل  برای اهداف کاری، تجارت بین الملل به سه نوع عمده تقسیم می شود. که شامل : واردات به بیان ساده تر ، واردات به معنای خرید کالاها و خدمات از یک کشور خارجی است زیرا نمی توان آنها را به مقدار کافی یا با هزینه رقابتی در کشور خود تولید کرد. به عنوان مثال ، هند 82 درصد از نفت خام مورد نیاز خود را از کشورهایی مانند امارات و ونزوئلا وارد می کند. دلیل این امر این است که این کشورها دارای میدان های نفتی عظیم هستند. به همین ترتیب ، امارات متحده عربی محصولات کشاورزی و پوشاک را از هند وارد می کند زیرا واردات این محصولات به جای تولید در کشور خود ، آسان تر و ارزان تر است. صادرات صادرات کاملاً مشابه همتای وارداتی خود نوعی تجارت بین المللی است که متکی به فروش کالاها و خدمات تولید داخل به کشورهای خارجی است. از نظر تئوری ، این دقیقاً برعکس واردات در نظر گرفته شده است. به عنوان مثال ، هند مواد شیمیایی غیر آلی، دانه های روغنی، سنگ معدن خام، آهن و فولاد، پلاستیک و محصولات لبنی را به کشوری مانند چین صادر می کند. در عوض، چین تجهیزات الکتریکی، مواد شیمیایی آلی، ابریشم، سوخت های معدنی و کودها را به هند صادر می کند. این کالاها بین هر دو کشور مبادله می شوند تا بتوانند از ظرفیت تولید مربوطه خود نهایت استفاده را ببرند. صادرات مجدد  به عبارت ساده، یک شکل خاص از تجارت بین المللی است که شامل هر دو تجارت واردات و صادرات است. کالاها و خدمات از یک کشور وارد می‌شوند تا بتوانند بیشتر به کشور دیگری صادر شوند. این بدان معناست که کالاهای وارداتی برای مصرف یا فروش در کشور وارد کننده استفاده نمی شود. در عوض، کشور وارد کننده فقط مقداری ارزش کالا را قبل از صادرات دوباره آن اضافه می کند. به عنوان مثال، اگر هند لاستیک را از تایلند وارد کند،و آن را دوباره به کشور دیگری مانند ژاپن صادر کند، از آن به عنوان صادرات مجدد یاد می شود. بیشتر کشورها به دلایل زیر صادرات مجدد می کنند: عدم دسترسی یا ارتباط مستقیم بین هر دو کشور امکانات فراوری (تکنولوژی ساخت) یا تدارکات بهتر با یک کشور سوم در دسترس است عدم توافق تجاری بین دو کشور در کشور واردکننده مالیات تجاری در تسهیلات بانکی موجود نیست   مزایای تجارت بین الملل  تجارت بین الملل مزایای استراتژیک متنوعی را برای همه کشورهای درگیر به همراه دارد. که شامل: کشورها می توانند منحصراً بر تولید کالاها و خدماتی متمرکز شوند که مختص جغرافیا، مهارت ها و ظرفیت آنها باشد. این یک فرهنگ تمایز و تخصص است. تجارت بین الملل یک کشور را قادر می سازد کالاها و خدمات با کیفیت بالا و قیمت های فوق العاده مقرون به صرفه بدست آورد تا نیازها و نیازهای خاص مردم آن برآورده شود. تجارت جهانی باعث ایجاد جریان رقابت در بازار محلی می شود. تولیدکنندگان و تأمین کنندگان داخلی با هدف منحصر به فرد کردن رقابت خارجی ، ظرفیت های خود را تقویت می کنند. برای تسهیل تجارت بین الملل ، تعدادی از کشورها شروع به انعقاد قراردادهای تجاری منحصر به فرد کرده اند. این موافقت نامه ها بر انتقال فناوری از کشورهای پیشرفته تر به کشورهای کمتر توسعه یافته تأکید دارند و در نتیجه آنها می توانند توانایی های تولیدی خود را بهبود بخشند. دنیای تجارت بین الملل همچنین از نظر ایجاد شغل و تأمین اشتغال درهای زیادی را باز می کند. کشورهایی که با یکدیگر معامله می کنند در مقایسه با همتایان غیر تجاری خود تمایل به ایجاد فرصت های حرفه ای بیشتری دارند. معایب تجارت بین المللی با این حال، تجارت بین الملل، اگر بدون بررسی و کنترل انجام شود، امکان ایجاد چند معایب را نیز دارد. که شامل: وابستگی بیش از حد برای کالا و خدمات به کشورهای دیگر هزینه های بالای حمل و نقل ، ارتباطات، مسافت و تدارکات خطر و عدم اطمینان در تجارت جهانی به دلیل حوادث غیرمترقبه محدودیت های وارداتی ، صادراتی و گمرکی توسط دولت اسناد ، ارز ، اطلاعات و مشکلات مبتنی بر پرداخت عدم درک صحیح از بازارهای خارجی علیرغم چنین نقاط ضعفی، تجارت بین المللی، با گذشت زمان ، همچنان در مرزهای مختلف جغرافیایی رونق و شکوفایی داشته است. دارا بودن سال‌ها تجربه در زمینه حمل و نقل بین المللی بار در سراسر دنیا (به ویژه چین و دبی) و کسب مجوزهای لازم جهت حمل بین المللی، شرکت بازرگانی سپاهان همراه را به عنوان یکی از معتبرترین و ایمن‌ترین مجموعه‎های ارائه‌دهنده خدمات صادرات و واردات تبدیل نموده است. این مجموعه تمامی صادرات و واردات، ترخیص کالا، حمل هوایی و حمل دریایی و دیگر خدمات مربوط به واردات و صادرات کالا، از جمله انبارداری در مبدا، تنظیم اسناد، جابجایی، بارگیری و تحویل بار، خدمات کارگو و حمل هوایی اکسپرس را به اقصی نقاط دنیا و همچنین در گمرکات کشور به صورت Door to Door انجام می دهد.

ادامه مطلب ..