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

आपके ऐप सर्वर या विश्वसनीय परिवेश से 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 एक्सेस टोकन

आपके आवेदन गणना इंजन, गूगल Kubernetes इंजन, App Engine या बादल फ़ंक्शन (Firebase के लिए बादल कार्य सहित), उपयोग आवेदन डिफ़ॉल्ट साख (एडीसी) पर चल रहा है। एडीसी क्रेडेंशियल्स प्राप्त करने के लिए अनुरोध अधिकृत करने के लिए अपने मौजूदा डिफ़ॉल्ट सेवा खाते का उपयोग करता है, और एडीसी वातावरण चर के माध्यम से लचीला स्थानीय परीक्षण के लिए सक्षम बनाता 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 परियोजनाओं गूगल का समर्थन सेवा खाते है, जो आप अपने अनुप्रयोग सर्वर या विश्वसनीय वातावरण से Firebase सर्वर एपीआई कॉल करने के लिए उपयोग कर सकते हैं। यदि आप स्थानीय रूप से कोड विकसित कर रहे हैं या अपने एप्लिकेशन को ऑन-प्रिमाइसेस परिनियोजित कर रहे हैं, तो आप सर्वर अनुरोधों को अधिकृत करने के लिए इस सेवा खाते के माध्यम से प्राप्त क्रेडेंशियल्स का उपयोग कर सकते हैं।

किसी सेवा खाते को प्रमाणित करने और उसे 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 परिवेशों में परीक्षण या चलते समय सेवा खाता क्रेडेंशियल्स का उपयोग कर सकते हैं।

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

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

अपने Firebase पहचान के साथ एक साथ उपयोग करें गूगल प्रमाणीकरण लाइब्रेरी टोकन एक अल्पकालिक OAuth 2.0 का उपयोग पुनः प्राप्त करने के लिए अपनी पसंद की भाषा:

नोड.जेएस

 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 ने लीगेसी सर्वर कुंजियाँ बनाना बंद कर दिया है। मौजूदा पुराने सर्वर कुंजी काम करना जारी रखेंगे, लेकिन हम अनुशंसा करते हैं कि आप के बजाय करने में महत्वपूर्ण लेबल सर्वर कुंजी के नए संस्करण का उपयोग Firebase कंसोल

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

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

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

  • Authorization : कुंजी = YOUR_SERVER_KEY
    सुनिश्चित करें कि इस सर्वर कुंजी, जिसका मूल्य में उपलब्ध है क्लाउड संदेश Firebase कंसोल सेटिंग्स फलक के टैब। Android, iOS और ब्राउज़र कुंजियाँ FCM द्वारा अस्वीकार कर दी जाती हैं।
  • Content-Type : application/json 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 पर रन endpoint fcm-xmpp.googleapis.com:5235 । जब गैर-उत्पादन उपयोगकर्ताओं के साथ कार्यक्षमता का परीक्षण, आप के बजाय पर पूर्व उत्पादन सर्वर से कनेक्ट करना चाहिए fcm-xmpp.googleapis.com:5236 (भिन्न पोर्ट पर ध्यान दें)।

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

कनेक्शन की दो महत्वपूर्ण आवश्यकताएं हैं:

  • आपको ट्रांसपोर्ट लेयर सिक्योरिटी (TLS) कनेक्शन शुरू करना होगा। ध्यान दें कि FCM वर्तमान में समर्थन नहीं करता STARTTLS विस्तार
  • FCM एक SASL मैदान प्रमाणीकरण का उपयोग तंत्र की आवश्यकता है <your_FCM_Sender_Id>@fcm.googleapis.com (FCM प्रेषक आईडी ) और पासवर्ड के रूप में सर्वर कुंजी। इन मूल्यों में उपलब्ध हैं क्लाउड संदेश 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 प्रमाणन विधि, से सर्वर कुंजी उपलब्ध कराने के क्लाउड संदेश Firebase कंसोल सेटिंग्स फलक के टैब।

<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 बाध्य संसाधन का उपयोग नहीं करता है।

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