برنامه نویسی موبایل اندروید

۴ مطلب در شهریور ۱۳۹۵ ثبت شده است

Bottom Sheets در اندروید

bottom-sheet

باتم شیت (Bottom sheet) یکی از امکانات متریال دیزاین می باشد، که به کتابخانه ی دیزاین ساپورت در ورژن 23.2 اضافه شده بود.  باتم شیت یک  پنجره بسیار ساده است که از پایین صفحه ظاهر می شود، و میتواند اطلاعات بیشتری به کاربر نشان دهد. نمونه ی باتم شیت را می توان در بعضی اپلیکیشن های گوگل و ویجت ها مشاهده کرد، مانند انتخاب مکان از Api ‌مکانی.
در این پست ، ما میخواهیم نحوه ی استفاده از باتم شیت در اپلیکیشن را به شما نشان دهیم. باتم شیت میتواند قسمتی از رابطه کاربری یا یک مدل موقت باشد. برای رسیدن به این امکانات،‌ امکاناتی را که کتابخانه ساپورت دیزاین برای شما فراهم می کند شامل :


BottomSheetBehavior  : میتواند در CoordinatorLayout استفاده شود.
BottomSheetDialog : که یک دیالوگ همراه با رفتار باتم شیت می باشد.
BottomSheetDialogFragment :  که بسطی از DialogFragment، که یک aBottomSheetDialog  ساخته به جای یک دیالوگ استاندارد.

برای شروع و استفاده باتم شیت در اپلیکیشن شما، کتابخانه ساپورت را به  dependecy  خود در فایل build.gradle  اضافه کنید.





compile 'com.android.support:design:'


ساخت یک باتم شیت ثابت : یک لی اوت با بهCoordinatorLayout به عنوان لایه ی اصلی بسازید،‌ س‍پس یک view یا layout برای باتم شیت،‌ بصورت آنکه فرزند مستقیم CoordinatorLayout درست کنید. لی اوت باتم شیت باید صفت app:layout_behavior را در خود داشته باشد،‌ با مقدار android.support.design.widget.BottomSheetBehavior. به عنوان مثال:


<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context="com.mayojava.sample.bottomsheetdemo.MainActivity">

   <!-- main content layout-->
   <RelativeLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:paddingBottom="@dimen/activity_vertical_margin"
       android:paddingLeft="@dimen/activity_horizontal_margin"
       android:paddingRight="@dimen/activity_horizontal_margin"
       android:paddingTop="@dimen/activity_vertical_margin">
       ......
   </RelativeLayout>

   <!-- bottom sheet layout -->
   <RelativeLayout
       android:id="@+id/linear_layout_bottom_sheet"
       android:layout_width="match_parent"
       android:layout_height="220dp"
       app:behavior_peekHeight="80dp"
       app:behavior_hideable="true"
       app:layout_behavior="@string/string_bottom_sheet_behavior"
       android:elevation="@dimen/z_bottom_sheet"
       android:background="@color/color_bottom_sheet">
       <TextView
           android:id="@+id/text_view_sheet_title"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="@string/text_pull_to_show_more"
           android:textSize="@dimen/text_size_medium"
           android:padding="@dimen/activity_vertical_margin"/>

       <TextView
           android:id="@+id/text_view_more_content"
           android:text="@string/text_more_contet_to_user"
           android:textSize="@dimen/text_size_big"
           android:textStyle="bold"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_below="@+id/text_view_sheet_title"
           android:paddingLeft="@dimen/activity_vertical_margin"
           android:paddingRight="@dimen/activity_vertical_margin"/>

       <Button
           android:text="@string/text_click_me"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_alignParentLeft="true"
           android:layout_marginLeft="@dimen/activity_vertical_margin"
           android:layout_marginRight="@dimen/activity_vertical_margin"

           android:layout_marginTop="@dimen/activity_vertical_margin" android:layout_below="@+id/text_view_more_content"/>

   </RelativeLayout>

</android.support.design.widget.CoordinatorLayout>

برای آنکه باتم شیت قابل نشان دادن شود،‌با نیاز به ساخت BottomSheetBehavior داریم. که با فراخوانی BottomSheetBehavior.from() انجام می شود،‌ با فرستادن ویویی که درست کردیم برای این فرخوانی استفاده می کنیم. اینکار از طریق Activity‌ که در آن از باتم شیت استفاده کردیم انجام می شود.



LinearLayout bottomSheetLayout  
    = (LinearLayout) findViewById(R.id.layout_bottom_sheet);

//get bottom sheet behavior from bottom sheet view
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(mLayoutBottomSheet);

