Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

अनुरोध भेजने के लिए अधिकृत करें

संग्रह की मदद से व्यवस्थित रहें अपनी प्राथमिकताओं के आधार पर, कॉन्टेंट को सेव करें और कैटगरी में बांटें.

आपके ऐप सर्वर या विश्वसनीय परिवेश से FCM को भेजे गए अनुरोध अधिकृत होने चाहिए। लीगेसी HTTP और HTTP v1 API प्राधिकरण के बीच इन महत्वपूर्ण अंतरों पर ध्यान दें:

  • FCM HTTP v1 API अल्पकालिक OAuth 2.0 एक्सेस टोकन के साथ अनुरोधों को अधिकृत करता है। इस टोकन को ढालने के लिए, आप Google एप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल्स (Google सर्वर वातावरण में) का उपयोग कर सकते हैं और/या किसी सेवा खाते के लिए जेनरेट की गई JSON निजी कुंजी फ़ाइल से मैन्युअल रूप से आवश्यक क्रेडेंशियल प्राप्त कर सकते हैं। यदि आप संदेश भेजने के लिए फायरबेस व्यवस्थापक एसडीके का उपयोग कर रहे हैं, तो पुस्तकालय आपके लिए टोकन संभालता है।
  • लीगेसी प्रोटोकॉल Firebase कंसोल से प्राप्त केवल लंबे समय तक चलने वाली API कुंजियों का उपयोग कर सकते हैं।

HTTP v1 को अधिकृत करें अनुरोध भेजें

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

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

यदि आपका एप्लिकेशन Compute Engine, Google Kubernetes Engine, App Engine, या Cloud Functions (Firebase के लिए Cloud Functions सहित) पर चल रहा है , तो Application Default Credentials (ADC) का उपयोग करें। एडीसी अनुरोधों को अधिकृत करने के लिए क्रेडेंशियल प्राप्त करने के लिए आपके मौजूदा डिफ़ॉल्ट सेवा खाते का उपयोग करता है, और एडीसी पर्यावरण चर GOOGLE_APPLICATION_CREDENTIALS के माध्यम से लचीला स्थानीय परीक्षण सक्षम करता है। प्राधिकरण प्रवाह के पूर्ण स्वचालन के लिए, व्यवस्थापक एसडीके सर्वर पुस्तकालयों के साथ एडीसी का उपयोग करें।

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

एडीसी का उपयोग करके क्रेडेंशियल प्रदान करें

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

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

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

  3. यदि ADC उपरोक्त किसी भी क्रेडेंशियल का उपयोग नहीं कर सकता है, तो सिस्टम एक त्रुटि उत्पन्न करता है।

निम्नलिखित व्यवस्थापक एसडीके कोड उदाहरण इस रणनीति को दिखाता है। उदाहरण स्पष्ट रूप से एप्लिकेशन क्रेडेंशियल निर्दिष्ट नहीं करता है। हालांकि, जब तक पर्यावरण चर सेट है, या जब तक एप्लिकेशन कंप्यूट इंजन, Google कुबेरनेट्स इंजन, ऐप इंजन या क्लाउड फ़ंक्शंस पर चल रहा है, तब तक एडीसी क्रेडेंशियल्स को निहित रूप से ढूंढने में सक्षम है।

Node.js

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

जावा

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

FirebaseApp.initializeApp(options);

अजगर

default_app = firebase_admin.initialize_app()

जाओ

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

सी#

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

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

Firebase प्रोजेक्ट Google सेवा खातों का समर्थन करते हैं, जिनका उपयोग आप अपने ऐप सर्वर या विश्वसनीय परिवेश से Firebase सर्वर API को कॉल करने के लिए कर सकते हैं। यदि आप स्थानीय रूप से कोड विकसित कर रहे हैं या अपने एप्लिकेशन को ऑन-प्रिमाइसेस परिनियोजित कर रहे हैं, तो आप सर्वर अनुरोधों को अधिकृत करने के लिए इस सेवा खाते के माध्यम से प्राप्त क्रेडेंशियल्स का उपयोग कर सकते हैं।

किसी सेवा खाते को प्रमाणित करने और उसे Firebase सेवाओं तक पहुंचने के लिए अधिकृत करने के लिए, आपको JSON प्रारूप में एक निजी कुंजी फ़ाइल जनरेट करनी होगी।

अपने सेवा खाते के लिए एक निजी कुंजी फ़ाइल बनाने के लिए:

  1. Firebase कंसोल में, सेटिंग > सेवा खाते खोलें.

  2. नई निजी कुंजी उत्पन्न करें पर क्लिक करें, फिर कुंजी उत्पन्न करें पर क्लिक करके पुष्टि करें।

  3. कुंजी वाली JSON फ़ाइल को सुरक्षित रूप से संग्रहीत करें।

सेवा खाते के माध्यम से अधिकृत करते समय, आपके पास अपने आवेदन के लिए क्रेडेंशियल प्रदान करने के लिए दो विकल्प होते हैं। आप या तो GOOGLE_APPLICATION_CREDENTIALS पर्यावरण चर सेट कर सकते हैं, या आप कोड में सेवा खाता कुंजी का पथ स्पष्ट रूप से पास कर सकते हैं। पहला विकल्प अधिक सुरक्षित है और इसकी दृढ़ता से अनुशंसा की जाती है।

पर्यावरण चर सेट करने के लिए:

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

लिनक्स या macOS

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

खिड़कियाँ

पावरशेल के साथ:

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

उपरोक्त चरणों को पूरा करने के बाद, एप्लिकेशन डिफॉल्ट क्रेडेंशियल्स (एडीसी) आपके क्रेडेंशियल्स को स्पष्ट रूप से निर्धारित करने में सक्षम है, जिससे आप गैर-Google परिवेशों में परीक्षण या चलते समय सेवा खाता क्रेडेंशियल्स का उपयोग कर सकते हैं।

टोकन एक्सेस करने के लिए क्रेडेंशियल का उपयोग करें

जब तक आप एडमिन एसडीके का उपयोग नहीं कर रहे हैं, जो स्वचालित रूप से प्राधिकरण को संभालता है, आपको एक्सेस टोकन को मिंट करना होगा और अनुरोध भेजने के लिए इसे जोड़ना होगा।

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

नोड.जेएस

 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 वेब टोकन देखें।

