البرمجة

تفعيل إشعارات Firebase على أندرويد

التفاعل مع الإشعارات عبر Firebase Cloud Messaging (FCM) في تطبيقات الأندرويد يمكن أن يكون أمرًا معقدًا في بعض الأحيان، ولكن يمكن تحقيق الهدف من خلال بعض الخطوات الصحيحة. دعني أساعدك في فهم كيفية تنفيذه بشكل صحيح.

أولاً، تأكدت من فهم الخطوات الأساسية لإرسال الإشعارات والبيانات من الخادم إلى جهاز الأندرويد باستخدام FCM، وبالنظر إلى الكود الذي قدمته، يبدو أن هذا الجانب متميز. قمت بإرسال البيانات والإشعارات بنجاح.

ثانيًا، الخطوة المهمة هي التعامل مع البيانات عند استلام الإشعار في التطبيق. في كلاس MyFirebaseMessagingService، أنت تقوم بإعداد النية (Intent) لفتح التطبيق عند النقر على الإشعار. وهنا يكمن الجزء الحساس: كيفية تمرير البيانات من الإشعار إلى النشاط الذي يتم فتحه.

قمت بتضمين البيانات مع النية في طريقة sendNotification، ولكن هناك بعض النقاط التي يجب مراعاتها:

  1. تحديد نوع النية: استخدمت Intent.FLAG_ACTIVITY_NEW_TASK لفتح النشاط في مهمة جديدة، و Intent.FLAG_ACTIVITY_SINGLE_TOP و Intent.FLAG_ACTIVITY_CLEAR_TOP لتحديث النشاط إذا كان موجودًا بالفعل. هذا صحيح لكنه قد لا يكون كافيا بناء على حالة التطبيق.

  2. استخدمت PendingIntent.FLAG_UPDATE_CURRENT لتحديث النية الحالية. هذا أيضاً صحيح، ولكن يمكن أن يتسبب في تحديث النشاط المفتوح بالفعل ببيانات جديدة، وهو ما قد يفسر سبب فقدان البيانات في بعض الأحيان.

للتأكد من استلام البيانات بشكل صحيح في MainActivity، يجب عليك القيام بالتالي:

  1. في الأسطر الأولى من onCreate، استدعاء super.onCreate(savedInstanceState) يجب أن يكون قبل أي شيء آخر في الدالة.

  2. تأكد من استخدام onNewIntent بشكل صحيح. في الوقت الحالي، أنت تقوم بإعادة تعيين النية دون استخدامها لأي شيء.

  3. في onResume، تحقق من استلام البيانات بعد استدعاء super.onResume().

  4. يمكنك أيضًا استخدام Log.d لتسجيل البيانات المستلمة للتأكد من أنها تأتي بشكل صحيح.

  5. تأكد من أنك تفحص قيم Intent.EXTRA_INTENT في onNewIntent.

قد يساعد القيام بخطوات التحقق هذه في تحديد سبب فقدان البيانات. وإذا كانت المشكلة ما زالت قائمة، يمكن أن يكون الحل يتطلب بعض التعديلات الإضافية على الكود، وسأكون سعيدًا بمساعدتك في ذلك.

المزيد من المعلومات

بالتأكيد، سأكمل المقال لمساعدتك في تحقيق الهدف النهائي.

بعد مراجعة الكود وتنفيذ الخطوات المقترحة، قد تجد أنه لا يزال هناك بعض التحديات في استلام البيانات بشكل صحيح في MainActivity، خاصةً عندما يكون التطبيق في الخلفية. للتعامل مع هذه الحالة بشكل صحيح، يجب عليك تعديل الكود ليتمكن من استلام البيانات حتى عندما يكون التطبيق في الخلفية.

قد تجد الحل في استخدام BroadcastReceiver للاستماع إلى النية التي تم تمريرها عند استلام الإشعار، حتى إذا كان التطبيق في الخلفية، يمكنك معالجة البيانات بشكل صحيح. لتحقيق ذلك، يمكنك اتباع الخطوات التالية:

  1. قم بإنشاء BroadcastReceiver جديد في التطبيق للاستماع إلى النية التي تم تمريرها عند استلام الإشعار. يجب أن يكون هذا المستقبل مسجلًا في ملف manifest.xml.

  2. في BroadcastReceiver، استلم البيانات من النية وقم بتحليلها للاستخدام في التطبيق. يمكنك استخدامها لفتح النشاط المناسب أو لتنفيذ أي إجراء آخر يتعلق بالبيانات المستلمة.

  3. استخدم IntentService إذا كان هناك حاجة لمعالجة البيانات بشكل أساسي عند استلامها، مثل تحديث قاعدة البيانات أو إجراء أي عملية طويلة.

مثال على كيفية تنفيذ هذه الخطوات:

java
public class MyNotificationReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // استلام البيانات من النية String fcmNotification = intent.getStringExtra("fcm_notification"); String userId = intent.getStringExtra("user_id"); String date = intent.getStringExtra("date"); String halId = intent.getStringExtra("hal_id"); String mView = intent.getStringExtra("M_view"); // قم بمعالجة البيانات هنا، مثلاً فتح النشاط المناسب Intent newIntent = new Intent(context, YourTargetActivity.class); newIntent.putExtra("user_id", userId); newIntent.putExtra("date", date); newIntent.putExtra("hal_id", halId); newIntent.putExtra("M_view", mView); newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(newIntent); } }

وبعد ذلك، قم بتسجيل BroadcastReceiver في ملف manifest.xml:

xml
<receiver android:name=".MyNotificationReceiver" android:exported="false"> <intent-filter> <action android:name="com.example.notification.ACTION" /> intent-filter> receiver>

ثم، في طريقة sendNotification في MyFirebaseMessagingService، غير النية لتحمل العمل المناسب:

java
Intent intent = new Intent("com.example.notification.ACTION"); intent.putExtra("fcm_notification", "Y"); intent.putExtra("user_id", user_id); intent.putExtra("date", date); intent.putExtra("hal_id", hal_id); intent.putExtra("M_view", M_view); PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), uniqueInt, intent, PendingIntent.FLAG_UPDATE_CURRENT);

باستخدام هذه الطريقة، يمكنك استقبال البيانات بشكل صحيح حتى عندما يكون التطبيق في الخلفية، والقيام بالعمل المناسب بناءً عليها. استمتع بتطوير تطبيقك مع Firebase واستخدام الإشعارات بشكل فعّال!

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر