Notification در اندروید
یک اعلان (notification) پیامی است که با هدف آگاه کردن کاربر از یک موضوع در خارج از صفحات برنامه نشان داده می شود. هنگامی که به سیستم می گوییم یک اعلان را صادر کند، ابتدا آن اعلان به صورت یک آیکون در ناحیه ی مخصوص آن ها که یک نوار باریک در بالای صفحه است و نوار وضعیت نام دارد ظاهر می شود و برای مشاهده ی جزئیات اعلان نیز کاربر می تواند صفحه ی نوار وضعیت را باز کند. هر دو قسمت نوار وضعیت و صفحه ی جزئیات آن ها توسط سیستم کنترل می شود و کاربر می تواند در هر زمان به آن ها دسترسی داشته باشد.
در این حالت استفاده از Notification بهترین راه ممکن برای برقراری ارتباط با کاربر هست . از کاربرد Notification ها در اندروید میشه به مواردی مثل Notification دادن برای پر شدن حافظه ، Update های جدید نرم افزار ، آمدن پیام جدید در نرم افزارهای پیام رسان مثل تلگرام و … دیگر موارد اشاره کرد .
همچنین می توانیم برای نشان دادن جزئیات بیشتر در اعلان ها از ویوهای بزرگ تری استفاده کنیم. اندازه ی یک اعلان به منظور نشان دادن جزئیات بیشتر می تواند به اندازه ی شش خط افزایش پیدا کند.
در نظر گرفتن طراحی
Notification ها به عنوان بخش مهمی از رابط کاربری Android دستورالعمل های طراحی خود را دارند. طراحی در Android 5.0 (API 21) از اهمیت خاصی برخوردار هستند.
مدیریت notification channel
با شروع Android 8.0 (API 26) channel های Notification به شما امکان می دهد که یک اعلان قابل تنظیم مخصوص کاربر برای هر نوع Notification که می خواهید نمایش دهید ایجاد کنید. channel های Notification یک سیستم یکپارچه برای کمک به مدیریت اعلان ها را فراهم می کند.
شما می توانید یک نمونه از NotificationChannel را برای هر نوع متفاوتی از اعلان که نیاز دارید ارسال کنید ایجاد کنید.
کاربران می توانند اکثر تنظیمات مربوط به اعلان ها را با استفاده از UI سیستم سازگار مدیریت کنند.
همه اعلانهای ارسال شده در همان کانال Notification ، رفتار مشابهی دارند.
ویژگی های notification عبارتند از :
Importance
Sound
Lights
Vibration
Show on lockscreen
Override do not disturb
ایجاد notification channel
با دنبال کردن مراحل زیر می توانید به سادگی برای برنامه ی خود یک اعلان بسازید :
1 – ایجاد سازنده ی اعلان
2 – تعیین ویژگی های اعلان
3 – افزودن عملیات به اعلان
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
// The user-visible name of the channel.
CharSequence name = getString(R.string.channel_name);
// The user-visible description of the channel.
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
// Configure the notification channel.
mChannel.setDescription(description);
mChannel.enableLights(true);
// Sets the notification light color for notifications posted to this
// channel, if the device supports this feature.
mChannel.setLightColor(Color.RED);
mChannel.enableVibration(true);
mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
mNotificationManager.createNotificationChannel(mChannel);
ایجاد notification channel group
اگر برنامه شما multiple user accounts می باشد، میتوانید یک گروه کانال اعلان برای هر حساب ایجاد کنید. گروه های کانال اعلان ها به شما این امکان را می دهند که چندین کانال اعلان با نام های یکسان در یک برنامه واحد مدیریت کنید. به عنوان مثال، یک برنامه شبکه اجتماعی ممکن است شامل پشتیبانی از حسابهای کاربری شخصی و تجاری باشد. در این سناریو، هر حساب کاربری ممکن است چندین کانال اعلان با عملکردها و اسامی یکسان داشته باشد.
سازماندهی کانال های notification مربوط به هر حساب کاربری در این مثال به گروه های اختصاصی تضمین می دهد که کاربران به راحتی می توانند بین آنها در تنظیمات متمایز شوند. هر گروه کانال notification نیاز به شناسه ای دارد که باید در داخل package خود منحصر به فرد باشد و همچنین یک نام کاربری قابل مشاهده باشد. قطعه کد زیر نشان می دهد که چگونه یک گروه کانال اعلان ایجاد کنید.
// The id of the group.
String group = "my_group_01";
// The user-visible name of the group.
CharSequence name = getString(R.string.group_name);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannelGroup(new NotificationChannelGroup(group, name));
پس از ایجاد یک گروه جدید، می توانید از setGroup () برای مرتبط کردن یک کانال جدید با گروه استفاده کنید. قبل از ارسال کانال به مدیر notification ، می توانید ارتباط بین کانال های notification و گروه ها را تغییر دهید
خواندن تنظیمات کانال notification
کاربران می توانند تنظیمات کانال های notification را تغییر دهند، از جمله رفتارهایی مانند vibration و صدای هشدار. شما می توانید با استفاده از دو متد زیر برای تنظیماتی که کاربر به یک کانال اعلان اعمال کرده است استفاده کنید:
1 – برای بازیابی کانال تک notification ، می توانید متد () NotificationChannel را صدا بزنید.
2 – برای بازیابی تمام کانال های notification متعلق به برنامه شما، می توانید ()getNotification را صدا بزنید.
بعد از NotificationChannel شما می توانید متد هایی مانند getVibrationPattern () و getSound () برای پیدا کردن تنظیمات فعلی کاربر استفاده کنید. برای پیدا کردن اینکه آیا یک کاربر یک کانال اعلان را مسدود کرده است، می توانید متدgetImportance () را صدا بزنید. اگر کانال notification مسدود شده باشد، getImportance () , IMPORTANCE_NONE را بازمی گرداند.
به روز رسانی تنظیمات کانال notification
پس از ایجاد یک کانال notification ، کاربر مسئول تنظیمات و رفتار آن است. شما می توانید متد createNotificationChannel () را صدا بزنید و سپس کانال notification را دوباره به notification manager ارسال کنید تا کانال notification موجود را تغییر دهید یا توضیحات خود را به روزرسانی کند.
نمونه کد زیر نحوه هدایت کاربر به تنظیمات یک کانال notification را با ایجاد یک Intent برای شروع یک اکتیویتی توصیف می کند.
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_CHANNEL_ID, mChannel.getId());
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
startActivity(intent);
حذف کانال notification
شما می توانید کانال های اطلاع رسانی را با متد deleteNotificationChannel () حذف کنید:
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
mNotificationManager.deleteNotificationChannel(id);
ایجاد یک notification
به عنوان اولین گام در ایجاد سازنده ی اعلان باید از متد ()NotificationCompat.Builder.build استفاده کنیم. همچنین برای تعیین ویژگی های مختلف اعلان نظیر آیکون های کوچک و بزرگ، عنوان، اولویت و غیره نیز از این تابع سازنده استفاده خواهیم کرد.
(NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this
با استفاده از تابع سازنده می توانیم ویژگی هایی که نیاز داریم را برای اعلان تعیین کنیم. با این وجود تعیین ویژگی های زیر برای اعلان ضروری است:
()setSmallIcon تعیین یک آیکون کوچک با استفاده از متد
()setContentTitle تعیین عنوان با استفاده از متد
()setContentText تعیین جزئیات متنی با استفاده از متد
Notification actions
یک actions که اجازه می دهد تا کاربران به طور مستقیم از اعلان وارد یک Activity در برنامه شما شود.
Notification میتواند اقدامات متعددی را انجام دهد. اطمینان حاصل کنید که همیشه عمل (actions) را تعیین می کنید که باعث می شود که کاربر Notification را کلیک کند. معمولا این عمل یک Activity را در برنامه شما باز می کند. شما همچنین می توانید دکمه ها را به Notification اضافه کنید .
در داخل Notification ، این عمل PendingIntent حاوی یک Intent می باشد که Activity در برنامه شما را شروع می کند. برای استفاده از PendingIntent از متد NotificationCompat.Builder استفاده کنید.
اولویت Notification و اهمیت ها
اگر مایل هستید، می توانید اولویت یک Notification را در Android 7.1 (سطح API 25) و پایین تر تنظیم کنید. اولویت به عنوان یک اشاره به UI دستگاه در مورد نحوه نمایش عمل می کند. برای تنظیم اولویت از طریق () NotificationCompat.Builder.setPriority استفاده کنید.
سطوح اولویت اعم از
1 – PRIORITY_MIN
2 – PRIORITY_MAX
3 – PRIORITY_DEFAULT
اندروید 8.0 (سطح API 26) توانایی تنظیم سطوح اولویت اطلاعیه های فردی را کاهش می دهد. در عوض، هنگام ایجاد یک کانال Notification می توانید سطح اهمیت توصیه شده را تنظیم کنید. سطح اهمیتی که به کانال اعلان اختصاص میدهید، به همه پیامهای اعلان که به آن ارسال میکنید، اعمال میشود.
ایجاد یک اعلان (Notification ) ساده
به یاد داشته باشید که اندروید 8.0 (سطح API 26) و بالاتر نیاز به ارسال Notification ها به یک کانال Notification دارد.
قطعه کد زیر نشان دهنده اعلان ساده ای است که یک فعالیت را برای باز کردن زمانی که کاربر روی اعلان کلیک می کند مشخص می کند. توجه داشته باشید که این کد یک شیء TaskStackBuilder ایجاد می کند و از آن برای ایجاد PendingIntent برای عمل استفاده می کند:
String CHANNEL_ID = "my_channel_01";
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Hello World!");
// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(this, ResultActivity.class);
// The stack builder object will contain an artificial back stack for the
// started Activity.
// This ensures that navigating backward from the Activity leads out of
// your app to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(ResultActivity.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// mNotificationId is a unique integer your app uses to identify the
// notification. For example, to cancel the notification, you can pass its ID
// number to NotificationManager.cancel().
mNotificationManager.notify(mNotificationId, mBuilder.build());
اعمال یک layout به یک Notification
برای اینکه یک اعلان در یک layout نمایش داده شود، ابتدا یک شی NotificationCompat.Builder به صورت معمولی که می خواهید ایجاد کنید. بعد از متد ()Builder.setStyle استفاده کنید.
به عنوان مثال، قطعه کد زیر نشان می دهد که چگونه برای تغییر اعلان ایجاد شده در قطعه قبلی، از layout استفاده می کند:
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("Event tracker")
.setContentText("Events received");
NotificationCompat.InboxStyle inboxStyle =
new NotificationCompat.InboxStyle();
String[] events = new String[6];
// Sets a title for the Inbox in expanded layout
inboxStyle.setBigContentTitle("Event tracker details:");
...
// Moves events into the expanded layout
for (int i=0; i < events.length; i++) {
inboxStyle.addLine(events[i]);
}
// Moves the expanded layout object into the notification object.
mBuilder.setStyle(inboxStyle);
...
// Issue the notification here.
Handling compatibility
همه ویژگی های اعلان برای یک نسخه خاص در دسترس نیستند، هرچند متدهایی هایی برای تنظیم آنها در کلاس Library Support KnowledgeCompat.Builder وجود دارد. به عنوان مثال، برخی از موارد، فقط در اندروید 4.1 و بالاتر ظاهر می شود، زیرا اعلان های گسترش یافته خود تنها در اندروید 4.1 و بالاتر در دسترس هستند.
برای اطمینان از این کار، Notification ها را با NotificationCompat و زیر کلاس های آن، به خصوص NotificationCompat.Builder ایجاد کنید. علاوه بر این، هنگام اجرای یک Notification ، این روند را دنبال کنید:
1 – تمامی قابلیت های اعلان را برای همه کاربران، صرف نظر از نسخه ای که استفاده می کنید، قرار دهید. برای انجام این کار، تأیید کنید که تمام قابلیت ها از یک Activity در برنامه شما در دسترس است. برای انجام این کار می توانید Activity جدیدی را اضافه کنید. برای مثال، اگر شما میخواهید از متد () addAction برای متوقف کردن یک کنترل استفاده کنید، ابتدا این کنترل را در یک فعالیت در برنامه خود قرار دهید.
2 – شروع یک اکتیویتی وقتی که کاربر روی Notification کلیک می کند.
3 – حالا ویژگی های یکNotification را که می خواهید از آن استفاده کنید اضافه کنید. به خاطر داشته باشید که هر عملکردی که شما اضافه می کنید باید در Activity موجود باشد که وقتی که کاربران روی Notification کلیک می کنند، در دسترس باشند.
مدیریت اعلانها
هنگامی که شما نیاز به نمایش چندین Notification برای یک نوع رویداد دارید، باید از ایجاد یک Notification جدید جلوگیری کنید ولی باید Notification را بروز رسانی کنید مثلا نمایش تعداد آنها به جای نمایش همه.
به روز رسانی اعلان ها
برای این کار می توانید از () NotificationManager.notify استفاده کنید.
برای به روز رسانی Notification شما می توانید از NotificationCompat.Builder از شئی Notification استفاده کنید
اگر Notification قبلی هنوز قابل مشاهده باشد، سیستم آن را با استفاده از شی Notification اطلاع می دهد
mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Sets an ID for the notification, so it can be updated
int notifyID = 1;
mNotifyBuilder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status);
numMessages = 0;
// Start of a loop that processes data and then notifies the user
...
mNotifyBuilder.setContentText(currentText)
.setNumber(++numMessages);
// Because the ID remains unchanged, the existing notification is
// updated.
mNotificationManager.notify(
notifyID,
mNotifyBuilder.build());
حذف اعلانها
اعلان ها تا زمانی که یکی از موارد زیر اتفاق می افتد قابل مشاهده است:
1 – کاربر اخطار را به صورت جداگانه یا با استفاده از «پاک کردن همه» (اگر اعلان میتواند پاک شود) را پاک می کند.
2 – کاربر اعلان را کلیک می کند و متد ()setAutoCancel فراخوانی میشود.
3 – شما میتوانید برای یک اعلان خاص از متد () cancel استفاده کنید.
4 – با استفاده از متد () callcelall تمام اعلانهایی که قبلا صادر کرده اید را حذف میکنید.
5 – اگر برای زمان ایجاد یک اعلان از () setTimeoutAfter استفاده می کنید، سیستم پس از مدت زمان تعیین شده، اعلان را لغو می کند.
Notification badges (نشانه ها)
اندروید 8.0 (API 26) قابلیت نمایش نمادهای اعلان در آیکون های برنامه را در برنامه های پشتیبانی شده ارائه می دهد. هشدارها نشانهای اعلان مربوط به یک یا چند کانال اعلان در یک برنامه را نشان میدهد که کاربر آن را رد کرده یا در آن فعالیت نکرده است.
کاربران همچنین می توانند آیکون یک برنامه به مدت طولانی نگه داشته و اطلاعیه های مرتبط با یک نشانۀ اعلان در برنامه های پشتیبانی شده نگاه کنند. پس از آن کاربران می توانند اخطارها را از منوی نمایش داده شده به نحوی مشابه به notification drawer می باشد.
نکته: هر اعلان را نشان ندهید، زیرا مواردی وجود دارد که نشان ها حساس نیستند.مانند
Ongoing notifications
اکثر اعلان های جاری مانند پردازش تصویر، کنترل های پخش رسانه ای یا دستورالعمل های هدایت فعلی، به عنوان نشان شناخته نمی شوند.
Calendaring apps
اجتناب از وقایع ای که در زمان کنونی اتفاق می افتد.
Clock or alarm apps
اجتناب از اعلان های مربوط به هشدارهای فعلی
تنظیم notification badges
شما می توانید از روش () setShowBadge برای جلوگیری از حضور اعلان ها از یک کانال که توسط نشان نشان داده می شود استفاده کنید. شما نمیتوانید این تنظیم را برای یک کانال اعلان پس از ایجاد و ارسال به مدیر اطلاع رسانی به صورت programmatically انجام دهید.
کد نمونه زیر نشان می دهد که چگونه notification badges ها را در ارتباط با notification ها از یک کانال اعلان پنهان کنید:
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The ID of the channel.
String id = "my_channel_01";
// The user visible name of the channel.
CharSequence name = getString(R.string.channel_name);
// The user visible description of the channel.
String description = getString(R.string.channel_description);
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel mChannel = new NotificationChannel(id, name, importance);
// Configure the notification channel.
mChannel.setDescription(description);
mChannel.setShowBadge(false);
mNotificationManager.createNotificationChannel(mChannel);
شما می توانید با استفاده از متد () setNumber برای تنظیم یک عدد سفارشی برای نشان دادن در long-press menu استفاده کنید
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
int notificationID = 1;
String CHANNEL_ID = "my_channel_01";
// Set a message count to associate with this notification in the long-press menu.
int messageCount = 3;
// Create a notification and set a number to associate with it.
NotificationCompat notification =
new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
.setContentTitle("New Messages")
.setContentText("You've received 3 new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
.setNumber(messageCount)
.build();
// Issue the notification.
mNotificationManager.notify(notificationID, notification);
Replying to notifications
با شروع در Android 7.0 (API 24)، کاربران می توانند به طور مستقیم به پیام های متنی را پاسخ دهند یا لیست های کار را از طریق گفت و گو اعلان بارگذاری کنند.
دیدگاهتان را بنویسید