با بازگشت به آبجکت BottomSheetBehavior،‌می تواند متد setState‌را فراخوانی کرد،‌ با فرستادن رفتار ثابت،‌که موقعیت باتم شیت را تحت تاثیر قرار می دهد.
  •  BottomSheetBehavior.STATE_EXPANDED : باتم شیت را به طور کامل باز می کند. 
  • BottomSheetBehavior.STATE_HIDE باتم شیت را به طور کامل از دید خارج می کند. 
  • BottomSheetBehavior.STATE_COLLAPSED ارتفاع باتم شیت را به همراه با تنظیم آن در اتریبیوت peekHeight .
//to expand the bottom sheet
mbottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);

//to collapse the bottom sheet
mbottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);

peekHeight ‌می تواند به عنوان پیش نمایش هنگامی که صفحه ظاهر می شود استفاده شود. از طریق اتریبیوت behavior_peekHeight در فایل xml‌ یا در کد،‌  با  فراخوانی setPeekHeighton  در آبجکت BottomSheetBehavior  استفاده شود.

);mbottomSheetBehavior.setPeekHeight(320);

ساخت یک مدل باتم شیت 


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

Create a class that extends BottomSheetDialogFragment, inflated with the layout that will be used as the content of the modal dialog.


یک کلاس بسازید که از BottomSheetDialogFragment   اکستند(extends ) شده باشد،‌ لی اوت را inflated کرده  که در اینجا به عنوان محتوای مدل دیالوگ ما استفاده می شود.


layout_custom_bottom_sheet.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <ImageView
        android:id="@+id/ic_image"
        android:src="@mipmap/ic_launcher"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="@dimen/margin_normal"
        android:layout_marginTop="@dimen/activity_vertical_margin"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello bottom sheet"
        android:textSize="@dimen/text_size_medium"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:layout_toRightOf="@+id/ic_image"
        android:layout_alignTop="@+id/ic_image"/>

    <TextView
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:layout_below="@+id/ic_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/text_lorem_ipsum"
        android:lineSpacingExtra="@dimen/margin_small"
        android:layout_marginBottom="@dimen/margin_normal"/>


</RelativeLayout>
یک instance  از از باتم شیت ساخته و با متد show‌ آن را نمایش دهید، با پاس دادن FragmentManager  و رشته ی tag‌  به عنوان  پارامتر.


CustomBottomSheetDialog bottomSheetDialog = CustomBottomSheetDialog.getInstance();
bottomSheetDialog.show(getSupportFragmentManager(), "Custom Bottom Sheet");

result_bottom_sheet
. کد کامل را می توانید از لینک روبه رو دانلود کنید
منبع : mayojava.github.io


۰ نظر موافقین ۰ مخالفین ۰
ُسینا رحیمی

نکته ریز : فرق بین Json Object وJson Array

زمانی JsonObject ‌است که از {} استفاده شود.

زمانی JsonArray است که از [] استفاده شود .

کاربرد آن  در وب سرویس می باشد.

* نکته ریز شامل نکاتی به صورت یاد آوری و کوتاه می باشد *
۰ نظر موافقین ۰ مخالفین ۰
ُسینا رحیمی

۸ مسئله که شما در اپ خود به اشتباه انجام می دهید

8tips

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


۱- شما یک راهنمای خوب ندارید ( یا حداقل مناسب کاربر نیست):

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


 چگونه یک راهنمای درست داشته باشیم: دولینگو، اپلیکیشن آموزش زبان، در داشتن راهنما برای کاربران جدید با پرسیدن سوال " سطح زبان آنها  چگونه است"، کارش را خوب انجام داده است.

Duoling

۲- اپلیکیشن شما شامل استراتژی بین کانالی نمی باشد:

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


انجام دادن درست بین کانالی : آمازون کار خود را عالی انجام داده است، او با اجازه دادن چرخش بین وب سایت  و اپ آنها بدون دست خوردن داده ها این کار را کرده است . هر رفتاری که در یک کانال انجام می شود در همه ی آنها ظاهر می شود تا یک تجربه ی ثابت را به شما بدهد. 

Amazon


۳. اپ شما یک روند ثبت نام دشوار را داراست.

کاربران اپلیکیشن راحت طلب هستند، به خاطر همین  هم است که بیشتر آنها تمایل دارند که با اکانت فیس بوک خود وارد شوند تا پرکردن یک فرم طولانی. این روند بسیار ساده است و همچنین مرحله های اضافی را از میان بر می دارد. اپلیکیشن هایی که این موضوع را می دانند و روند ورود را با تعامل بین شبکه ها به حد اقل رسانده اند می توانند بسیار موفق عمل کنند.


۴‌. اپلیکیشن شما به راحتی با اپ های دیگر ارتباط برقرار نمی کند:

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


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


snapchat

۵. آپ شما تجربه ی شخصی سازی را به کاربر نمی دهد:

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


اپ که شخصی سازی را به درستی انجام داده است: گوگل مپ اطلاعات شما را در مورد مکانهایی که در ارتباط بودید در می آورد. در مثال زیر، آنها قابلیت این را دارند که اگر مکانی که من میخواهم به آنجا برسم در زمان رسیدن بسته خواهد بود، و این اجازه را به می دهد که برنامه ام را عوض کنم.

googlemap


۶. اپلیکیشن شما کپی سایت شماست:

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


۷. اپ شما عملکرد ضعیفی دارد:

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


۸. هیچ استراتژی برای اپ خود ندارید:

جدا از داشتن استراتژی برای ورود به مارکت، شما احتیاج به داشتن یک استراتژی کامل از اینکه چگونه پیدا کردن کاربر، درگیر کردن آنها، و نگه داری آنها دارید. وقتی هنوز اپ شما زنده است، شانس برای این اقدامات هنوز باز است. 


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

منبع : localytics.com



۰ نظر موافقین ۰ مخالفین ۰
ُسینا رحیمی

11 نکته قبل از آنکه شروع به ساخت اپلیکیشن بکنید باید بدانید



حدود 4.43 میلیارد یوزر موبایل در سراسر دنیا در سال 2015 وجود دارند و این رقم شروع به زیاد شدن به 5.07 میلیارد در سال 2019 خواهد رسید.

. در حال حاظر 1.6 میلیون اپلیکیشن اندروید در پلی استوروجود دارد.

. حدود 1.5 میلیون اپلیکیشن ای او اس در اپ استور وجود دارند.


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

1- جست و جوی بسیار در مارکتهای موجود

قبل از وارد شدن به مارکت حتما باید تحقیق عمیق در آن داشته باشید. آنالیز کردن مارکت به شما این دید را می دهد که رقبای شما ، استراتژی آنها، نقاط ضعف و قدرت آنها چیست. این اطلاعات به شما کمک می کند که اشتباهات آنها را دوباره تکرار نکنید. حتما در نظرات کاربران نیز جست و جویی داشته باشید. این نظرات،  به شما در مورد علایق آنها در مورد آن اپلیکیشن خاص دید کافی می دهد.

بنابراین شما باید  قسمت های اذیت کننده را نکته برداری بکنید و سعی کنید که آنها را حل کنید. این استراتژی به شما شانس برنده شدن در مقابل رقبا را می دهد.


نمونه هایی از مارکت های معروف موجود:


android markets


2. بهره بری

من همیشه از این کاربرد ساده ی مانترا استفاده می کنم، " اگر کاری را انجام می دهید، آن را با 100 درصد بهره وری و درستی انجام دهید، اگرنه آن را انجام ندهید.". این چیزی است که کاربران از هر اپلیکیشنی که در حال حاضر وجود دارد طلب می کنند. وقتی می گویم کار آمد منظور ، تبادل بهینه در دیتا نیز می باشد. اپلیکیشنهای اسمارت فون ها که  اکثرا از دیتا 3G و4G استفاده می کنند دانلود می شوند و بعد فراموش می شوند، اگر شما می خواهید اپلیکیشن شما در این دسته بندی قرار نگیرد، مطمئن شوید که اپلیکیشن شما به صورت بهینه از دیتا استفاده می کند.



3.متفاوت باشید

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

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



4. کاربران را منتظر نگذارید

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




5- مخاطبان خود را بشناسید.

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

تمام این سوالات مانند چه کسی از این اپلیکیشن استفاده می کند، چگونه به آنها کمک می کند، همه باید از قبل به خوبی پاسخ داده شود.اگر شما انتظارات کاربران خود را در نظر بگیرید، اپلیکیشن شما بسیار محبوب خواهد شد.



6- استاد یک پلتفرم بشوید

یکی از مهمترین سوالات که شما باید قبل از ساخت اپلیکیشن از خود بپرسید این است که روی چند پلتفرم میخواهید اپلیکیشن خود را ارائه دهید؟ اگر شما نظر من را میخواهید، من پیشنهاد می دهم که اول یک پلتفرم را به خوبی به سرانجام برسانید و سپس روی پلتفرم های دیگر بروید.



7- روی استراتژی مارکتیگ خود تمرکز کنید

قیل از بیرون آمدن اپلیکیشن ، شما باید آن را به مردم معرفی کنید. اکثر سازندگان اپلیکیشن موبایل به شکست می خورند به دلیل آنکه برنامه مارکتیگ خاصی ندارند. به طور منتطقی، برنامه نویسان باید بازار اپلیکیشن خود را  2 الی 3 هفته از قیل از بیرون آمدن اپلیکیشن خود شروع کنند تا کاربران آشنا شوند.



8- اپلیکیشن خود را قبل از ورود به مارکت تست کنید

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

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


9- روی  توضیحات تاکید کنید

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

2 الی 3 خط اول توضیحات بسیار مهم است .


10. به طور کامل بودجه ی خود را بدانید.

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



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


منبع : www.devsaran.com


۱ نظر موافقین ۰ مخالفین ۰
ُسینا رحیمی