FCM HTTP v1 API का इस्तेमाल करके मैसेज भेजना

FCM HTTP v1 API का इस्तेमाल करके, मैसेज के अनुरोध बनाए जा सकते हैं और उन्हें इन तरह के टारगेट को भेजा जा सकता है:

  • विषय का नाम
  • शर्त
  • डिवाइस रजिस्टर करने का टोकन
  • डिवाइस ग्रुप का नाम (सिर्फ़ प्रोटोकॉल के लिए)

मैसेज में, सूचना पेलोड शामिल किया जा सकता है. इसमें पहले से तय किए गए फ़ील्ड होते हैं. इसके अलावा, उपयोगकर्ता की ओर से तय किए गए फ़ील्ड का डेटा पेलोड भी शामिल किया जा सकता है. साथ ही, दोनों तरह के पेलोड वाला मैसेज भी भेजा जा सकता है. ज़्यादा जानकारी के लिए, मैसेज के टाइप देखें.

एचटीटीपी v1 के अनुरोध भेजने की अनुमति देना

Firebase की सेवाओं के लिए, सर्वर के अनुरोधों को अनुमति देने के लिए, अपने सर्वर एनवायरमेंट की जानकारी के हिसाब से, इन रणनीतियों के कॉम्बिनेशन का इस्तेमाल करें:

  • Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी)
  • सेवा खाते की JSON फ़ाइल
  • सेवा खाते से लिया गया, कम समय के लिए मान्य OAuth 2.0 ऐक्सेस टोकन

अगर आपका ऐप्लिकेशन Compute Engine, Google Kubernetes Engine, App Engine या Cloud Functions पर चल रहा है (इसमें Cloud Functions for Firebase भी शामिल है), तो ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी) का इस्तेमाल करें. एडीसी, अनुरोधों को अनुमति देने के लिए क्रेडेंशियल पाने के लिए, आपके मौजूदा डिफ़ॉल्ट सेवा खाते का इस्तेमाल करता है. साथ ही, एडीसी, एनवायरमेंट वैरिएबल GOOGLE_APPLICATION_CREDENTIALS के ज़रिए, स्थानीय तौर पर फ़्लेक्सिबल टेस्टिंग की सुविधा देता है. अनुमति देने की प्रोसेस को पूरी तरह से ऑटोमेट करने के लिए, एडीसी के साथ Admin SDK की सर्वर लाइब्रेरी का इस्तेमाल करें.

अगर आपका ऐप्लिकेशन, Google के सर्वर एनवायरमेंट के अलावा किसी और सर्वर एनवायरमेंट पर चल रहा है, तो आपको अपने Firebase प्रोजेक्ट से, सेवा खाते की JSON फ़ाइल डाउनलोड करनी होगी. जब तक आपके पास निजी पासकोड वाली फ़ाइल के फ़ाइल सिस्टम का ऐक्सेस है, तब तक मैन्युअल तरीके से हासिल किए गए इन क्रेडेंशियल की मदद से, अनुरोधों को अनुमति देने के लिए, एनवायरमेंट वैरिएबल GOOGLE_APPLICATION_CREDENTIALS का इस्तेमाल किया जा सकता है. अगर आपके पास इस तरह का फ़ाइल ऐक्सेस नहीं है, तो आपको अपने कोड में, सेवा खाते की फ़ाइल का रेफ़रंस देना होगा. क्रेडेंशियल के सार्वजनिक होने के जोखिम की वजह से, यह काम बहुत सावधानी से करना चाहिए.

एडीसी का इस्तेमाल करके क्रेडेंशियल देना

Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी), आपके क्रेडेंशियल की जांच इस क्रम में करता है:

  1. एडीसी, यह जांचता है कि एनवायरमेंट वैरिएबल GOOGLE_APPLICATION_CREDENTIALS सेट है या नहीं. अगर वैरिएबल सेट है, तो एडीसी उस सेवा खाते की फ़ाइल का इस्तेमाल करता है जिसे वैरिएबल पॉइंट करता है.

  2. अगर एनवायरमेंट वैरिएबल सेट नहीं है, तो एडीसी उस डिफ़ॉल्ट सेवा खाते का इस्तेमाल करता है जो Compute Engine, Google Kubernetes Engine, App Engine, और Cloud Functions, उन ऐप्लिकेशन के लिए उपलब्ध कराते हैं जो इन सेवाओं पर चलते हैं.

  3. अगर एडीसी, ऊपर दिए गए किसी भी क्रेडेंशियल का इस्तेमाल नहीं कर पाता है, तो सिस्टम में गड़बड़ी का मैसेज दिखता है.

Admin SDK के कोड के इस उदाहरण से, इस रणनीति के बारे में पता चलता है. इस उदाहरण में, ऐप्लिकेशन के क्रेडेंशियल साफ़ तौर पर नहीं बताए गए हैं. हालांकि, एडीसी, क्रेडेंशियल को अपने-आप ढूंढ लेता है. ऐसा तब तक होता है, जब तक एनवायरमेंट वैरिएबल सेट है या जब तक ऐप्लिकेशन, Compute Engine, Google Kubernetes Engine, App Engine, या Cloud Functions पर चल रहा है.

Node.js

admin.initializeApp({
  credential: admin.credential.applicationDefault(),
});

Java

FirebaseOptions options = FirebaseOptions.builder()
    .setCredentials(GoogleCredentials.getApplicationDefault())
    .setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
    .build();

FirebaseApp.initializeApp(options);

Python

default_app = firebase_admin.initialize_app()

Go

app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
	log.Fatalf("error initializing app: %v\n", err)
}

C#

FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.GetApplicationDefault(),
});

मैन्युअल तरीके से क्रेडेंशियल देना

Firebase प्रोजेक्ट, Google के सेवा खातों के साथ काम करते हैं. इनका इस्तेमाल, अपने ऐप्लिकेशन सर्वर या भरोसेमंद एनवायरमेंट से, Firebase के सर्वर एपीआई को कॉल करने के लिए किया जा सकता है. अगर स्थानीय तौर पर कोड डेवलप किया जा रहा है या अपने ऐप्लिकेशन को कंपनी की इमारत में डिप्लॉय किया जा रहा है, तो सर्वर के अनुरोधों को अनुमति देने के लिए, इस सेवा खाते का इस्तेमाल करके हासिल किए गए क्रेडेंशियल का इस्तेमाल किया जा सकता है.

अपने Firebase प्रोजेक्ट के सभी सेवा खाते देखने के लिए, सेटिंग सेटिंग > सेवा खाते टैब पर जाएं.

किसी सेवा खाते की पुष्टि करने और उसे Firebase की सेवाओं को ऐक्सेस करने की अनुमति देने के लिए, JSON फ़ॉर्मैट में निजी पासकोड वाली फ़ाइल जनरेट करनी होगी.

अपने सेवा खाते के लिए, निजी पासकोड वाली फ़ाइल जनरेट करने के लिए:

  1. Firebase कंसोल में, सेटिंग सेटिंग > सेवा खाते टैब पर जाएं.

  2. नया निजी पासकोड जनरेट करें पर क्लिक करें. इसके बाद, पासकोड जनरेट करें पर क्लिक करके पुष्टि करें.

  3. पासकोड वाली JSON फ़ाइल को सुरक्षित तरीके से सेव करें.

सेवा खाते के ज़रिए अनुमति देते समय, आपके पास अपने ऐप्लिकेशन को क्रेडेंशियल देने के दो विकल्प होते हैं. आप या तो GOOGLE_APPLICATION_CREDENTIALS एनवायरमेंट वैरिएबल सेट कर सकते हैं या कोड में, सेवा खाते की कुंजी का पाथ साफ़ तौर पर दे सकते हैं. पहला विकल्प ज़्यादा सुरक्षित है. इसलिए, इसे इस्तेमाल करने की सलाह दी जाती है.

एनवायरमेंट वैरिएबल सेट करने के लिए:

एनवायरमेंट वैरिएबल GOOGLE_APPLICATION_CREDENTIALS को, उस JSON फ़ाइल के फ़ाइल पाथ पर सेट करें जिसमें आपके सेवा खाते की कुंजी शामिल है. यह वैरिएबल, सिर्फ़ आपके मौजूदा शेल सेशन पर लागू होता है. इसलिए, अगर कोई नया सेशन खोला जाता है, तो वैरिएबल को फिर से सेट करें.

