יצירה וניהול של ערוצי התראות

החל מ-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) ומטה.

יצירת ערוץ התראות

כדי ליצור ערוץ התראות, פועלים לפי השלבים הבאים:

  1. יוצרים אובייקט NotificationChannel עם מזהה ערוץ ייחודי, שם שגלוי למשתמש ורמת חשיבות.

  2. אפשר גם לציין את התיאור שהמשתמש רואה בהגדרות המערכת באמצעות setDescription().

  3. מעבירים את ערוץ ההתראות אל createNotificationChannel() כדי לרשום אותו.

בדוגמה הבאה מוסבר איך ליצור ולרשום ערוץ התראות:

Kotlin

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)
}

Java

private void createNotificationChannel() {
    // Create the NotificationChannel, but only on API 26+ because
    // the NotificationChannel class is not in the Support Library.
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        CharSequence name = getString(R.string.channel_name);
        String description = getString(R.string.channel_description);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
        channel.setDescription(description);
        // Register the channel with the system. You can't change the importance
        // or other notification behaviors after this.
        NotificationManager notificationManager = getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

יצירה מחדש של ערוץ התראות קיים עם הערכים המקוריים שלו לא מבצעת פעולה כלשהי, ולכן אפשר להפעיל את הקוד הזה כשמפעילים אפליקציה.

כברירת מחדל, כל ההתראות שמתפרסמות בערוץ מסוים משתמשות בהתנהגויות החזותיות והקוליות שמוגדרות לפי רמת החשיבות מהמחלקה 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, אי אפשר לשנות את רמת החשיבות. עם זאת, המשתמש יכול לשנות את ההעדפות שלו לגבי הערוצים של האפליקציה בכל שלב.

מידע על בחירת רמת עדיפות מתאימה זמין בקטע 'רמות עדיפות' במדריך לעיצוב התראות.

קריאת ההגדרות של ערוץ ההתראות

המשתמשים יכולים לשנות את ההגדרות של ערוצי ההתראות, כולל התנהגויות כמו רטט וצליל התראה. כדי לראות את ההגדרות שמשתמשים בחרו לערוצי ההתראות שלהם, פועלים לפי השלבים הבאים:

  1. מקבלים את אובייקט NotificationChannel על ידי קריאה ל-getNotificationChannel() או ל-getNotificationChannels().

  2. הגדרות ספציפיות של ערוץ בשאילתה, כמו getVibrationPattern(), getSound() ו- getImportance().

אם מזהים הגדרה של ערוץ שלדעתכם מונעת את ההתנהגות הרצויה של האפליקציה, אפשר להציע למשתמש לשנות אותה ולספק פעולה לפתיחת הגדרות הערוץ, כמו שמוצג בקטע הבא.

פתיחה של הגדרות ערוץ ההתראות

אחרי שיוצרים ערוץ התראות, אי אפשר לשנות באופן פרוגרמטי את ההתנהגויות החזותיות והקוליות של ערוץ ההתראות. רק המשתמש יכול לשנות את התנהגויות הערוץ בהגדרות המערכת. כדי לספק למשתמשים גישה קלה להגדרות ההתראות האלה, מוסיפים פריט בממשק המשתמש של ההגדרות באפליקציה, שפותח את הגדרות המערכת האלה.

אפשר לפתוח את הגדרות המערכת של ערוצי ההתראות באמצעות Intent שמשתמש בפעולה ACTION_CHANNEL_NOTIFICATION_SETTINGS.

לדוגמה, קטע הקוד הבא מראה איך אפשר להפנות משתמש להגדרות של ערוץ התראות:

Kotlin

val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
    putExtra(Settings.EXTRA_APP_PACKAGE, packageName)
    putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId())
}
startActivity(intent)

Java

Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
intent.putExtra(Settings.EXTRA_CHANNEL_ID, myNotificationChannel.getId());
startActivity(intent);

שימו לב שה-Intent דורש שני נתונים נוספים שמציינים את שם החבילה של האפליקציה (שנקרא גם מזהה האפליקציה) ואת הערוץ שרוצים לערוך.

מחיקת ערוץ התראות

כדי למחוק ערוצי התראות, מתקשרים אל deleteNotificationChannel(). קוד לדוגמה שמראה איך לבצע את התהליך הזה:

Kotlin

// The id of the channel.
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val id: String = "my_channel_01"
notificationManager.deleteNotificationChannel(id)

Java

NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// The id of the channel.
String id = "my_channel_01";
notificationManager.deleteNotificationChannel(id);

יצירת קבוצה של ערוצי התראות

אם רוצים לארגן עוד יותר את המראה של הערוצים בממשק המשתמש של ההגדרות, אפשר ליצור קבוצות ערוצים. מומלץ לעשות את זה אם האפליקציה תומכת בכמה חשבונות משתמשים, למשל פרופילים לעבודה, כי כך אפשר ליצור קבוצה של ערוצי התראות לכל חשבון. כך המשתמשים יכולים לזהות בקלות ולשלוט בכמה ערוצי התראות עם שמות זהים.

איור 2. הגדרות של ערוצי התראות עם קבוצות לחשבונות לשימוש אישי ולחשבונות לצורכי עבודה.

לדוגמה, אפליקציה של רשת חברתית עשויה לכלול תמיכה בחשבונות אישיים ובחשבונות לעבודה. בתרחיש הזה, יכול להיות שכל חשבון יצטרך כמה ערוצי התראות עם פונקציות ושמות זהים, כמו אלה:

  • חשבון אישי עם שני ערוצים:

    • תגובות חדשות

    • המלצות לפרסום

  • חשבון עסקי עם שני ערוצים:

    • תגובות חדשות

    • המלצות לפרסום

ארגון ערוצי ההתראות בקבוצות לכל חשבון מאפשר למשתמשים להבחין ביניהם.

לכל קבוצת ערוצי התראות נדרש מזהה, שחייב להיות ייחודי בחבילה, וגם שם שגלוי למשתמש. בקטע הקוד הבא מוצג אופן היצירה של קבוצת ערוצי התראות.

Kotlin

// 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
notificationManager.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))

Java

// The id of the group.
String groupId = "my_group_01";
// The user-visible name of the group.
CharSequence groupName = getString(R.string.group_name);
NotificationManager notificationManager =
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.createNotificationChannelGroup(new NotificationChannelGroup(groupId, groupName));

אחרי שיוצרים קבוצה חדשה, אפשר להתקשר אל setGroup() כדי לשייך אובייקט NotificationChannel חדש לקבוצה.

אחרי ששולחים את הערוץ למנהל ההתראות, אי אפשר לשנות את השיוך בין ערוץ ההתראות לקבוצה.