حالا کتابخانه را به پروژه خود اضافه کنید .
خوب ما نیاز به یک کلاس Application داریم که نقش دریافت کننده ی اطلاعات را دارد . راحت بگم که وقتی ما اطلاعاتی به کاربران ارسال میکنیم ، باید در یک بستر ارائه بشوند و ما باید این بستر را آماده کنیم .
یک کلاس به هر نامی که میخواهید بسازید . مثلا در این آموزش ما فایل G.java را میسازیم .
@androiddevelop
کد زیر را در فایل قرار دهید :
package PACKAGE NAME HERE;
import android.app.Application;
import android.content.Context;
import com.parse.Parse;
import com.parse.ParseACL;
import com.parse.ParseInstallation;
import com.parse.ParsePush;
import com.parse.ParseUser;
import com.parse.PushService;
/**
* Created by Mohammad on 10/25/2015.
* www.mhr-developer.com
*/
public class G extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
Parse.initialize(this, "APPLICATION ID", "CLIENT ID");
ParseInstallation.getCurrenbtInstallation().saveInBackground();
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
defaultACL.setPublicReadAccess(true);
ParseACL.setDefaultACL(defaultACL, true);
PushService.setDefaultPushCallback(this, MainActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();
}
}
خوب ما نیاز به یک کلاس Application داریم که نقش دریافت کننده ی اطلاعات را دارد . راحت بگم که وقتی ما اطلاعاتی به کاربران ارسال میکنیم ، باید در یک بستر ارائه بشوند و ما باید این بستر را آماده کنیم .
یک کلاس به هر نامی که میخواهید بسازید . مثلا در این آموزش ما فایل G.java را میسازیم .
@androiddevelop
کد زیر را در فایل قرار دهید :
package PACKAGE NAME HERE;
import android.app.Application;
import android.content.Context;
import com.parse.Parse;
import com.parse.ParseACL;
import com.parse.ParseInstallation;
import com.parse.ParsePush;
import com.parse.ParseUser;
import com.parse.PushService;
/**
* Created by Mohammad on 10/25/2015.
* www.mhr-developer.com
*/
public class G extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
Parse.initialize(this, "APPLICATION ID", "CLIENT ID");
ParseInstallation.getCurrenbtInstallation().saveInBackground();
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
defaultACL.setPublicReadAccess(true);
ParseACL.setDefaultACL(defaultACL, true);
PushService.setDefaultPushCallback(this, MainActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();
}
}
توجه کنید که اگر فایل شما G.java نیست ، نام کلاس را تغییر دهید .
نام PACKAGE NAME را به پکیج نیم نرم افزار تغییر دهید .
عبارات APPLICATION ID و CLIENT ID به کلید های بدست آمده از پارسه تغییر دهید .
همان طور که میبینید بنده در بخش set default push callback عبارت MainActivity.class را وارد کردم . این کتابخانه اطلاعات بدست آمده در جیسون را به یک کلاس باید به صورت Intent ارسال کند. من برای راحتی کار نام کلاس را ، نام کلاس اصلی برنامه وارد کردم ولی میتوانید برای منظم شدن یک اکتیویتی جدید برای این منظور بسازید .
@androiddevelop
خوب حالا کلاس ما آماده است .
حالا باید Manifest را تغییر دهیم .
ما باید هم سرویس ها را برای نرم افزار تعریف کنیم هم اینکه دسترسی ها را فعال کنیم .
کد زیر را قبل از بستن manifest اضافه کنید ( این کد ها مربوط به دسترسی ها میباشند )
نام PACKAGE NAME را به پکیج نیم نرم افزار تغییر دهید .
عبارات APPLICATION ID و CLIENT ID به کلید های بدست آمده از پارسه تغییر دهید .
همان طور که میبینید بنده در بخش set default push callback عبارت MainActivity.class را وارد کردم . این کتابخانه اطلاعات بدست آمده در جیسون را به یک کلاس باید به صورت Intent ارسال کند. من برای راحتی کار نام کلاس را ، نام کلاس اصلی برنامه وارد کردم ولی میتوانید برای منظم شدن یک اکتیویتی جدید برای این منظور بسازید .
@androiddevelop
خوب حالا کلاس ما آماده است .
حالا باید Manifest را تغییر دهیم .
ما باید هم سرویس ها را برای نرم افزار تعریف کنیم هم اینکه دسترسی ها را فعال کنیم .
کد زیر را قبل از بستن manifest اضافه کنید ( این کد ها مربوط به دسترسی ها میباشند )
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
حالا باید سرویس ها را تعیین کنیم .
کد زیر را در پایان تگ application تعریف میکنیم .
<service android:name="com.parse.PushService"/>
<receiver android:name="com.parse.ParseBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.USER_PRESENT"/>
</intent-filter>
</receiver>
این کد ریسیور را برای دریافت اطلاعات فعال میکند .
حالا باید کلاس اپلیکیشن مان را تعریف کنیم .
کد زیر را به عنوان صفت به <application> اضافه کنید .
android:name=".G"
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
حالا باید سرویس ها را تعیین کنیم .
کد زیر را در پایان تگ application تعریف میکنیم .
<service android:name="com.parse.PushService"/>
<receiver android:name="com.parse.ParseBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.USER_PRESENT"/>
</intent-filter>
</receiver>
این کد ریسیور را برای دریافت اطلاعات فعال میکند .
حالا باید کلاس اپلیکیشن مان را تعریف کنیم .
کد زیر را به عنوان صفت به <application> اضافه کنید .
android:name=".G"
Intent newiIntent = getIntent();
if (newiIntent != null && newiIntent.hasExtra("com.parse.Data")) {
try {
JSONObject json = new JSONObject(newiIntent.getExtras().getString("com.parse.Data"));
String url = json.getString("uri");
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
catch (JSONException e) {
Log.d("TAG", "JSONException: " + e.getMessage());
}
}
همان طور که میبینید هر اطلاعاتی که در JSON قرار دادیم را میتوانیم از Intent دریافت کنیم .
@androiddevelop
اما شاید بپرسید خوب عنوان و توضیحات چی شدند ؟
فایل G.java را باز کنید . همانطور که میبینید نوتیفیکیشن با استفاده از کتابخانه ساخته میشود .
در اصل ما این کار را انجام میدهیم .
زمانی که اطلاعاتی را در G دریافت کردیم آن ها را به MainActivity.class ارسال میکنیم . حالا میتوانیم در MainActivity از این اطلاعات استفاده کنیم . من به صورت پیشفرض تصور کردم که JSON ما حتما uri دارد و من این آدرس را باز میکنم . حالا میتوانستم حتی این مقدار را Toast کنم . همه چیز به ما بستگی دارد 😉
ارسال اولین پوش با استفاده از parse
خوب حالا در پنل مدیریت Push را انتخاب کنید .
if (newiIntent != null && newiIntent.hasExtra("com.parse.Data")) {
try {
JSONObject json = new JSONObject(newiIntent.getExtras().getString("com.parse.Data"));
String url = json.getString("uri");
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
catch (JSONException e) {
Log.d("TAG", "JSONException: " + e.getMessage());
}
}
همان طور که میبینید هر اطلاعاتی که در JSON قرار دادیم را میتوانیم از Intent دریافت کنیم .
@androiddevelop
اما شاید بپرسید خوب عنوان و توضیحات چی شدند ؟
فایل G.java را باز کنید . همانطور که میبینید نوتیفیکیشن با استفاده از کتابخانه ساخته میشود .
در اصل ما این کار را انجام میدهیم .
زمانی که اطلاعاتی را در G دریافت کردیم آن ها را به MainActivity.class ارسال میکنیم . حالا میتوانیم در MainActivity از این اطلاعات استفاده کنیم . من به صورت پیشفرض تصور کردم که JSON ما حتما uri دارد و من این آدرس را باز میکنم . حالا میتوانستم حتی این مقدار را Toast کنم . همه چیز به ما بستگی دارد 😉
ارسال اولین پوش با استفاده از parse
خوب حالا در پنل مدیریت Push را انتخاب کنید .
حالا در منوی بالا سمت راست روی گزینه ی Send a push کلیک کنید .
اگر با پیام No registered devices مواجه شدید بدین معنا است که تا الان هیچ دستگاهی برای این نرم افزار ثبت نشده است . لطفا یک بار نرم افزار را در دستگاهتان اجرا کنید تا دستگاه شما Register شود .
حالا برای شما یک فرم باز میشود که شما باید در آن اطلاعات پوش تان را انتخاب کنید .
در بخش Write Your Message بهتر است یک رشته ی جیسون به شکل زیر وارد نمایید .
سپس Message Type را Json انتخاب نمایید .
اگر با پیام No registered devices مواجه شدید بدین معنا است که تا الان هیچ دستگاهی برای این نرم افزار ثبت نشده است . لطفا یک بار نرم افزار را در دستگاهتان اجرا کنید تا دستگاه شما Register شود .
حالا برای شما یک فرم باز میشود که شما باید در آن اطلاعات پوش تان را انتخاب کنید .
در بخش Write Your Message بهتر است یک رشته ی جیسون به شکل زیر وارد نمایید .
سپس Message Type را Json انتخاب نمایید .
{"alert" :"App Summary",
"noscript":"App Name",
"uri":"bazaar://details?id=com.example.name"}
لینک آموزش در سایت شخصی آقای محمد حسینی راد استاد جدید تیم ما 😎:
http://mhr-developer.com/1394/09/28/%d8%a7%d8%b6%d8%a7%d9%81%d9%87-%da%a9%d8%b1%d8%af%d9%86-%d9%82%d8%a7%d8%a8%d9%84%db%8c%d8%aa-%d9%be%d9%88%d8%b4-%d9%86%d9%88%d8%aa%db%8c%d9%81%db%8c%da%a9%db%8c%d8%b4%d9%86-%d8%a8%d8%a7-%d8%a7%d8%b3/
"noscript":"App Name",
"uri":"bazaar://details?id=com.example.name"}
لینک آموزش در سایت شخصی آقای محمد حسینی راد استاد جدید تیم ما 😎:
http://mhr-developer.com/1394/09/28/%d8%a7%d8%b6%d8%a7%d9%81%d9%87-%da%a9%d8%b1%d8%af%d9%86-%d9%82%d8%a7%d8%a8%d9%84%db%8c%d8%aa-%d9%be%d9%88%d8%b4-%d9%86%d9%88%d8%aa%db%8c%d9%81%db%8c%da%a9%db%8c%d8%b4%d9%86-%d8%a8%d8%a7-%d8%a7%d8%b3/
MHRDev
اضافه کردن قابلیت پوش نوتیفیکیشن با استفاده از پارسه - MHRDev
سلام دوستان . امیدوارم حالتان خوب باشد . محمد حسینی راد هستم و با آموزش کار با ابزار پوش نوتیفیکیشن در پارسه با شما هستم . دانلود PDF این مطلب برای دانلود PDF بر روی لینک زیر کلیک کنید : برای مشاهده ی صفحه ی دانلود کلیک کنید پوش نوتیفیکیشن چیست ؟ شاید شما…
#پی_دی_اف #پوش_نوتیفیکیشن #پارسه #محمد_حسینی_راد
پی دی اف آموزشی این جلسه
👇👇👇👇👇👇👇
پخش اختصاصی از کانال
@androiddevelop
پی دی اف آموزشی این جلسه
👇👇👇👇👇👇👇
پخش اختصاصی از کانال
@androiddevelop
#ربات
آموزش های قبلی کانال رو به صورت دسته بندی شده می تونین از طریق ربات اندرویدی ما به آدرس
https://telegram.me/androidi_bot?start
دریافت کنین.
آموزش های قبلی کانال رو به صورت دسته بندی شده می تونین از طریق ربات اندرویدی ما به آدرس
https://telegram.me/androidi_bot?start
دریافت کنین.
Forwarded from ایمان مدائنی
#اطلاعیه
سلام دوستان بابت کم شدن تعداد مطالب عرض کنم که شرمنده بخاطر امتحانات دانشگاه کم تر وقت می کنیم مطلب بذاریم ولی حتما بعد امتحانات با انرژی چند برابر کار می کنیم و اساتید کانال در حال آماده سازی آموزش ها هستن .
یه توضیح کلی در مورد مطالب و نحوه کار ما :
شما یه کلاس آموزشگاهی اندروید رو در نظر بگیرین که هفته ای یه جلسه مثلا کلاس هست و مطالب از پایه شروع میشه تا پیشرفته که اگر بخواین هر سه نوع کلاس رو برین حداقل یه ملیون هزینه میشه ! ما اینجا براتون یه کلاسو شبیه سازی کردیم چون تمام اساتید خودشون مدرس هستن مطالب از پایه شروع شده و تا پیشرفته ادامه داره و الان در سطح متوسط هستیم اما فرق کلاس با کانال اینه که در کانال بیشتر به مطالبی که هر جایی پیدا نمیشه و ناب هستن پرداخته میشه و مطالب به صورت موضوعی بیان میشن . در حال حاظر آموزش های #آموزش_کلاس_انیمیت که توسط خانم الهامی تدریس میشه یه مبحث مهم در اندروید هست که بیشتر سایت ها و فیلم های آموزشی صرفا چند تا دستور ساده می گن اما ما از صفر تا صدش رو طی حداقل 4 جلسه بهتون آموزش میدیم و یا #متریال_دیزاین که آموزش خوب به زبان فارسی براش نیست رو به صورت ویدئویی آموزش میدیم و کاملا رایگان و مطالب بخش #اعماق_اندروید و مقالات #بازار_کار و ... رو جای دیگه اصلا نمی تونین پیدا کنین 💙 خانم مقاری هم از سطح مقدماتی تا متوسطه رو حدودا آموزش میدن . پس اولا لطفا با ما همراه باشین و این نکته رو در نظر داشته باشین که هر مطلب زمان زیادی رو میبره وقتی اختصاصی باشه ! و مطمئن باشین اگر تا آخر کار کناره ما باشین به نتیجه های خوبی میرسین 😉 . پس در زمان امتحانات تاخیر در آموزش ها رو ببخشین و جبران می کنیم 😊.
📢📢توجه:
کلاس های حضوری هم به زودی برگزار میشه و اینکه هیچ خللی به آموزش های کانال وارد نمی کنه بلکه قوی ترم می کنه ولی برای دوستانی که می خوان سریعتر یاد بگیرن کاملا مناسبه ... کلاس ها در شهر تهران و قم هست و حدود قیمت 300 تومان برای 30 ساعت در تهران کلاس مقدماتی اطلاعات کامل بهتون داده میشه 😊.
دوستان جدیدی که به کانال اومدن هم مطالب قبلی به صورت دسته بندی شده در
https://telegram.me/androidi_bot?start
موجوده و همچنین می تونن عضو گروه پرسش و پاسخ ما بشن .
📛قبل از عضویت حتما قوانینو بخونین ممنون 📛
لینک ورود:
https://telegram.me/joinchat/B1f7ETv_ZoJDk2dr0ES0rQ
توجه:برای عضویت حتما تلگرام خودتونو آپدیت کنین .
قوانین و نکات قابل توجه :📣📣
1-لطفا اول به هر مشکلی ک خوردین در گوگل سرچ کنین و اگر به نتیجه نرسیدین در گروه سوالتونو مطرح کنین و صبر کنین تا دوستان جواب بدن.
2-هر گونه تبلیغات در گروه ممنوع می باشد .
3-سوالاتو در قالب یک پیام و با هشتگ #سوال ارسال کنین تا هم باعث اسپم شدن گروه نشین هم سوال و جواب های درست خودشون یه منبع آموزنده و مفید برای بقیه اعضا می تونه باشه.جواب ها هم با هشتگ #پاسخ گذاشته بشه.
4-حتما برنامه نویسان محترم هم بیان تا بتونن به دوستان کمک کنن و این نکته رو در نظر داشته باشین که دوستان وظیفه پاسخ گویی ندارن و لطف می کنن پاسخ میدن !
5-دوستان می تونن لینک برنامه ی خودشون رو فقط یک برنامه با هشتگ #بررسی_برنامه در گروه قرار بدن و صبر کنن تا دوستان در مورد برنامه نظر بدن.
6-فقط و فقط سوالات اندرویدی و یا جاوا جواب داده می شود و پرسیدن سوالات دیگر ممنوع است.
انشا... گروه هم آموزنده و مفید باشه و همه دوستان قوانین رو رعایت کنند! موفق باشین .
سلام دوستان بابت کم شدن تعداد مطالب عرض کنم که شرمنده بخاطر امتحانات دانشگاه کم تر وقت می کنیم مطلب بذاریم ولی حتما بعد امتحانات با انرژی چند برابر کار می کنیم و اساتید کانال در حال آماده سازی آموزش ها هستن .
یه توضیح کلی در مورد مطالب و نحوه کار ما :
شما یه کلاس آموزشگاهی اندروید رو در نظر بگیرین که هفته ای یه جلسه مثلا کلاس هست و مطالب از پایه شروع میشه تا پیشرفته که اگر بخواین هر سه نوع کلاس رو برین حداقل یه ملیون هزینه میشه ! ما اینجا براتون یه کلاسو شبیه سازی کردیم چون تمام اساتید خودشون مدرس هستن مطالب از پایه شروع شده و تا پیشرفته ادامه داره و الان در سطح متوسط هستیم اما فرق کلاس با کانال اینه که در کانال بیشتر به مطالبی که هر جایی پیدا نمیشه و ناب هستن پرداخته میشه و مطالب به صورت موضوعی بیان میشن . در حال حاظر آموزش های #آموزش_کلاس_انیمیت که توسط خانم الهامی تدریس میشه یه مبحث مهم در اندروید هست که بیشتر سایت ها و فیلم های آموزشی صرفا چند تا دستور ساده می گن اما ما از صفر تا صدش رو طی حداقل 4 جلسه بهتون آموزش میدیم و یا #متریال_دیزاین که آموزش خوب به زبان فارسی براش نیست رو به صورت ویدئویی آموزش میدیم و کاملا رایگان و مطالب بخش #اعماق_اندروید و مقالات #بازار_کار و ... رو جای دیگه اصلا نمی تونین پیدا کنین 💙 خانم مقاری هم از سطح مقدماتی تا متوسطه رو حدودا آموزش میدن . پس اولا لطفا با ما همراه باشین و این نکته رو در نظر داشته باشین که هر مطلب زمان زیادی رو میبره وقتی اختصاصی باشه ! و مطمئن باشین اگر تا آخر کار کناره ما باشین به نتیجه های خوبی میرسین 😉 . پس در زمان امتحانات تاخیر در آموزش ها رو ببخشین و جبران می کنیم 😊.
📢📢توجه:
کلاس های حضوری هم به زودی برگزار میشه و اینکه هیچ خللی به آموزش های کانال وارد نمی کنه بلکه قوی ترم می کنه ولی برای دوستانی که می خوان سریعتر یاد بگیرن کاملا مناسبه ... کلاس ها در شهر تهران و قم هست و حدود قیمت 300 تومان برای 30 ساعت در تهران کلاس مقدماتی اطلاعات کامل بهتون داده میشه 😊.
دوستان جدیدی که به کانال اومدن هم مطالب قبلی به صورت دسته بندی شده در
https://telegram.me/androidi_bot?start
موجوده و همچنین می تونن عضو گروه پرسش و پاسخ ما بشن .
📛قبل از عضویت حتما قوانینو بخونین ممنون 📛
لینک ورود:
https://telegram.me/joinchat/B1f7ETv_ZoJDk2dr0ES0rQ
توجه:برای عضویت حتما تلگرام خودتونو آپدیت کنین .
قوانین و نکات قابل توجه :📣📣
1-لطفا اول به هر مشکلی ک خوردین در گوگل سرچ کنین و اگر به نتیجه نرسیدین در گروه سوالتونو مطرح کنین و صبر کنین تا دوستان جواب بدن.
2-هر گونه تبلیغات در گروه ممنوع می باشد .
3-سوالاتو در قالب یک پیام و با هشتگ #سوال ارسال کنین تا هم باعث اسپم شدن گروه نشین هم سوال و جواب های درست خودشون یه منبع آموزنده و مفید برای بقیه اعضا می تونه باشه.جواب ها هم با هشتگ #پاسخ گذاشته بشه.
4-حتما برنامه نویسان محترم هم بیان تا بتونن به دوستان کمک کنن و این نکته رو در نظر داشته باشین که دوستان وظیفه پاسخ گویی ندارن و لطف می کنن پاسخ میدن !
5-دوستان می تونن لینک برنامه ی خودشون رو فقط یک برنامه با هشتگ #بررسی_برنامه در گروه قرار بدن و صبر کنن تا دوستان در مورد برنامه نظر بدن.
6-فقط و فقط سوالات اندرویدی و یا جاوا جواب داده می شود و پرسیدن سوالات دیگر ممنوع است.
انشا... گروه هم آموزنده و مفید باشه و همه دوستان قوانین رو رعایت کنند! موفق باشین .
#کتاب_اندرویدی
#Android_Programming_The_Big_Nerd_Ranch_Guide_Edition_2
دوستان کتاب☝ رو دو روزه کارمونه ورژن جدیدش رو براتون پیدا کنیم و آپلود کنیم 😊 .
این کتاب برای سال 2015 هستش و کاملا با اندروید استودیو توضیح داده و کاملا جامع هست .
1-آموزش اندروید با معماری MVC
2-کار با json و وب سرویس ها
3-کار با فرگمنت ها
4-متریال دیزاین
5-توضیح کامل با استفاده از دیاگرام و نمودار
6-کار با تسک ها و پروسس ها
7-کار با ترد ها و Async Task
و هزاران مبحث دیگه مخصوصا مباحث پایه که هر برنامه نویس اندرویدی باید اونا رو بدونه پس حتما این کتابو دانلود کنین .
📢توجه : این کتاب و کتاب های مفید دیگه ی اندروید در ربات اندرویدی ما موجوده از اونجا هم می تونین وارد بخش <کتاب های آموزشی 📕> بشین و دانلود کنین
https://telegram.me/androidi_bot?start
فایل #pdf کتاب 👇👇👇
#Android_Programming_The_Big_Nerd_Ranch_Guide_Edition_2
دوستان کتاب☝ رو دو روزه کارمونه ورژن جدیدش رو براتون پیدا کنیم و آپلود کنیم 😊 .
این کتاب برای سال 2015 هستش و کاملا با اندروید استودیو توضیح داده و کاملا جامع هست .
1-آموزش اندروید با معماری MVC
2-کار با json و وب سرویس ها
3-کار با فرگمنت ها
4-متریال دیزاین
5-توضیح کامل با استفاده از دیاگرام و نمودار
6-کار با تسک ها و پروسس ها
7-کار با ترد ها و Async Task
و هزاران مبحث دیگه مخصوصا مباحث پایه که هر برنامه نویس اندرویدی باید اونا رو بدونه پس حتما این کتابو دانلود کنین .
📢توجه : این کتاب و کتاب های مفید دیگه ی اندروید در ربات اندرویدی ما موجوده از اونجا هم می تونین وارد بخش <کتاب های آموزشی 📕> بشین و دانلود کنین
https://telegram.me/androidi_bot?start
فایل #pdf کتاب 👇👇👇
با سلام خدمت دوستان عزیز. من مقاری هستم و با جلسه یازدهم آموزش اندروید در خدمتتون هستم. میخوایم این جلسه به دو تا کار کاربردی دراندروید بپردازیم.
اول از همه کاری که دفعه قبل مطرح کردم رو کامل میکنیم. قرار بود یک تقویم فارسی بذاریم توی صفحه.
لینکی که خدمتتون دادم این بود:
http://smartlab.ir/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-persiandatepicker-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/
لینکی که خدمتتون دادم این بود:
http://smartlab.ir/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-persiandatepicker-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF/