عرض الإشعارات الحساسة للوقت

قد يحتاج تطبيقك إلى لفت انتباه المستخدم بشكل عاجل في حالات معيّنة، مثل منبّه مستمر أو مكالمة واردة. على الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android (المستوى 28 لواجهة برمجة التطبيقات) أو الإصدارات الأقدم، يمكنك معالجة ذلك من خلال بدء نشاط أثناء تشغيل التطبيق في الخلفية. يوضّح هذا المستند كيفية تحقيق هذا السلوك على الأجهزة التي تعمل بنظام التشغيل Android 10 (المستوى 29 لواجهة برمجة التطبيقات) والإصدارات الأحدث.

إضافة إذن POST_NOTIFICATIONS

بدءًا من الإصدار 13 من نظام التشغيل Android (المستوى 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:

شاشة إشعارات &quot;معلومات التطبيق&quot; التي تعرض القناة التي تم إنشاؤها
الشكل 1: قسم "الإشعارات" في شاشة معلومات التطبيق ضمن إعدادات النظام للتطبيق

إدارة أذونات الإشعارات

بدءًا من الإصدار 13 من نظام التشغيل Android، يجب طلب إذن إرسال الإشعارات قبل عرض الإشعارات للمستخدمين.

يوضّح مثال الرمز البرمجي التالي كيفية طلب إذن إرسال الإشعارات أثناء التشغيل في 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")
}

على الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث، يؤدي النقر على زر طلب الإذن إلى عرض مربّع حوار النظام الموضّح في الشكل 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)

ننصحك باستخدام ميزة "التغطية المباشرة للأخبار"

يمكن أن تستفيد الإشعارات المستمرة الحسّاسة للوقت من زيادة مستوى ظهورها. ننصحك بالترويج للإشعارات المستمرة على أنّها تحديثات فورية لعرض معلومات الحالة على مستوى واجهات مستخدم النظام.