
ترجم لك
مقالة بقلم براندون ويفر حول العمل مع الإخطارات في نظام التشغيل أندرويد. يشرح مبرمج كيفية إضافة هذه الوظيفة بسرعة إلى التطبيق الخاص بك. المقال ، أولاً وقبل كل شيء ، سيكون مفيدًا لمطوري Android المبتدئين.
تعد الإعلامات واحدة من أسهل وأسرع الطرق لجعل تطبيقك أكثر تفاعلًا ، مما سيجذب المزيد من المستخدمين. توفر الإخطارات للمستخدم معلومات موجزة حول ما قد يحتاجه الآن. إنها أيضًا طريقة للإبلاغ عن الأحداث القادمة. دعونا نحاول إضافة هذه الميزة بسرعة إلى التطبيق.
توصي Skillbox بما يلي: تطبيق Python Data Analyst على الإنترنت.
نذكرك: لجميع قراء "Habr" - خصم بقيمة 10،000 روبل عند التسجيل في أي دورة تدريبية في Skillbox باستخدام الرمز الترويجي "Habr".
إنشاء إعلام
الخطوة الأولى هي إنشاء كائن "إعلام". للقيام بذلك ، استخدم NotificationCompat.Builder. الحد الأدنى لمحتوى الإشعارات المسموح به من قبل مطوري Android هو رمز صغير. هذا جيد ، ولكن ليس مفيدًا جدًا للمستخدم. يوجد أدناه رسم تخطيطي لإشعار قياسي تم قبوله جيدًا.

سيتم عرض رمز صغير باستمرار ، ومن المهم جعله شفافًا. بدون هذا ، بدلاً من رمز ، تحصل على مربع أبيض.
عنوان الإخطار مهم أيضا. يجب أن يكون هذا وصفًا موجزًا لفهم سبب قلق المستخدم عمومًا.
يحتوي نص الإعلام على نص طويل مع كافة المعلومات اللازمة.
يمكن أن يكون رمز كبير شعار شركة أو أي شيء آخر.
أدناه خياران للمستخدم.
لعرض كل هذا ، تحتاج إلى رمز قصير:
.setSmallIcon(R.drawable.ic_announcement) .setContentTitle(title) .setContentText(body) .build()
عرض الإخطار
لقد أنشأنا إشعارنا ، والمهمة الآن هي إظهاره. يتيح Android القيام بذلك باستخدام NotificationManagerCompat. لإرسال إشعار ، يجب عليك استخدام الإعلام والإعلام نفسه.
with(NotificationManagerCompat.from(context)) { if (getNotificationChannel(CHANNEL_ID) == null) { createNotificationChannel(context) } notify(notificationId, builder.build()) }
هناك حاجة إلى رمز إضافي للتحقق من وجود قناة الإعلام.
القنوات والأهمية
لأول مرة ، حصل المستخدم على فرصة لاختيار أنواع الإخطارات من تطبيقاته في Oreo. من المهم إنشاء عدة قنوات ، لأنه إذا استمر كل شيء على قناة واحدة ، فلن يتمكن المستخدم من تحديد أنواع الإشعارات التي يحتاجها وسيحظر كل شيء.
teNotificationChannel(context: Context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val name = context.getString(R.string.channel_name) val descriptionText = context.getString(R.string.channel_description) val importance = NotificationManager.IMPORTANCE_HIGH val channel = NotificationChannel(CHANNEL_ID, name, importance).apply { description = descriptionText } NotificationManagerCompat.from(context).createNotificationChannel(channel) } }
يجب أن تتضمن القناة المعلومات التالية:
- معرف - معرف القناة ؛
- الاسم - يجب أن يكون قصيرًا ، على سبيل المثال ، "الرسائل" ؛
- أهمية - يمكن أن تكون مرتفعة أو افتراضية أو منخفضة أو ضئيلة ؛
- الوصف - سيتم عرضه في إعدادات Android. يجب على المطور الاهتمام بجودة الوصف.
تفاعل المستخدم
هناك عدة طرق يمكن للمستخدم من خلالها التفاعل مع الإشعارات. لحسن الحظ ، فإن واجهات برمجة التطبيقات التي تسمح لك بالتحكم في العملية متشابهة تمامًا. يتم استخدام Intents و PendingIntents لتوفير ملاحظات للتطبيق ، مما يوفر منطق معالجة محددًا.
أسهل طريقة للتعامل مع عدد كبير من الإخطارات هي استخدام BroadcastReceiver. عندما يبدأ المستخدم في التفاعل مع الإشعار ، ستطلق النية وسيتم استدعاء طريقة onReceive BroadcastReceiver.
val builder = NotificationCompat.Builder(context, CHANNEL_ID) ... .setContentIntent(onContentTapped ) .setDeleteIntent(onSwipedAway ) .addAction( R.drawable.ic_announcement, actionTitle, onActionTapped )
سيتم إطلاق ContentIntent من خلال النقر على الإخطار. تجدر الإشارة إلى أنه لن يتم رفض الإشعار إذا لم تقم باستدعاء setAutoCancel (صواب) فيه.
سيبدأ DeleteIntent بعد قيام المستخدم بحذف الإشعار.
الإجراءات هي الأزرار الموجودة أسفل الإشعار. لديهم أيضا شارات وأسماء.
لإنشاء BroadcastReceiver ، تحتاج إلى توسيع فئة BroadcastReceiver وتجاوز طريقة onReceive وتذكر أن تعلن عن Receiver في AndroidManifest.xml.
class NotificationBroadcastReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { val action = intent.action when (action) { ACTION_ONE -> { Toast.makeText(context, "Action One hit!", Toast.LENGTH_SHORT).show() } ACTION_TWO -> { Toast.makeText(context, "Action Two hit!", Toast.LENGTH_SHORT).show() } } } } object NotificationController { fun pendingIntent(context: Context, name: String, extras: Bundle?): PendingIntent { val intent = Intent(context, NotificationBroadcastReceiver::class.java).apply { action = name putExtra(EXTRA_NOTIFICATION_ID, extras) } return PendingIntent.getBroadcast(context, 0, intent, 0) } }
NotificationController هو أداة سريعة لإنشاء PendingIntents للإشعارات. الشيء الأكثر أهمية هو إعطاء الإجراءات أسماء مختلفة من أجل معالجة ردود فعل المستخدم بشكل صحيح على الإخطار. أيضًا ، إذا كنت تنوي بدء نشاط من BroadcastReceiver ، فعليك استخدام IntentFlag NEW_TASK.
هذا ضروري لمعالجة جميع الإخطارات في مكان واحد. يمكن تسجيل النوايا أيضًا في BroadcastReceivers المختلفة ، حتى تتمكن من قصر النطاق على BroadcastReceiver واحد لكل نوع من أنواع الإشعارات.
كل هذا مجرد بداية للعمل. هناك العديد من الأمثلة الرائعة في الوثائق ، لذا تأكد من دراستها إذا كانت لديك أسئلة أو تريد القيام بشيء أكثر تقدمًا.
توصي Skillbox بما يلي: