अनुरोध भेजने की अनुमति दें

आपके ऐप्लिकेशन सर्वर या भरोसेमंद एनवायरमेंट से, FCM को भेजे गए अनुरोध को अनुमति होनी चाहिए. बंद की गई साइटों के बीच के इन अहम अंतरों पर ध्यान दें लेगसी एचटीटीपी एपीआई और एचटीटीपी v1 एपीआई की अनुमति:

  • FCM HTTP v1 API, कुछ समय के लिए मान्य OAuth 2.0 ऐक्सेस टोकन की मदद से अनुरोधों को अनुमति देता है. इस टोकन को माइन करने के लिए, Google सर्वर एनवायरमेंट में Google ऐप्लिकेशन के डिफ़ॉल्ट क्रेडेंशियल का इस्तेमाल किया जा सकता है. इसके अलावा, सेवा खाते के लिए जनरेट की गई JSON निजी कुंजी फ़ाइल से, मैन्युअल तरीके से ज़रूरी क्रेडेंशियल भी हासिल किए जा सकते हैं. अगर मैसेज भेजने के लिए Firebase Admin SDK का इस्तेमाल किया जा रहा है, तो लाइब्रेरी आपके लिए टोकन मैनेज करती है.
  • काम न करने वाले लेगसी प्रोटोकॉल, सिर्फ़ लंबे समय तक इस्तेमाल की जा सकने वाली एपीआई पासकोड इस्तेमाल कर सकते हैं Firebase कंसोल से.

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

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

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

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

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

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

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

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

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

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

एडमिन 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()

शुरू करें

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 की सेवाओं को ऐक्सेस करने की अनुमति देने के लिए, आपको 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"

शीशा

PowerShell की मदद से:

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

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

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

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

अपने Firebase क्रेडेंशियल का एक साथ इस्तेमाल करें Google ऑथ लाइब्रेरी कृपया कुछ समय तक चलने वाले OAuth 2.0 ऐक्सेस टोकन को फिर से पाने के लिए, अपनी पसंदीदा भाषा का इस्तेमाल करें:

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;

लेगसी प्रोटोकॉल से अनुरोध भेजने की अनुमति देना

एचटीटीपी लेगसी प्रोटोकॉल के साथ, हर अनुरोध में Firebase कंसोल के सेटिंग पैनल के क्लाउड मैसेजिंग टैब से मिली सर्वर कुंजी होनी चाहिए. XMPP के लिए, कनेक्शन स्थापित करने के लिए आपको एक ही सर्वर कुंजी का उपयोग करना होगा.

लेगसी सर्वर कुंजियों को माइग्रेट करें

मार्च 2020 से, FCM ने लेगसी सर्वर कुंजियां बनाना बंद कर दिया है. मौजूदा लेगसी सर्वर कुंजियां काम करती रहेंगी. हालांकि, हमारा सुझाव है कि आप Firebase कंसोल में, सर्वर कुंजी लेबल वाली कुंजी के नए वर्शन का इस्तेमाल करें.

अगर आपको किसी मौजूदा लेगसी सर्वर पासकोड को मिटाना है, तो Google Cloud कंसोल में जाकर ऐसा किया जा सकता है.

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

मैसेज के अनुरोध में दो हिस्से होते हैं: एचटीटीपी हेडर और एचटीटीपी कोड. एचटीटीपी हेडर में ये हेडर होने चाहिए:

  • Authorization: key=YOUR_SERVER_KEY
    पक्का करें कि यह सर्वर कुंजी हो, जिसकी वैल्यू Firebase कंसोल के सेटिंग पैनल के Cloud Messaging टैब में उपलब्ध हो. FCM, Android, Apple प्लैटफ़ॉर्म, और ब्राउज़र की कुंजियों को स्वीकार नहीं करता.
  • Content-Type: JSON के लिए application/json; सादे टेक्स्ट के लिए application/x-www-form-urlencoded;charset=UTF-8.
    अगर Content-Type को हटा दिया जाता है, तो फ़ॉर्मैट को सादा टेक्स्ट माना जाता है.

उदाहरण के लिए:

Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "data" : {
    ...
  },
}

ईमेल भेजने के अनुरोध बनाने के बारे में पूरी जानकारी के लिए, ईमेल भेजने के अनुरोध बनाएं लेख पढ़ें. लेगसी एचटीटीपी प्रोटोकॉल रेफ़रंस उन सभी पैरामीटर की सूची देता है जो आपके मैसेज में शामिल हो सकते हैं.

सर्वर कुंजी की वैधता की जांच की जा रही है

अगर आपको ईमेल भेजते समय, पुष्टि करने से जुड़ी गड़बड़ियां मिलती हैं, तो मैसेज की वैधता की जांच करें अपडेट किया जा सकता है. उदाहरण के लिए, Linux पर, नीचे दिया गया कमांड चलाएं:

api_key=YOUR_SERVER_KEY

curl --header "Authorization: key=$api_key" \
     --header Content-Type:"application/json" \
     https://fcm.googleapis.com/fcm/send \
     -d "{\"registration_ids\":[\"ABC\"]}"

अगर आपको 401 एचटीटीपी स्टेटस कोड मिलता है, तो इसका मतलब है कि आपकी सर्वर पासकोड अमान्य है.

XMPP कनेक्शन को अनुमति देना