Linux या macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

Windows

PowerShell के साथ:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

ऊपर दिए गए चरणों को पूरा करने के बाद, ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल (एडीसी), आपके क्रेडेंशियल को अपने-आप ढूंढ लेता है. इससे, Google के एनवायरमेंट के अलावा किसी और एनवायरमेंट में टेस्टिंग या रन करते समय, सेवा खाते के क्रेडेंशियल का इस्तेमाल किया जा सकता है.

ऐक्सेस टोकन जनरेट करने के लिए क्रेडेंशियल का इस्तेमाल करना

अगर Firebase Admin SDK का इस्तेमाल नहीं किया जा रहा है, तो आपको ऐक्सेस टोकन जनरेट करना होगा और उसे अनुरोध भेजने के लिए जोड़ना होगा. यह अनुमति देने की प्रोसेस को अपने-आप मैनेज करता है.

कम समय के लिए मान्य OAuth 2.0 ऐक्सेस टोकन पाने के लिए, अपनी पसंदीदा भाषा के लिए Google Auth Library के साथ, Firebase के क्रेडेंशियल का इस्तेमाल करें:

node.js

 function getAccessToken() {
  return new Promise(function(resolve, reject) {
    const key = require('../placeholders/service-account.json');
    const jwtClient = new google.auth.JWT(
      key.client_email,
      null,
      key.private_key,
      SCOPES,
      null
    );
    jwtClient.authorize(function(err, tokens) {
      if (err) {
        reject(err);
        return;
      }
      resolve(tokens.access_token);
    });
  });
}

इस उदाहरण में, Google API क्लाइंट लाइब्रेरी, JSON वेब टोकन या JWT की मदद से अनुरोध की पुष्टि करती है. ज़्यादा जानकारी के लिए, JSON वेब टोकन देखें.

Python

def _get_access_token():
  """Retrieve a valid access token that can be used to authorize requests.

  :return: Access token.
  """
  credentials = service_account.Credentials.from_service_account_file(
    'service-account.json', scopes=SCOPES)
  request = google.auth.transport.requests.Request()
  credentials.refresh(request)
  return credentials.token

Java

private static String getAccessToken() throws IOException {
  GoogleCredentials googleCredentials = GoogleCredentials
          .fromStream(new FileInputStream("service-account.json"))
          .createScoped(Arrays.asList(SCOPES));
  googleCredentials.refresh();
  return googleCredentials.getAccessToken().getTokenValue();
}

ऐक्सेस टोकन की समय-सीमा खत्म होने के बाद, अपडेट किया गया ऐक्सेस टोकन पाने के लिए, टोकन रीफ़्रेश करने का तरीका अपने-आप कॉल हो जाता है.

FCM को ऐक्सेस करने की अनुमति देने के लिए, स्कोप https://www.googleapis.com/auth/firebase.messaging का अनुरोध करें.

एचटीटीपी के अनुरोध के हेडर में ऐक्सेस टोकन जोड़ने के लिए:

टोकन को Authorization हेडर की वैल्यू के तौर पर, Authorization: Bearer <access_token> फ़ॉर्मैट में जोड़ें:

node.js

headers: {
  'Authorization': 'Bearer ' + accessToken
}

Python

headers = {
  'Authorization': 'Bearer ' + _get_access_token(),
  'Content-Type': 'application/json; UTF-8',
}

Java

URL url = new URL(BASE_URL + FCM_SEND_ENDPOINT);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestProperty("Authorization", "Bearer " + getServiceAccountAccessToken());
httpURLConnection.setRequestProperty("Content-Type", "application/json; UTF-8");
return httpURLConnection;

किसी दूसरे प्रोजेक्ट से सेवा खाते को अनुमति देना

