در دنیای برنامهنویسی اندروید، مدیریت اطلاعیهها یکی از مهارتهای ضروری است که برای توسعه برنامههای کاربرپسند و تعامل بهتر با کاربران مورد استفاده قرار میگیرد. در این مقاله، قصد داریم به بررسی “اطلاعیهها در Java” بپردازیم و تمامی جنبههای این موضوع را از سطح مبتدی تا پیشرفته پوشش دهیم. اگر شما تازه وارد دنیای آموزش Java هستید، این مقاله به شما کمک خواهد کرد تا به راحتی با فرآیند ارسال و مدیریت اطلاعیهها آشنا شوید. برای این منظور، با استفاده از مثالها و توضیحات ساده، هر بخش از موضوع را بهطور کامل شرح خواهیم داد.
ارسال و مدیریت Notifications در اندروید
اطلاعیهها (Notifications) ابزارهایی هستند که به توسعهدهندگان این امکان را میدهند تا به کاربران اطلاعات مهم را بدون نیاز به باز کردن اپلیکیشن نمایش دهند. این ابزار بهویژه در برنامههایی که نیاز به ارسال اطلاعات بهروز مانند پیامهای جدید، هشدارهای مهم یا تغییرات در وضعیت کاربر دارند، بسیار مفید است. اطلاعیهها میتوانند بهصورت پاپآپ در نوار وضعیت یا صفحه اصلی نمایش داده شوند و کاربر را از یک رویداد یا وضعیت خاص آگاه کنند.
ویژگیهای مهم Notification:
عنوان و متن اطلاعیه: عنوان میتواند یک پیام خلاصه یا سرخط اخبار باشد، در حالی که متن اطلاعیه میتواند جزئیات بیشتری از رویداد یا اطلاعات نمایش دهد.
آیکون اطلاعیه: آیکونی که برای شناسایی اطلاعیه استفاده میشود باید کوچک، ساده و مشخص باشد.
اولویت و نمایش در زمان مناسب: اطلاعیهها میتوانند اولویتبندی شوند تا اطلاعیههای با اهمیت بالاتر، توجه بیشتری جلب کنند.
دکمههای تعاملی: میتوانید دکمههایی برای پاسخ به اطلاعیهها اضافه کنید که به کاربر اجازه میدهد اقداماتی انجام دهد.
مراحل ارسال یک Notification ساده:
ایجاد یک Notification
برای ارسال یک اطلاعیه در اندروید، اولین گام ایجاد یک شیء از کلاس NotificationCompat.Builder است. این کلاس به شما اجازه میدهد تا ویژگیهای مختلف اطلاعیه مانند عنوان، متن، آیکون، اولویت، صدا و ویبره را تنظیم کنید.
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon) // آیکون کوچک اطلاعیه
.setContentTitle("عنوان اطلاعیه") // عنوان اطلاعیه
.setContentText("متن اطلاعیه") // متن اطلاعیه
.setPriority(NotificationCompat.PRIORITY_DEFAULT) // اولویت اطلاعیه
.setAutoCancel(true); // پس از کلیک کردن، اطلاعیه از نوار وضعیت حذف شود
setSmallIcon(): آیکون کوچک اطلاعیه را تعیین میکند که در نوار وضعیت نمایش داده میشود. این آیکون معمولاً باید ساده و واضح باشد.
setContentTitle(): عنوان یا سرخط اطلاعیه است که معمولاً بهصورت برجستهتر از متن نمایش داده میشود.
setContentText(): متن اصلی اطلاعیه که میتواند توضیحاتی در مورد رویداد یا وضعیت خاص باشد.
setPriority(): اولویت اطلاعیه را مشخص میکند که میتواند شامل اولویتهای PRIORITY_HIGH, PRIORITY_DEFAULT, PRIORITY_LOW باشد.
setAutoCancel(): اگر این متد true باشد، پس از اینکه کاربر روی اطلاعیه کلیک کند، خودکار از نوار وضعیت حذف میشود.
ارسال Notification
پس از ایجاد اطلاعیه، باید آن را از طریق NotificationManagerCompat ارسال کنید. این کلاس مسئول ارسال و نمایش اطلاعیهها در نوار وضعیت است. برای ارسال یک اطلاعیه، ابتدا باید یک شیء از NotificationManagerCompat بسازید و سپس از متد notify() برای ارسال اطلاعیه استفاده کنید.
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context); notificationManager.notify(notificationId, notificationBuilder.build());
NotificationManagerCompat.from(context): این متد یک نمونه از NotificationManagerCompat را میسازد که میتواند برای ارسال اطلاعیهها استفاده شود.
notify(notificationId, notificationBuilder.build()): در اینجا، notificationId یک شناسه منحصر به فرد برای اطلاعیه است که در صورت نیاز به حذف یا بهروزرسانی اطلاعیهها از آن استفاده میشود. همچنین، متد build() شیء نهایی اطلاعیه را میسازد و آن را برای ارسال آماده میکند.
مدیریت کانالهای اطلاعیه (Notification Channels)
از نسخه اندروید 8 (API سطح 26) به بعد، برای ارسال اطلاعیهها به کاربران باید از کانالهای اطلاعیه استفاده کنید. کانالها به شما این امکان را میدهند که اطلاعیهها را به دستههای مختلف تقسیم کرده و ویژگیهای مختلفی مانند صدا، لرزش و اولویت را برای هر دسته تنظیم کنید. اگر اپلیکیشن شما بر روی نسخههای اندروید 8 یا بالاتر اجرا میشود، ایجاد یک کانال اطلاعیه الزامی است.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
CharSequence name = "کانال اطلاعیه";
String description = "توضیحات کانال";
int importance = NotificationManager.IMPORTANCE_DEFAULT;
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
channel.setDescription(description);
NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
NotificationChannel: این کلاس برای ایجاد کانالهای اطلاعیه استفاده میشود. در اینجا شما باید یک شناسه منحصر به فرد برای کانال، نام و توضیحات آن را مشخص کنید.
importance: اولویت کانال اطلاعیه که مشخص میکند اطلاعیههای آن چطور باید برای کاربر نمایش داده شوند (مثلاً IMPORTANCE_HIGH برای اطلاعیههای فوری).
createNotificationChannel(): این متد کانال اطلاعیه جدید را به سیستم اضافه میکند.
تعامل با Notification
شما میتوانید به اطلاعیهها دکمههایی اضافه کنید که به کاربر این امکان را بدهد که با آنها تعامل کند. برای مثال، میتوانید دکمههایی برای باز کردن یک فعالیت خاص یا انجام یک عمل خاص اضافه کنید:
Intent intent = new Intent(context, SomeActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); notificationBuilder.setContentIntent(pendingIntent); // تنظیم عمل زمانی که روی اطلاعیه کلیک میشود
PendingIntent: این کلاس برای تعریف عملیاتی است که پس از کلیک کاربر بر روی اطلاعیه اجرا میشود.
در این بخش از مقاله، نحوه ارسال و مدیریت اطلاعیهها در اندروید را بررسی کردیم. اطلاعیهها ابزاری قدرتمند برای ارتباط با کاربران هستند و میتوانند به شما کمک کنند تا تجربه کاربری بهتری فراهم کنید. با استفاده از NotificationCompat.Builder و NotificationManagerCompat، شما میتوانید اطلاعیههای ساده یا پیچیده را ارسال کنید و ویژگیهای مختلفی مانند اولویت، کانالها و تعامل با کاربر را پیادهسازی کنید.
کار با Notification Manager و تنظیم ویژگیهای نوتیفیکیشن
NotificationManager یکی از مهمترین کلاسها در اندروید است که مسئول ارسال، مدیریت و نمایش اطلاعیهها به کاربران میباشد. این کلاس به شما این امکان را میدهد که ویژگیهای مختلف اطلاعیهها را تنظیم کرده و آنها را به درستی برای کاربر به نمایش بگذارید. علاوه بر ارسال نوتیفیکیشنهای ساده، NotificationManager به شما قابلیتهای پیشرفتهای مانند تعیین اولویت، زمانبندی، افزودن دکمههای تعاملی، و گروهبندی اطلاعیهها را فراهم میکند.
1. تنظیم اولویت و زمانبندی Notification
یکی از ویژگیهای مهم اطلاعیهها، اولویت آنها است. در صورت استفاده از اولویتهای مختلف، اطلاعیههای با اولویت بالاتر بهطور برجستهتری نمایش داده میشوند و توجه بیشتری جلب میکنند. بهعنوان مثال، اطلاعیههای با اولویت بالا (مثلاً برای هشدارهای اضطراری) باید بیشتر به چشم بیایند.
همچنین، زمانبندی اطلاعیهها نیز اهمیت دارد. با استفاده از متد setWhen() میتوانید زمان نمایش اطلاعیه را مشخص کنید. این ویژگی برای زمانبندی اطلاعیهها بهصورت برنامهریزیشده (مثلاً برای ارسال اطلاعیه در ساعت خاص) مفید است.
Intent intent = new Intent(context, SomeActivity.class); // ایجاد Intent برای باز کردن Activity خاص PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); // ایجاد PendingIntent notificationBuilder.addAction(R.drawable.icon, "Open", pendingIntent); // اضافه کردن دکمه "Open" به اطلاعیه
setPriority(): این متد برای تنظیم اولویت اطلاعیه استفاده میشود. مقدارهایی مانند PRIORITY_HIGH, PRIORITY_DEFAULT, PRIORITY_LOW وجود دارد. اولویتهای بالاتر معمولاً در نوار وضعیت یا حتی صفحه قفل دستگاه بهطور برجستهتری نمایش داده میشوند.
setWhen(): این متد زمانی که اطلاعیه باید نمایش داده شود را مشخص میکند. مقدار پیشفرض آن زمان فعلی است، اما میتوانید آن را به یک زمان دلخواه تغییر دهید (مثلاً یک زمان خاص یا یک تأخیر معین).
2. اضافه کردن دکمهها به Notification
اطلاعیهها میتوانند دکمههای تعاملی داشته باشند که به کاربران اجازه میدهند تا با اطلاعیه تعامل کنند. بهعنوان مثال، شما میتوانید دکمههایی برای پاسخ به پیام، باز کردن یک صفحه خاص یا انجام یک اقدام خاص در اپلیکیشن اضافه کنید.
برای اضافه کردن دکمه به اطلاعیه، ابتدا باید یک PendingIntent بسازید که هنگام کلیک روی دکمه اطلاعیه اجرا شود. سپس از متد addAction() برای اضافه کردن دکمه به اطلاعیه استفاده کنید.
Notification summaryNotification = new NotificationCompat.Builder(context, CHANNEL_ID)
.setContentTitle("Group summary") // عنوان خلاصه گروه
.setContentText("You have new notifications") // متن خلاصه
.setSmallIcon(R.drawable.notification_icon) // آیکون اطلاعیه
.setGroup(GROUP_KEY) // گروهبندی اطلاعیهها با یک شناسه خاص
.setGroupSummary(true) // تعیین اینکه این اطلاعیه یک خلاصه گروه باشد
.build(); // ساخت اطلاعیه
PendingIntent: این کلاس یک عمل خاص را که پس از کلیک روی اطلاعیه باید انجام شود، تعریف میکند. این عمل میتواند باز کردن یک صفحه، ارسال یک درخواست یا هر عمل دیگری باشد.
addAction(): با استفاده از این متد، شما دکمهای را به اطلاعیه اضافه میکنید. پارامترهای آن شامل آیکون دکمه، متن دکمه و PendingIntent برای تعریف عملیاتی است که در صورت کلیک بر روی دکمه باید انجام شود.
3. گروهبندی Notifications
گاهی اوقات، شما ممکن است بخواهید چندین اطلاعیه را در یک گروه نمایش دهید. بهعنوان مثال، اگر یک کاربر چندین پیام جدید در یک اپلیکیشن پیامرسان دریافت کند، میتوانید همه این پیامها را در یک گروه نمایش دهید تا کاربر فقط یک اطلاعیه برای آنها دریافت کند و نه چندین اطلاعیه جداگانه.
گروهبندی اطلاعیهها از طریق متدهای setGroup() و setGroupSummary() انجام میشود. این ویژگی مخصوصاً زمانی مفید است که شما میخواهید یک اطلاعیه خلاصه برای یک گروه از اطلاعیهها نمایش دهید.
Notification summaryNotification = new NotificationCompat.Builder(context, CHANNEL_ID)
.setContentTitle("Group summary") // عنوان خلاصه گروه
.setContentText("You have new notifications") // متن خلاصه
.setSmallIcon(R.drawable.notification_icon) // آیکون اطلاعیه
.setGroup(GROUP_KEY) // گروهبندی اطلاعیهها با یک شناسه خاص
.setGroupSummary(true) // تعیین اینکه این اطلاعیه یک خلاصه گروه باشد
.build(); // ساخت اطلاعیه
setGroup(): این متد برای گروهبندی اطلاعیهها استفاده میشود. شما باید یک شناسه منحصر به فرد برای گروه تعیین کنید که تمام اطلاعیههای مشابه از آن استفاده کنند.
setGroupSummary(true): با این متد مشخص میکنید که این اطلاعیه باید بهعنوان خلاصهای برای گروه اطلاعیهها نمایش داده شود. معمولاً این اطلاعیه شامل تعداد اطلاعیههای گروه یا پیامی مشابه است که نشاندهنده مجموع اطلاعیهها است.
4. حذف یا بهروزرسانی Notification
گاهی اوقات ممکن است بخواهید یک اطلاعیه را پس از انجام یک عمل خاص حذف یا بهروزرسانی کنید. این کار میتواند با استفاده از شناسه اطلاعیه انجام شود.
حذف Notification: برای حذف یک اطلاعیه، کافی است از متد cancel() استفاده کنید.
notificationManager.cancel(notificationId); // حذف اطلاعیه با شناسه مشخص
بهروزرسانی Notification: اگر نیاز به تغییر اطلاعیهای دارید که قبلاً ارسال شده است، کافی است آن را با یک اطلاعیه جدید با همان شناسه notificationId ارسال کنید. سیستم بهطور خودکار اطلاعیه قبلی را جایگزین میکند.
notificationManager.notify(notificationId, updatedNotification); // بهروزرسانی اطلاعیه
در این بخش، نحوه کار با NotificationManager و تنظیم ویژگیهای پیشرفته اطلاعیهها مانند اولویت، زمانبندی، اضافه کردن دکمههای تعاملی و گروهبندی اطلاعیهها را بررسی کردیم. با استفاده از این قابلیتها، میتوانید اطلاعیههایی جذابتر، کاربردیتر و سفارشیسازیشده ایجاد کنید که تجربه کاربری بهتری را برای کاربران اپلیکیشن شما فراهم میکند. این ویژگیها بهویژه برای اپلیکیشنهایی که نیاز به اطلاعرسانی مداوم یا مدیریت اطلاعات متعدد دارند، بسیار مفید است.
استفاده از Push Notifications با Firebase Cloud Messaging (FCM)
Firebase Cloud Messaging (FCM) یکی از سرویسهای قدرتمند Firebase است که به توسعهدهندگان این امکان را میدهد تا پیامهای Push Notification را بهصورت برخط (Real-time) به دستگاههای اندرویدی ارسال کنند. این سرویس بهویژه برای ارسال اطلاعیههای بهروزرسانیشده به کاربران بدون نیاز به باز کردن اپلیکیشن بسیار مفید است. با FCM میتوانید پیامها را از سرور خود به دستگاههای اندرویدی ارسال کنید و تجربهای تعاملی برای کاربران ایجاد کنید.
ویژگیهای کلیدی FCM:
ارسال پیامها به دستگاههای خاص یا گروههای خاص از دستگاهها.
ارسال پیامهای دادهای که میتوانند توسط اپلیکیشن پردازش شوند.
قابلیت ارسال پیامهای اطلاعرسانی که بهطور خودکار به نمایش درمیآیند.
پشتیبانی از ارسال پیامهای زمانبندیشده و بر اساس شرایط خاص.
مراحل ارسال Push Notification با FCM:
1. راهاندازی Firebase در پروژه اندروید
برای استفاده از FCM، ابتدا باید پروژه خود را در کنسول Firebase تنظیم کرده و اپلیکیشن اندروید خود را به آن متصل کنید. سپس، باید وابستگیهای لازم را در فایل build.gradle پروژه خود اضافه کنید.
وارد کنسول Firebase شوید و یک پروژه جدید بسازید.
اپلیکیشن اندروید خود را به پروژه Firebase اضافه کنید و دستورالعملهای مربوط به تنظیم google-services.json را دنبال کنید.
در فایل build.gradle اپلیکیشن خود، وابستگیهای لازم برای استفاده از FCM را اضافه کنید:
dependencies {
implementation 'com.google.firebase:firebase-messaging:23.0.0'
}
این وابستگی باعث میشود که کتابخانههای لازم برای ارسال و دریافت پیامهای Push از FCM در پروژه شما اضافه شود.
2. ارسال پیام از سرور
برای ارسال پیامهای Push از سرور به دستگاههای اندرویدی، شما میتوانید از Firebase Admin SDK یا REST API استفاده کنید. در این بخش، ما نحوه ارسال پیام با استفاده از REST API را توضیح خواهیم داد.
یک پیام Push در FCM معمولاً به شکل یک JSON است که شامل اطلاعاتی مانند شناسه دستگاه (device token)، عنوان، متن پیام و سایر تنظیمات میباشد.
مثال زیر یک پیام ساده است که به یک دستگاه خاص ارسال میشود:
{
"to": "DEVICE_TOKEN",
"notification": {
"title": "Title of Notification",
"body": "Body of the notification message"
}
}
در این مثال:
“to”: شناسه دستگاهی است که پیام به آن ارسال میشود. این شناسه معمولاً در زمان دریافت Push Notification در اپلیکیشن به دست میآید.
“notification”: این بخش شامل جزئیات پیام اطلاعرسانی است، مانند عنوان و متن پیام.
شما میتوانید از Firebase Admin SDK یا هر زبان برنامهنویسی دیگری برای ارسال این پیامها از سرور استفاده کنید. در صورتی که از REST API استفاده میکنید، باید این درخواست را به سرور Firebase ارسال کنید:
POST https://fcm.googleapis.com/fcm/send
Content-Type: application/json
Authorization: key=YOUR_SERVER_KEY
{
"to": "DEVICE_TOKEN",
"notification": {
"title": "New Message",
"body": "You have a new message!"
}
}
در این درخواست:
YOUR_SERVER_KEY: کلید سرور شما است که از کنسول Firebase دریافت میشود. این کلید برای احراز هویت درخواستها استفاده میشود.
DEVICE_TOKEN: شناسه دستگاهی است که پیام به آن ارسال میشود.
3. دریافت Push Notification در اپلیکیشن
برای دریافت پیامهای Push در اپلیکیشن اندروید خود، شما باید یک سرویس FirebaseMessagingService ایجاد کرده و متد onMessageReceived() را پیادهسازی کنید. این سرویس مسئول دریافت پیامهای Push است و میتواند شامل پیامهای دادهای یا اطلاعرسانی باشد.
در ادامه یک نمونه کد برای دریافت Push Notification آورده شده است:
POST https://fcm.googleapis.com/fcm/send
Content-Type: application/json
Authorization: key=YOUR_SERVER_KEY
{
"to": "DEVICE_TOKEN",
"notification": {
"title": "New Message",
"body": "You have a new message!"
}
}
remoteMessage.getData(): این متد برای دسترسی به دادههای پیام است که معمولاً شامل اطلاعات خاصی برای پردازش توسط اپلیکیشن میباشد. این دادهها میتوانند بهعنوان JSON ارسال شوند.
remoteMessage.getNotification(): این متد اطلاعات مربوط به پیام اطلاعرسانی را فراهم میکند. شما میتوانید از آن برای نمایش اطلاعرسانی در نوار وضعیت استفاده کنید.
ارسال Notification به نوار وضعیت
برای نمایش اطلاعرسانی در نوار وضعیت دستگاه، باید یک Notification ایجاد کرده و از NotificationManager برای نمایش آن استفاده کنید. بهعنوان مثال:
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// بررسی اینکه آیا پیام دادهای وجود دارد
if (remoteMessage.getData().size() > 0) {
// پردازش دادهها (مثلاً بهروزرسانی UI یا ذخیره در دیتابیس)
Map<String, String> data = remoteMessage.getData();
// انجام کارهای لازم با دادهها
}
// بررسی اینکه آیا پیام اطلاعرسانی وجود دارد
if (remoteMessage.getNotification() != null) {
// دریافت اطلاعات اطلاعرسانی
String notificationTitle = remoteMessage.getNotification().getTitle();
String notificationBody = remoteMessage.getNotification().getBody();
// نمایش اطلاعرسانی در نوار وضعیت
sendNotification(notificationTitle, notificationBody);
}
}
در اینجا:
setSmallIcon(): آیکون کوچک اطلاعرسانی.
setContentTitle(): عنوان اطلاعرسانی که از دادههای remoteMessage دریافت میشود.
setContentText(): متن اطلاعرسانی.
نکات اضافی:
Token دستگاه: هر دستگاه اندروید پس از نصب اپلیکیشن شما، یک شناسه منحصر به فرد به نام device token دریافت میکند. این شناسه برای ارسال پیام به دستگاه خاص ضروری است. این توکن معمولاً در اولین بار که اپلیکیشن راهاندازی میشود دریافت میشود.
گروهبندی پیامها: FCM همچنین از قابلیت گروهبندی پیامها پشتیبانی میکند که به شما این امکان را میدهد که چندین پیام را در یک گروه نمایش دهید. برای این کار، باید از متدهای setGroup() و setGroupSummary() استفاده کنید.
در این بخش از مقاله، نحوه استفاده از Firebase Cloud Messaging (FCM) برای ارسال و دریافت Push Notifications را بررسی کردیم. با استفاده از FCM، میتوانید پیامهای برخط به کاربران ارسال کرده و تجربه کاربری بسیار بهتری فراهم کنید. از طریق FCM، شما قادر خواهید بود که بهراحتی پیامهای اطلاعرسانی و دادهای ارسال کنید، و از قابلیتهای پیشرفتهای همچون زمانبندی، گروهبندی و تعامل با اطلاعرسانیها بهرهبرداری کنید.
نتیجهگیری
در این مقاله، با نحوه کار با اطلاعیهها در Java و روشهای مختلف ارسال و مدیریت آنها آشنا شدیم. از ارسال سادهی اطلاعیهها در اندروید با استفاده از NotificationManager گرفته تا استفاده از Push Notifications با Firebase Cloud Messaging (FCM)، تمامی جنبههای مهم این موضوع بررسی شد. استفاده از اطلاعیهها در Java برای اطلاعرسانی به کاربران و بهبود تجربه کاربری اهمیت بالایی دارد، بهویژه زمانی که نیاز دارید تا پیامهای بهروزرسانیشده یا هشدارهای مهم را بهصورت برخط و سریع به دستگاههای اندرویدی ارسال کنید.
با استفاده از امکاناتی همچون تنظیم اولویت، زمانبندی، و اضافه کردن دکمههای تعاملی به اطلاعیهها، میتوانید پیامهایی جذابتر و کاربردیتر ارسال کنید. همچنین، با بهرهگیری از FCM، میتوانید پیامهای Push را بهصورت مؤثر به هزاران دستگاه ارسال کنید و اطمینان حاصل کنید که کاربران شما همیشه از جدیدترین اطلاعات آگاه هستند.
اگر به دنبال یادگیری بیشتر در مورد اطلاعیهها در Java هستید، منابع مختلفی همچون مستندات رسمی Firebase، دورههای آنلاین، و کتابهای تخصصی وجود دارد که میتوانند در این زمینه به شما کمک کنند.
