كيفيه ارسال الاشعارات لتطبيقك من Firebase بالطريقه الجديده (Flutter & Android & IOS)

تعرف على النظام الجديد لإرسال الإشعارات في فايربيز (HTTP v1) ولماذا هو الأفضل للمطورين

تعرف على النظام الجديد لإرسال الإشعارات في فايربيز (HTTP v1) ولماذا هو الأفضل للمطورين

إرسال الإشعارات اليوم صار أكثر أمانًا وتنظيمًا بفضل انتقال Firebase Cloud Messaging إلى HTTP v1 API بدل Legacy API. في هذا الدليل الحصري سأشرح لك خطوة-بخطوة كيفية إرسال إشعار من النوع topic باستخدام سكربت Node.js (مثال كامل مرفق)، وكيفية عمل نفس العملية من Postman، بالإضافة لنقاط مهمة متعلقة بـ FCM Flutter واشتراك التطبيق في الـ topic


لماذا HTTP v1؟

النسخة الجديدة (HTTP v1) تستخدم OAuth 2.0 Access Token بدل Server Key الثابت. الفائدة:

أمان أعلى (توكن مؤقت وليس مفتاح ثابت).

تكامل مع Google Cloud IAM.

بنية رسالة أكثر مرونة (تدعم apns/android/data بالإضافة إلى notification).

لكن التغيير يتطلب توليد توكن عبر Service Account JSON ووضع بنية message صحيحة (مثلاً لا تستخدم to كما كان في Legacy بل message.topic أو message.token).


المتطلبات الأساسية للتعامل مع الاشعارات

حساب Firebase ومشروع مفعل.

Service Account JSON (حمّلته من Firebase Console → Project Settings → Service accounts → Generate new private key).

تفعيل Firebase Cloud Messaging API من Google Cloud Console (APIs & Services → Library).

جهاز لتشغيل Node.js أو Postman.

تطبيق Flutter يشتري topic (لجزء FCM Flutter).


إرسال Topic Notification

import { GoogleAuth } from 'google-auth-library';
import fetch from 'node-fetch';
import fs from 'fs';

async function sendTopicNotification() {
  const credentials = JSON.parse(fs.readFileSync('path json file', 'utf8'));

  const auth = new GoogleAuth({
    credentials,
    scopes: ['https://www.googleapis.com/auth/firebase.messaging'],
  });

  const client = await auth.getClient();
  const token = await client.getAccessToken();

  const projectId = credentials.project_id;

  const body = {
    message: {
      topic: "SRM",
      notification: {
        title: "تحديث جديد 💸",
        body: "قم بتحديث التطبيق الآن للاستمتاع بالمميزات الجديدة"
      },
      data: {
        url: "https://www.geecoders.com",
        id_app: "com.geecoders.geecoders"
      },
      apns: {
        payload: {
          aps: {
            sound: "Tri-tone",
            "mutable-content": 1
          }
        }
      }
    }
  };

  const response = await fetch(`https://fcm.googleapis.com/v1/projects/${projectId}/messages:send`, {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${token.token}`,
      'Content-Type': 'application/json; UTF-8'
    },
    body: JSON.stringify(body)
  });

  const result = await response.json();
  console.log("Response from FCM:", result);
  console.log("projectId ===:", projectId);
  console.log("token ===:", token.token);
}

sendTopicNotification().catch(console.error);

شرح كيفيه التنفيذ داخل السكربت
يقرأ ملف software-m.json ويحصل منه على project_id وبيانات الاعتماد.
يستخدم google-auth-library لتكوين عميل OAuth والحصول على access_token.
يبني جسم الرسالة وفق بنية HTTP v1: حقل message يحتوي topic, notification, data, وapns (لـ iOS).

ملاحظات تنفيذية عن Node:
إذا استعملت node-fetch إصدار حديث (ESM) فتأكد من تشغيل الملف كـ ES Module (غَيِّر اسم الملف إلى .mjs أو ضع "type": "module" في package.json).
بدلاً من node-fetch يمكنك استخدام axios أو global fetch في Node 18+.

npm init -y
npm install google-auth-library node-fetch

كيف تعمل نفس العملية من Postman

توليد Access Token:
الطرقة البسيطة: استخدم السكربت أعلاه لتوليد توكن جديد ثم انسخه.

بدائل: إعداد Authorization في Postman لاستخراج توكن عبر إعداد JWT OAuth2 (معقد قليلاً) — لكن الأسهل هو استخدام السكربت مؤقتًا.

إعداد Request في Postman:
Method: POST

https://fcm.googleapis.com/v1/projects/geecoders/messages:send

- Headers:
    - `Authorization: Bearer <ACCESS_TOKEN>` (التوكن الذي حصلت عليه)
    - `Content-Type: application/json` (أو `application/json; UTF-8`)

body:
{
  "message": {
    "topic": "SRM",
    "notification": {
      "title": "تحديث جديد 💸",
      "body": "قم بتحديث التطبيق الآن للاستمتاع بالمميزات الجديدة"
    },
    "data": {
      "url": "https://www.geecoders.com",
      "id_app": "com.geecoders.geecoders"
    },
    "apns": {
      "payload": {
        "aps": {
          "sound": "Tri-tone",
          "mutable-content": 1
        }
      }
    }
  }
}
إرسال الإشعارات بالطريقة الجديدة يوفر أمانًا وتحكمًا أكبر، وباستخدام السكربت أعلاه يمكنك بسرعة توليد Access Token وإرسال رسالة topic جاهزة مع دعم iOS عبر apns. في Postman يمكنك تجربة نفس الجسم بعد توليد توكن صالح، وتأكد دائمًا من project_id وصلاحيات الـ Service Account. إذا أردت، أقدملك ملف Postman Collection جاهز أو سكربت Node.js معدل ليأخذ الوسائط (topic، title، body) من سطر الأوامر عشان تسهّل عملية الإرسال
تعليقات