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

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

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

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

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

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

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

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

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

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

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

  2. अगर एनवायरमेंट वैरिएबल सेट नहीं किया गया है, तो एडीसी डिफ़ॉल्ट सेवा खाते का इस्तेमाल करता है वह 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;

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

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

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

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

अगर आपको कोई मौजूदा पुराना सर्वर कुंजी मिटानी है, तो Google Cloud Console.

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

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

  • Authorization: कुंजी=YOUR_SERVER_KEY
    पक्का करें कि यह सर्वर कुंजी है, जिसकी वैल्यू में उपलब्ध क्लाउड से मैसेज टैब में जाकर, Firebase कंसोल सेटिंग पैनल में देख सकते हैं. Android, Apple प्लैटफ़ॉर्म, और ब्राउज़र कुंजियों को FCM ने अस्वीकार कर दिया है.
  • 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 को इसका इस्तेमाल करने वाले SASL PLAIN की पुष्टि करने वाले तरीके की ज़रूरत होती है <your_FCM_Sender_Id>@fcm.googleapis.com (FCM भेजने वाले का आईडी) और पासवर्ड के रूप में सर्वर कुंजी का उपयोग करें. ये वैल्यू में उपलब्ध क्लाउड से मैसेज भेजने वाला टैब, जो Firebase कंसोल सेटिंग पैनल का है.

अगर किसी भी समय कनेक्शन टूटता है, तो आपको तुरंत फिर से कनेक्ट करना चाहिए. इस अवधि के बाद डिसकनेक्ट होने के बाद, बैक अप लेने की कोई ज़रूरत नहीं है पुष्टि करने के लिए. हर भेजने वाले का आईडी के लिए, 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 प्रोटोकॉल रेफ़रंस उन सभी पैरामीटर की सूची देता है जो आपके मैसेज में शामिल हो सकते हैं.