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

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

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

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // Create the NotificationChannel.
    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 =
        context.getSystemService(NotificationManager::class.java)
    notificationManager?.createNotificationChannel(mChannel)
}

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

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

במדריך לעיצוב התראות, בקטע Priority levels, מוסבר איך לבחור את רמת העדיפות המתאימה.

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

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

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

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

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

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

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

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

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

val intent = Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS).apply {
    putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName)
    putExtra(Settings.EXTRA_CHANNEL_ID, CHANNEL_ID)
}
Button(onClick = {
    context.startActivity(intent)
}) {
    Text("Open Channel Settings")
}

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

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

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

val notificationManager =
    ContextCompat.getSystemService<NotificationManager>(context, NotificationManager::class.java)
notificationManager?.deleteNotificationChannel(channelId)

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

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

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

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

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

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

    • המלצות לפוסטים

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

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

    • המלצות לפוסטים

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

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

fun createNotificationChannelGroup(context: Context, groupId: String, groupName: String) {
    val notificationManager =
        ContextCompat.getSystemService(context, NotificationManager::class.java)
    notificationManager?.createNotificationChannelGroup(NotificationChannelGroup(groupId, groupName))
}

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

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