अजगर

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

  :return: Access token.
  """
  credentials = ServiceAccountCredentials.from_json_keyfile_name(
      'service-account.json', SCOPES)
  access_token_info = credentials.get_access_token()
  return access_token_info.access_token

जावा

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

आपके एक्सेस टोकन की समय सीमा समाप्त होने के बाद, टोकन रीफ्रेश विधि को अपडेट किए गए एक्सेस टोकन को पुनर्प्राप्त करने के लिए स्वचालित रूप से कॉल किया जाता है।

FCM तक पहुंच को अधिकृत करने के लिए, https://www.googleapis.com/auth/firebase.messaging क्षेत्र का अनुरोध करें।

HTTP अनुरोध शीर्षलेख में एक्सेस टोकन जोड़ने के लिए:

प्राधिकरण प्रारूप में Authorization शीर्षलेख के मूल्य के रूप में टोकन जोड़ें Authorization: Bearer <access_token> :

नोड.जेएस

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

अजगर

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

जावा

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

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

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

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

मार्च 2020 से, FCM ने लीगेसी सर्वर कुंजियाँ बनाना बंद कर दिया है। मौजूदा लीगेसी सर्वर कुंजियां काम करती रहेंगी, लेकिन हम अनुशंसा करते हैं कि आप इसके बजाय फायरबेस कंसोल में कुंजी लेबल वाली सर्वर कुंजी के नए संस्करण का उपयोग करें।

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

HTTP अनुरोधों को अधिकृत करें

संदेश अनुरोध में दो भाग होते हैं: HTTP शीर्षलेख और HTTP निकाय। HTTP शीर्षलेख में निम्न शीर्षलेख शामिल होने चाहिए:

  • Authorization : कुंजी=Your_SERVER_KEY
    सुनिश्चित करें कि यह सर्वर कुंजी है, जिसका मान फायरबेस कंसोल सेटिंग्स फलक के क्लाउड मैसेजिंग टैब में उपलब्ध है। Android, Apple प्लेटफ़ॉर्म और ब्राउज़र कुंजियाँ FCM द्वारा अस्वीकार कर दी जाती हैं।
  • Content-Type : 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" : {
    ...
  },
}

भेजें अनुरोध बनाने पर पूर्ण विवरण के लिए बिल्ड भेजें अनुरोध देखें। लीगेसी HTTP प्रोटोकॉल संदर्भ आपके संदेश में शामिल सभी पैरामीटर की एक सूची प्रदान करता है।

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

यदि आपको संदेश भेजते समय प्रमाणीकरण त्रुटियाँ प्राप्त होती हैं, तो अपनी सर्वर कुंजी की वैधता की जाँच करें। उदाहरण के लिए, लिनक्स पर, निम्न कमांड चलाएँ:

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 HTTP स्थिति कोड प्राप्त होता है, तो आपकी सर्वर कुंजी मान्य नहीं है।

एक एक्सएमपीपी कनेक्शन अधिकृत करें

XMPP के साथ, आप FCM सर्वरों के लिए एक सतत, अतुल्यकालिक, द्विदिश कनेक्शन बनाए रख सकते हैं। कनेक्शन का उपयोग आपके सर्वर और आपके उपयोगकर्ताओं के FCM से जुड़े उपकरणों के बीच संदेश भेजने और प्राप्त करने के लिए किया जा सकता है।

आप FCM से लंबे समय तक चलने वाले कनेक्शन को प्रबंधित करने के लिए अधिकांश XMPP पुस्तकालयों का उपयोग कर सकते हैं। 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 प्रेषक आईडी ) और पासवर्ड के रूप में सर्वर कुंजी का उपयोग करके SASL सादा प्रमाणीकरण तंत्र की आवश्यकता है। ये मान Firebase कंसोल सेटिंग फलक के क्लाउड संदेश सेवा टैब में उपलब्ध हैं।

यदि किसी भी बिंदु पर कनेक्शन विफल हो जाता है, तो आपको तुरंत पुन: कनेक्ट करना चाहिए। प्रमाणीकरण के बाद होने वाले डिस्कनेक्ट के बाद बैक ऑफ करने की कोई आवश्यकता नहीं है। प्रत्येक प्रेषक आईडी के लिए, FCM समानांतर में 2500 कनेक्शन की अनुमति देता है।

निम्नलिखित स्निपेट बताते हैं कि एफसीएम से एक्सएमपीपी कनेक्शन के लिए प्रमाणीकरण और प्राधिकरण कैसे किया जाता है।

एक्सएमपीपी सर्वर

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

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

एफसीएम

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 सर्वर को PLAIN कंसोल सेटिंग्स फलक के क्लाउड मैसेजिंग टैब से सर्वर कुंजी प्रदान करते हुए, प्लेन ऑथ विधि का उपयोग करके प्रतिक्रिया देनी चाहिए।

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

एफसीएम

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

एक्सएमपीपी सर्वर

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

एफसीएम

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

एक्सएमपीपी सर्वर

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

एफसीएम

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

नोट: संदेशों को रूट करते समय FCM बाध्य संसाधन का उपयोग नहीं करता है।

भेजें अनुरोध बनाने पर पूर्ण विवरण के लिए बिल्ड भेजें अनुरोध देखें। लीगेसी एक्सएमपीपी प्रोटोकॉल संदर्भ उन सभी मापदंडों की एक सूची प्रदान करता है जिनमें आपके संदेश शामिल हो सकते हैं।