הצגת התראות תלויות-זמן

יכול להיות שהאפליקציה תצטרך למשוך את תשומת הלב של המשתמש בדחיפות במצבים מסוימים, למשל אם יש התראה פעילה או שיחה נכנסת. במכשירים עם Android 9 (רמת API‏ 28) ומטה, אפשר לטפל בזה על ידי הפעלת פעילות בזמן שהאפליקציה פועלת ברקע. במאמר הזה מוסבר איך להשיג את ההתנהגות הזו במכשירים עם Android 10 (רמת API‏ 29) (רמת API‏ 29) ומעלה.

הוספת ההרשאה POST_NOTIFICATIONS

החל מ-Android 13 (רמת API‏ 33), צריך להצהיר על ההרשאה POST_NOTIFICATIONS בקובץ AndroidManifest.xml:

<manifest ...>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
    <application ...>
        ...
    </application>
</manifest>

אחרי שמצהירים על ההרשאה, יוצרים ערוץ התראות.

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

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

יוצרים את ערוצי ההתראות בשיטה onCreate של המחלקה Application:

class MyApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        val channel = NotificationChannel(
            CHANNEL_ID,
            "High priority notifications",
            NotificationManager.IMPORTANCE_HIGH
        )

        val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.createNotificationChannel(channel)
    }
}

כשהמשתמש מפעיל את האפליקציה בפעם הראשונה, המערכת מציגה את הערוץ במסך פרטי האפליקציה, כמו שמוצג באיור 1:

מסך ההתראות של פרטי האפליקציה שבו מוצג הערוץ שנוצר.
איור 1. הקטע 'התראות' במסך פרטי האפליקציה בהגדרות המערכת של האפליקציה.

ניהול ההרשאות לשליחת התראות

החל מ-Android 13, צריך לבקש הרשאות לשליחת התראות לפני שמציגים התראות למשתמשים.

בדוגמת הקוד הבאה אפשר לראות איך מבקשים הרשאת הפעלת התראות בזמן ריצה ב-Jetpack Compose:

val permissionLauncher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.RequestPermission(),
    onResult = { hasNotificationPermission = it }
)
// ...
Button(
    onClick = {
        if (!hasNotificationPermission) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                permissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
            }
        }
    },
) {
    Text(text = "Request permission")
}

במכשירים עם Android 13 ואילך, הקשה על הלחצן בקשת הרשאה מציגה את תיבת הדו-שיח של המערכת שמוצגת באיור 2:

תיבת הדו-שיח של המערכת שמבקשת מהמשתמש לאשר את ההתראות.
איור 2. תיבת דו-שיח של המערכת לבקשת הרשאה לשליחת התראות.

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

מסך פרטי האפליקציה שבו מוצגות ההרשאות שניתנו לשליחת התראות.
איור 3. ניתנה הרשאה לשליחת התראות.

יצירת התראה עם עדיפות גבוהה

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

בדוגמת הקוד הבאה מוגדרת ונוצרת התראה בעדיפות גבוהה:

private fun showNotification() {
    val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

    val notificationBuilder =
        NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.baseline_auto_awesome_24)
            .setContentTitle("HIGH PRIORITY")
            .setContentText("Check this dog puppy video NOW!")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setCategory(NotificationCompat.CATEGORY_RECOMMENDATION)

    notificationManager.notify(0, notificationBuilder.build())
}

הצגת ההתראה למשתמש

הפעלת הפונקציה showNotification מפעילה את ההתראה באופן הבא:

Button(onClick = { showNotification() }) {
    Text(text = "Show notification")
}

באיור 4 מוצגת ההתראה בעדיפות גבוהה שמוצגת על ידי המערכת:

התראה בעדיפות גבוהה שמוצגת במכשיר.
איור 4. התראה עם עדיפות גבוהה.

התראה מתמשכת

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

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

// Provide a unique integer for the "notificationId" of each notification.
startForeground(notificationId, notification)

כדאי להשתמש בעדכונים בזמן אמת

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