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

החל מ-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()

הגדרת רמת החשיבות

חשיבות הערוץ משפיעה על רמת ההפרעה של כל ההתראות שמפורסמות את הערוץ. ציין אותו ב-constructor של 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);

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

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

יש לך אפשרות למחוק ערוצי התראות באמצעות שיחת טלפון 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 חדש לקבוצה.

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