किसी एक प्रोजेक्ट, "टारगेट प्रोजेक्ट" के लिए मैसेज भेजे जा सकते हैं. इसके लिए, किसी दूसरे प्रोजेक्ट , "सेंडर प्रोजेक्ट" में सेवा खाते से जनरेट किए गए OAuth 2.0 टोकन का इस्तेमाल किया जा सकता है. इससे, सेवा खाते के मैनेजमेंट को एक प्रोजेक्ट में केंद्रीकृत किया जा सकता है. साथ ही, दूसरों की ओर से मैसेज भेजे जा सकते हैं. ऐसा करने का तरीका जानने के लिए, यह तरीका अपनाएं:

  1. सेंडर प्रोजेक्ट में, पक्का करें कि Firebase क्लाउड से मैसेज API की सुविधा चालू हो. Firebase कंसोल में, सेटिंग > सामान्य पर जाकर, इसकी पुष्टि करें. इसके बाद, Cloud Messaging टैब पर क्लिक करें.

  2. सेंडर प्रोजेक्ट में, कोई सेवा खाता बनाएं.

  3. टारगेट प्रोजेक्ट में, सेवा खाते के ईमेल पते को Firebase क्लाउड से मैसेज API एडमिन की भूमिका असाइन करें. यह काम, Google Cloud कंसोल के IAM और एडमिन > IAM पेज पर किया जाता है. इस भूमिका की मदद से, सेंडर प्रोजेक्ट में मौजूद सेवा खाता, टारगेट प्रोजेक्ट को मैसेज भेज सकता है.

  4. OAuth 2.0 ऐक्सेस टोकन जनरेट करें सेंडर प्रोजेक्ट में मौजूद सेवा खाते के लिए. इसके लिए, इनमें से कोई एक विकल्प इस्तेमाल करें:

    • सेवा खाते की कुंजी वाली JSON फ़ाइल डाउनलोड करना और उसका इस्तेमाल करना.
    • अगर आपकी सेवा, Google Cloud पर चल रही है, तो Workload Identity का इस्तेमाल करना.
  5. भेजने के अनुरोध के Authorization हेडर में, हासिल किए गए ऐक्सेस टोकन का इस्तेमाल करें. अनुरोध, टारगेट प्रोजेक्ट के लिए, एचटीटीपी v1 एंडपॉइंट पर भेजा जाना चाहिए:

      POST https://fcm.googleapis.com/v1/TARGET_PROJECT_ID/messages:send

चुनिंदा डिवाइसों पर मैसेज भेजना

किसी एक डिवाइस पर मैसेज भेजने के लिए, डिवाइस का रजिस्ट्रेशन टोकन पास करें. जैसा कि यहां दिखाया गया है.

REST

POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1

Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

{
   "message":{
      "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
      "notification":{
        "body":"This is an FCM notification message!",
        "title":"FCM Message"
      }
   }
}

cURL कमांड:

curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message":{
   "notification":{
     "title":"FCM Message",
     "body":"This is an FCM Message"
   },
   "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send

सफलता मिलने पर, एचटीटीपी v1 API का रिस्पॉन्स, एक JSON ऑब्जेक्ट होता है. इसमें मैसेज आईडी शामिल होता है:

    {
      "name":"projects/myproject-b5ae1/messages/0:1500415314455276%31bd1c9631bd1c96"
    }

FCM HTTP v1 API का इस्तेमाल करके, टेस्ट सूचना मैसेज भेजना

इस सेक्शन में, FCM HTTP v1 API का इस्तेमाल करके, टेस्ट सूचना मैसेज भेजने का तरीका बताया गया है.

एचटीटीपी अनुरोध का यूआरएल

अनुरोध में, बताए गए टारगेट (रजिस्ट्रेशन टोकन, विषय या शर्त) पर, एचटीटीपी पीओएसटी शामिल होता है. यह अनुरोध, इस यूआरएल पर भेजा जाता है:

POST https://fcm.googleapis.com/v1/projectId/messages:send

एचटीटीपी के अनुरोध के JSON का पूरा सैंपल

यहां एक पूरा उदाहरण दिया गया है. इसमें दिखाया गया है कि एचटीटीपी पीओएसटी के अनुरोध में सूचना कैसे पोस्ट की जाती है:

{
  "message": {
    "token": REGISTRATION_TOKEN,
    "notification": {
      "title": "FCM API test",
      "body": "This is the body of the notification.",
      "image": "https://cat.10515.net/1.jpg"
    }
  }
}

दौड़ें

API Explorer में सैंपल आज़माने के लिए, रन पर क्लिक करें.