החל מ-Android 8.0 (רמת API 26), צריך להקצות את כל ההתראות לערוץ. לכל ערוץ אפשר להגדיר את ההתנהגות החזותית והקולית שחלה על כל ההתראות בערוץ הזה. המשתמשים יכולים לשנות את ההגדרות האלה ולהחליט אילו ערוצי התראות מהאפליקציה שלכם יכולים להיות פולשניים או גלויים.
בסרטון הבא מוצגת סקירה כללית של ערוצים ותכונות אחרות של התראות ב-Android 8.0.
הגדרות המשתמש לערוצי התראות זמינות לכל אפליקציה בהגדרות המערכת, כמו שמוצג באיור 1.
איור 1. הגדרות ההתראות של אפליקציית השעון ואחד מהערוצים שלה.
אחרי שיוצרים ערוץ התראות, אי אפשר לשנות את אופן הפעולה של ההתראות. בשלב הזה למשתמש יש שליטה מלאה. עם זאת, אתם עדיין יכולים לשנות את השם והתיאור של הערוץ.
יוצרים ערוץ לכל סוג של התראה שצריך לשלוח. אפשר גם ליצור ערוצי התראות שישקפו את הבחירות של המשתמשים. לדוגמה, אפשר להגדיר ערוצי התראות נפרדים לכל קבוצת שיחה שמשתמש יוצר באפליקציית הודעות.
כשמטרגטים ל-Android 8.0 (רמת API 26) ואילך, צריך להטמיע ערוץ התראות אחד או יותר. אם הערך של targetSdkVersion מוגדר ל-25 ומטה, כשהאפליקציה פועלת ב-Android 8.0 (רמת API 26) ומעלה, היא מתנהגת כמו במכשירים עם Android 7.1 (רמת API 25) ומטה.
יצירת ערוץ התראות
כדי ליצור ערוץ התראות:
יוצרים אובייקט
NotificationChannelעם מזהה ערוץ ייחודי, שם שגלוי למשתמש ורמת חשיבות.אפשר גם לציין את התיאור שהמשתמש רואה בהגדרות המערכת באמצעות
setDescription().מעבירים את ערוץ ההתראות אל
createNotificationChannel()כדי לרשום אותו.
בדוגמה הבאה מוצגות הפעולות ליצירה ולרישום של ערוץ התראות:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create the NotificationChannel.
val name = getString(R.string.channel_name)
val descriptionText = getString(R.string.channel_description)
val importance = NotificationManager.IMPORTANCE_DEFAULT
val mChannel = NotificationChannel(CHANNEL_ID, name, importance)
mChannel.description = descriptionText
// Register the channel with the system. You can't change the importance
// or other notification behaviors after this.
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(mChannel)
}
יצירה מחדש של ערוץ התראות קיים עם הערכים המקוריים שלו לא מבצעת פעולה כלשהי, ולכן אפשר להפעיל את הקוד הזה כשמפעילים אפליקציה.
כברירת מחדל, כל ההתראות שמתפרסמות בערוץ מסוים משתמשות בהתנהגויות חזותיות ושמיעתיות שמוגדרות לפי רמת החשיבות מהסיווג NotificationManagerCompat, כמו IMPORTANCE_DEFAULT או IMPORTANCE_HIGH. מידע נוסף על רמות חשיבות מופיע בקטע הבא.
אם רוצים להתאים אישית את התנהגות ברירת המחדל של ההתראות בערוץ, אפשר להפעיל מתודות כמו enableLights(), setLightColor() ו-setVibrationPattern() באובייקט NotificationChannel. חשוב לזכור שאחרי שיוצרים את הערוץ, אי אפשר לשנות את ההגדרות האלה, והמשתמש הוא זה שמחליט אם ההתנהגויות האלה יהיו פעילות.
אפשר גם ליצור כמה ערוצי התראות בפעולה אחת על ידי קריאה ל-createNotificationChannels().
הגדרת רמת החשיבות
חשיבות הערוץ משפיעה על רמת ההפרעה של כל ההתראות שמתפרסמות בערוץ. מציינים את הערך בבונה NotificationChannel, באמצעות אחת מחמש רמות החשיבות, מ-IMPORTANCE_NONE(0) עד IMPORTANCE_HIGH(4).
כדי לתמוך במכשירים עם Android 7.1 (רמת API 25) או גרסאות קודמות, צריך גם לקרוא ל-setPriority() לכל התראה, באמצעות קבוע עדיפות מהמחלקה NotificationCompat.
הקבועים של החשיבות (NotificationManager.IMPORTANCE_*) והעדיפות (NotificationCompat.PRIORITY_*) ממופים לאפשרויות החשיבות שגלויות למשתמש, כמו שמוצג בטבלה הבאה.
| רמת החשיבות שמוצגת למשתמש | חשיבות (Android מגרסה 8.0 ואילך) | עדיפות (Android מגרסה 7.1 ומטה) |
|---|---|---|
| דחוף משמיע צליל ומופיע כהתראת "שימו לב". |
IMPORTANCE_HIGH |
PRIORITY_HIGH או PRIORITY_MAX |
| גבוה משמיע צליל. |
IMPORTANCE_DEFAULT |
PRIORITY_DEFAULT |
| בינוני לא מושמע צליל. |
IMPORTANCE_LOW |
PRIORITY_LOW |
| נמוכה לא משמיעה צליל ולא מופיעה בשורת הסטטוס. |
IMPORTANCE_MIN |
PRIORITY_MIN |
| ללא לא משמיעה צליל ולא מופיעה בשורת הסטטוס או בלוח ההתראות. |
IMPORTANCE_NONE |
N/A |
כל ההתראות, ללא קשר לחשיבות שלהן, מופיעות במיקומים בממשק המשתמש של המערכת שלא מפריעים, כמו במגירת ההתראות ובתג על סמל מרכז האפליקציות. עם זאת, אפשר לשנות את המראה של תג ההתראה.
אחרי ששולחים את הערוץ אל NotificationManager, אי אפשר לשנות את רמת החשיבות. עם זאת, המשתמש יכול לשנות את ההעדפות שלו לגבי הערוצים של האפליקציה בכל שלב.
מידע על בחירת רמת עדיפות מתאימה זמין בקטע 'רמות עדיפות' במדריך לעיצוב התראות.
קריאת ההגדרות של ערוץ ההתראות
המשתמשים יכולים לשנות את ההגדרות של ערוצי ההתראות, כולל התנהגויות כמו רטט וצליל התראה. כדי לראות את ההגדרות שמשתמש מסוים הגדיר לערוצי ההתראות שלו:
מקבלים את האובייקט
NotificationChannelעל ידי קריאה ל-getNotificationChannel()או ל-getNotificationChannels().שאילתה של הגדרות ספציפיות של ערוץ, כמו
getVibrationPattern(), getSound()ו-getImportance().
אם זיהיתם הגדרה של ערוץ שלדעתכם מונעת את ההתנהגות הרצויה של האפליקציה, תוכלו להציע למשתמש לשנות אותה ולספק פעולה לפתיחת הגדרות הערוץ, כמו שמוצג בקטע הבא.
פתיחה של הגדרות ערוץ ההתראות
אחרי שיוצרים ערוץ התראות, אי אפשר לשנות את ההתנהגויות החזותיות והקוליות של ערוץ ההתראות באופן פרוגרמטי. רק המשתמש יכול לשנות את ההתנהגויות של הערוץ דרך הגדרות המערכת. כדי לספק למשתמשים גישה מהירה להגדרות ההתראות האלה, מוסיפים פריט בממשק המשתמש של ההגדרות באפליקציה שפותח את הגדרות המערכת האלה.
אפשר לפתוח את הגדרות המערכת של ערוצי ההתראות באמצעות Intent שמשתמש בפעולה ACTION_CHANNEL_NOTIFICATION_SETTINGS.
לדוגמה, בדוגמת הקוד הבאה אפשר לראות איך אפשר להפנות משתמש להגדרות של ערוץ התראות:
val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
}
startActivity(intent)
שימו לב שה-intent דורש שני נתונים נוספים שמציינים את שם החבילה של האפליקציה (שנקרא גם מזהה האפליקציה) ואת הערוץ שרוצים לערוך.
מחיקת ערוץ התראות
כדי למחוק ערוצי התראות, מתקשרים אל
deleteNotificationChannel().
בדוגמת הקוד הבאה אפשר לראות איך משלימים את התהליך:
// The id of the channel.
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val id: String = "my_channel_01"
notificationManager.deleteNotificationChannel(id)
יצירה של קבוצת ערוצי התראות
אם רוצים לארגן עוד יותר את המראה של הערוצים בממשק המשתמש של ההגדרות, אפשר ליצור קבוצות ערוצים. מומלץ לעשות את זה אם האפליקציה תומכת בכמה חשבונות משתמשים, כי כך אפשר ליצור קבוצת ערוצים של התראות לכל חשבון. קבוצות ערוצים עוזרות למשתמשים להבדיל בין כמה ערוצי התראות עם שמות זהים ולשלוט בהם.
איור 2. הגדרות של ערוצי התראות עם קבוצות לחשבונות לשימוש אישי ולחשבונות לצורכי עבודה.
לדוגמה, אפליקציה של רשת חברתית עשויה לכלול תמיכה בחשבונות אישיים ובחשבונות לצורכי עבודה. בתרחיש הזה, יכול להיות שכל חשבון יצטרך כמה ערוצי התראות עם פונקציות ושמות זהים, כמו אלה:
חשבון לשימוש אישי עם שני ערוצים:
תגובות חדשות
המלצות לפרסום
חשבון עסקי עם שני ערוצים:
תגובות חדשות
המלצות לפרסום
ארגון ערוצי ההתראות בקבוצות לכל חשבון מאפשר למשתמשים להבחין ביניהם.
לכל קבוצת ערוצי התראות נדרש מזהה, שחייב להיות ייחודי בחבילה, וגם שם שגלוי למשתמש. בקטע הקוד הבא אפשר לראות איך יוצרים קבוצה של ערוצי התראות.
// The id of the group.
val groupId = "my_group_01"
// The user-visible name of the group.
val groupName = getString(R.string.group_name)
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
<b>notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))</b>
אחרי שיוצרים קבוצה חדשה, אפשר להתקשר אל
setGroup()
כדי לשייך אובייקט NotificationChannel חדש לקבוצה.
אחרי ששולחים את הערוץ למרכז ניהול ההתראות, אי אפשר לשנות את השיוך בין ערוץ ההתראות לקבוצה.