XMPP के साथ, आप FCM सर्वर से स्थायी, एसिंक्रोनस, द्विदिशात्मक कनेक्शन. कॉन्टेंट बनाने कनेक्शन का उपयोग आपके सर्वर और आपके उपयोगकर्ताओं का कनेक्ट किए गए FCM डिवाइस.

'Google मैप' पर XMPP लाइब्रेरी, जो FCM के साथ लंबे समय तक चलने वाले कनेक्शन को मैनेज करती हैं. XMPP एंडपॉइंट, fcm-xmpp.googleapis.com:5235 पर चलता है. जांच करते समय नहीं, तो आपको इस पर प्री-प्रोडक्शन सर्वर से कनेक्ट करना चाहिए: fcm-xmpp.googleapis.com:5236 (अलग-अलग पोर्ट पर ध्यान दें).

प्री-प्रोडक्शन पर नियमित टेस्टिंग (यह एक छोटा एनवायरमेंट होता है, जहां FCM के सबसे नए बिल्ड रन किए जाते हैं) टेस्ट कोड से असली उपयोगकर्ताओं को अलग करने के लिए फ़ायदेमंद है. fcm-xmpp.googleapis.com:5236 से कनेक्ट करने वाले टेस्ट डिवाइसों और टेस्ट कोड को, FCM के किसी दूसरे आईडी का इस्तेमाल करना चाहिए. इससे, प्रोडक्शन ट्रैफ़िक से टेस्ट कनेक्शन पर अपस्ट्रीम मैसेज भेजने या प्रोडक्शन उपयोगकर्ताओं को टेस्ट मैसेज भेजने से जुड़े जोखिम से बचा जा सकता है.

कनेक्शन के लिए दो ज़रूरी शर्तें हैं:

  • आपको ट्रांसपोर्ट लेयर सिक्योरिटी (TLS) कनेक्शन शुरू करना होगा. ध्यान दें कि फ़िलहाल, FCM में STARTTLS एक्सटेंशन काम नहीं करता.
  • FCM के लिए, <your_FCM_Sender_Id>@fcm.googleapis.com (FCM भेजने वाले का आईडी) और पासवर्ड के तौर पर सर्वर पासकोड का इस्तेमाल करके, एसएएसएल प्लेन ऑथेंटिकेशन का तरीका अपनाना ज़रूरी है. ये वैल्यू, Firebase console के सेटिंग पैनल के Cloud Messaging टैब में उपलब्ध हैं.

अगर किसी भी समय कनेक्शन टूटता है, तो आपको तुरंत फिर से कनेक्ट करना चाहिए. इस अवधि के बाद डिसकनेक्ट होने के बाद, बैक अप लेने की कोई ज़रूरत नहीं है पुष्टि करने के लिए. हर भेजने वाले का आईडी के लिए, FCM एक साथ 2,500 कनेक्शन की अनुमति देता है.

नीचे दिए गए स्निपेट में पुष्टि करने का तरीका बताया गया है और FCM के साथ XMPP कनेक्शन के लिए प्राधिकरण.

XMPP सर्वर

XMPP सर्वर, FCM से कनेक्शन का अनुरोध करता है

<stream:stream to="fcm.googleapis.com"
        version="1.0" xmlns="jabber:client"
        xmlns:stream="http://etherx.jabber.org/streams">

FCM

FCM, कनेक्शन को खोलता है और पुष्टि करने की प्रक्रिया का अनुरोध करता है. इसमें, PLAIN तरीका.

<stream:features>
  <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
    <mechanism>X-OAUTH2</mechanism>
    <mechanism>X-GOOGLE-TOKEN</mechanism>
    <mechanism>PLAIN</mechanism>
  </mechanisms>
</stream:features>

XMPP सर्वर

XMPP सर्वर को PLAIN पुष्टि करने के तरीके का इस्तेमाल करके जवाब देना होगा. इसके लिए, Firebase कंसोल के सेटिंग पैनल के क्लाउड से मैसेज करने की सेवा टैब से सर्वर कुंजी दें.

<auth mechanism="PLAIN"
xmlns="urn:ietf:params:xml:ns:xmpp-sasl">MTI2MjAwMzQ3OTMzQHByb2plY3RzLmdjbS5hb
mFTeUIzcmNaTmtmbnFLZEZiOW1oekNCaVlwT1JEQTJKV1d0dw==</auth>

FCM

<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>

XMPP सर्वर

<stream:stream to="fcm.googleapis.com"
        version="1.0" xmlns="jabber:client"
        xmlns:stream="http://etherx.jabber.org/streams">

FCM

<stream:features>
  <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/>
  <session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
</stream:features>

XMPP सर्वर

<iq type="set">
  <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"></bind>
</iq>

FCM

<iq type="result">
  <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
    <jid>SENDER_ID@fcm.googleapis.com/RESOURCE</jid>
  </bind>
</iq>

ध्यान दें: मैसेज को रूट करते समय, FCM बाउंड रिसॉर्स का इस्तेमाल नहीं करता.

देखें अनुरोध भेजने के अनुरोध बनाने के बारे में पूरी जानकारी पाने के लिए, अनुरोधों को भेजने के अनुरोध बनाएं. लेगसी XMPP प्रोटोकॉल रेफ़रंस उन सभी पैरामीटर की सूची देता है जो आपके मैसेज में शामिल हो सकते हैं.